【发布时间】:2016-08-13 20:14:33
【问题描述】:
要在编译时强制评估 constexpr 函数,我应该
能够将其返回值分配给constexpr 变量。
constexpr bool const_d_ref(const double& v) { return false; }
int main() {
constexpr double dd = 0.0;
constexpr bool cb = const_d_ref(dd);
}
这似乎适用于 g++ 和 clang++。
为了对消费者隐藏constexpr,我移动了实际功能
定义到namespace detail,创建一个新的函数来分配
将值返回给constexpr 变量并返回它。
namespace detail {
constexpr bool const_d_ref(const double& v) { return false; }
}
constexpr bool const_d_ref(const double& v) {
constexpr bool b = detail::const_d_ref(v);
return b;
}
int main() {
constexpr double dd = 0.0;
bool b = const_t_ref(dd);
constexpr bool cb = detail::const_t_ref(dd);
}
使用g++ 可以正常工作,但clang++ 返回编译器错误:
错误:constexpr 变量 'b' 必须由常量表达式初始化
我正在做的事情是否被允许?还是clang 有限制?还是gcc 允许?
【问题讨论】:
-
double &必须是constexpr
标签: c++ g++ c++14 constexpr clang++