作为该讨论过程中提出了一个问题, 这太问题 :
它是合法的,可能与N3471 ,申报了constexpr std::initializer_list
对象? 例:
constexpr std::initializer_list<int> my_list{};
为什么我认为这可能不合法: initializer_list
必须是文字型; 但是否有任何保证,它是一个文本类型?
从N3485引文。
[Dcl.constexpr] / 9:
在一个对象中声明使用的constexpr指定符的对象为const。 这样的对象应具有文本类型,并应被初始化。
文字类型的需求,[basic.types] / 10,子子弹类类型:
- 类类型(第9),其具有所有以下性质中:
- 它有一个平凡的析构函数,
- 每个构造呼叫和全表达在大括号或相等-初始化用于非静态数据成员(如果有的话)是一个常量表达式(5.19),
- 它是一个聚合类型(8.5.1)或具有至少一个构造函数constexpr或构造模板不是复制或移动的构造,和
- 其所有的非静态数据成员和基类的是非易失性的文字类型。
加分点;)回答如果
constexpr std::initializer_list<int> my_list = {1,2,3,4,5};
是合法的(有参考)。 虽然我认为这是由上述+ [dcl.init.list] / 5覆盖