我正在尝试使用 C++11 新的 constexpr 功能在编译时评估这个简单的表达式:
template <int a, int b>
class Test
{
static constexpr double c = a / b;
};
Run Code Online (Sandbox Code Playgroud)
但这是 Clang 一直告诉我的:
Constexpr variable 'c' must be initialized by a constant expression
Run Code Online (Sandbox Code Playgroud)
奇怪的是,以下编译得很好:
template <int a, int b>
class Test
{
static constexpr double c = a / 2.f;
};
Run Code Online (Sandbox Code Playgroud)
你们知道为什么 a/b 不是常量表达式,我怎么能在编译时评估它?
使用带有 -std=c++1y 和 -stdlib=libc++ 的 Clang 编译器
更新
以下示例导致原始代码出现错误:
Test<10,0> test1 ;
Run Code Online (Sandbox Code Playgroud)
尽管:
Test<10,1> test1 ;
Run Code Online (Sandbox Code Playgroud)
才不是。