DrP*_*zza 6 c++ unions constexpr c++11
#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;
}
Run Code Online (Sandbox Code Playgroud)
数组声明错误,因为get_max_arenas不是constexpr.我不清楚为什么会这样.
稍微改写一下你的程序:
static constexpr auto gma = get_max_arenas();
size_t current_colour[gma]; // error
Run Code Online (Sandbox Code Playgroud)
给出了Clang错误:
在常量表达式中不允许读取具有活动成员'value'的联合成员'bits'
你得到这个错误的原因是构造函数设置了value,然后你尝试阅读bits.正如@gurka所评论的那样,这是不允许的.
标准报价:
[expr.const]
2所述的条件表达式e是一个核心常量表达式除非 e的评价,如下所述抽象机(1.9),将评估下面的表达式中的一个的规则:
(2.8) -左值到右值被施加到该指glvalue转换(4.1)或修饰(5.18,5.2.6,5.3.2)联合的非活动构件或它们的子对象;
| 归档时间: |
|
| 查看次数: |
475 次 |
| 最近记录: |