10
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 错误?

4

2 回答 2

20

也可以使用在运行时评估的constexpr参数调用函数(在这种情况下,它就像任何常规函数一样被执行)。例如,参见这个活生生的例子

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

于 2013-07-10T18:03:36.200 回答
0

如果这些值在编译时已知,则可以将它们作为模板参数传递并按预期工作。

template<int i,int Size>
constexpr uint32_t BitPositionToMask(){
    static_assert(i < Size,"bit position out of range");
    return 1 << i;
}
于 2021-12-12T14:43:47.883 回答