S不是字面型吗?

Wak*_*zil 4 c++ constexpr c++11

此代码不在Coliru中编译,尽管它似乎符合iso§5.19p2第9个子弹点和iso§3.9p10,即,S是文字类型,因此,S a(1);应该被视为常量表达式.特别是,iso§3.9p10项目符号第3点没有说明有关联合成员的任何内容.

#include <iostream>

struct S
{
    int i;
    float x;

    constexpr S(int j) : i{j} {}
};    

int main()
{
    constexpr S a(1);
}
Run Code Online (Sandbox Code Playgroud)

Ker*_* SB 9

这在7.1.5/4([dcl.constexpr]," constexpr说明符")中标准化:

constexpr构造函数的定义应满足以下约束:

  • [...]

  • 应初始化每个非静态数据成员和基类子对象

  • [...]