使用clang强制编译constexpr的时间

时间:2016-08-13 20:14:33

标签: c++ g++ c++14 constexpr clang++

要在编译时强制评估houghLines函数,我应该这样做 能够将其返回值分配给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++返回编译器错误:

  

错误:constexpr变量' b'必须通过常量表达式初始化

我正在做什么?或clang++是限制性的?或者clang是否允许?

cpp.godbolt.org:HERE& gcc 6.1

1 个答案:

答案 0 :(得分:4)

v中的

constexpr bool const_d_ref(const double& v) {不是编译时表达式。因此detail::const_d_ref(v)也不是编译时表达式。

如果您将b更改为const

,您的示例将有效
const bool b = detail::const_d_ref(v);

cpp.godbolt.org