2013-07-10 23 views
3
constexpr uint32_t BitPositionToMask(int i,int Size){ 
static_assert(i < Size,"bit position out of range"); 
return 1 << i; 
} 

这会产生:为什么比较一个constexpr函数的两个参数不是静态断言的一个恒定条件?

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; 
} 

回答

13

一个constexpr功能也可以在运行时评估的参数调用(在这种情况下,它只是被执行,就像任何普通功能)。例如参见live example

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

+0

因为它“可能”是一个运行时间函数static_assert不像我,哦,嘿安迪你似乎回答我的所有问题。 – odinthenerd

+0

@PorkyBrain:大声笑,我发誓我没有故意这样做(其实我最近并没有真正回答很多问题) –

+0

你什么时候打了50k?天啊! – chris

相关问题