为了在编译时强制对constexpr
函数进行评估,我应该是 能够将其返回值分配给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++
返回一个编译器错误:
error: constexpr variable 'b' must be initialized by a constant expression
是我在做什么允许?或者clang
是限制性的?或者是gcc
是放任?
cpp.godbolt.org:gcc 6.1 & clang 3.8
的'双&'必须'constexpr' – Dani