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 错误?
也可以使用在运行时评估的constexpr
参数调用函数(在这种情况下,它就像任何常规函数一样被执行)。例如,参见这个活生生的例子。
static_assert()
另一方面,A严格要求它的条件是一个可以在编译时计算的常量表达式。
如果这些值在编译时已知,则可以将它们作为模板参数传递并按预期工作。
template<int i,int Size>
constexpr uint32_t BitPositionToMask(){
static_assert(i < Size,"bit position out of range");
return 1 << i;
}