为什么比较constexpr函数的两个参数而不是静态断言的常量条件?

时间:2013-07-10 18:02:41

标签: c++ gcc c++11 constexpr

constexpr uint32_t BitPositionToMask(int i,int Size){
static_assert(i < Size,"bit position out of range");
return 1 << i;
}

这会产生:

error: non-constant condition for static assertion

关于GCC 4.6.2我没有得到什么或者这是一个GCC错误?

更新 谢谢安迪再次成为我的书呆子守护天使。因为我在编译时有值,所以我只是把它作为模板,它按预期工作。

template<int i,int Size>
constexpr uint32_t BitPositionToMask(){
    static_assert(i < Size,"bit position out of range");
    return 1 << i;
}

1 个答案:

答案 0 :(得分:17)

还可以使用在运行时计算的参数调用constexpr函数(在这种情况下,它只是像任何常规函数一样执行)。例如,请参阅此 live example

另一方面,static_assert()严格要求其条件为可在编译时计算的常量表达式。