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

odi*_*erd 7 c++ gcc constexpr c++11

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

这会产生:

error: non-constant condition for static assertion
Run Code Online (Sandbox Code Playgroud)

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

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

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

And*_*owl 17

一个constexpr函数也可以在运行时进行计算参数调用(在这种情况下,它只是被执行,就像任何普通功能).例如,请参阅此实例.

static_assert(),在另一方面,严格要求其条件是一个常量表达式可以在编译时进行评估.