#include <iostream>
union gc_bits {
size_t value;
struct {
size_t arena : 2;
} bits;
constexpr gc_bits(size_t value_) : value(value_) {
}
};
static constexpr size_t get_max_arenas() {
return gc_bits(~0ULL).bits.arena;
}
size_t current_colour[get_max_arenas()]; // error
int main() {
std::cout << get_max_arenas() << std::endl;
}
数组声明错误,因为get_max_arenas不是constexpr。我不清楚为什么会这样。
答案 0 :(得分:7)
略微改写你的节目:
static constexpr auto gma = get_max_arenas();
size_t current_colour[gma]; // error
给出了Clang错误:
阅读会员&#39;位&#39;与活跃成员联合的价值&#39;不是 允许持续表达
您收到此错误的原因是构造函数设置了value
,然后您尝试阅读bits
。这是不允许的,正如@gurka所评论的那样。
Standard引用:
<强> [expr.const] 强>
2条件表达式e是核心常量表达式,除非 评估e,遵循抽象机的规则(1.9), 将评估以下表达式之一:
(2.8) - 左值到左值的转换(4.1)或修改(5.18, 5.2.6,5.3.2)应用于引用联盟的非活跃成员或其子对象的glvalue;