我有这段代码可以编译
#include <bitset>
struct A{
std::bitset<50> b; };
void test(A a){
static_assert(sizeof(int)*8 < a.b.size(), "can't accomodate int in bitset");
int x = 5;
a.b = x; }
int main(){
A a;
test(a); }
但这并不
#include <bitset>
struct A{
std::bitset<50> b;
};
void test(A& a){
static_assert(sizeof(int)*8 < a.b.size(), "can't accomodate int in bitset");
int x = 5;
a.b = x;
}
int main(){
A a;
test(a);
}
失败并出现此错误
const.cpp: In function ‘void test(A&)’: const.cpp:8:5: error: non-constant condition for static assertion
static_assert(sizeof(int)*8 < a.b.size(), "can't accomodate int in bitset");
const.cpp:8:5: error: ‘a’ is not a constant expression
为什么a.b.size()
在第二种情况下不被视为 constexpr ?是不是应该根据参考被视为 const 的constexpr
那个?还是在第二种情况下传递的非常量引用会触发编译器生成错误?std::bitset::size()
编译器版本:Ubuntu 14.0.4 上的 g++ 4.8.4,编译时使用g++ const.cpp -std=c++1y