是否允许标准:
struct A
{
int a = 3;
int b = 3;
};
A a{0,1}; // ???
Run Code Online (Sandbox Code Playgroud)
这个课程仍然是聚合的吗?
clang接受此代码,但gcc不接受.
考虑以下代码:
struct S
{
int x;
double y = 1.1;
};
int main()
{
S s = {0};
}
Run Code Online (Sandbox Code Playgroud)
根据C++ 14标准,§8.5.1/ 7
如果列表中的初始化子条款少于聚合中的成员,则未明确初始化的每个成员应从其大括号或等号初始值初始化,或者,如果没有大括号或等号初始值,从空的初始化列表(8.5.4).
代码应该完全有效.
但是,g ++ 4.9.2拒绝代码(编译-std=c++14)
so.cpp:9:13: error: could not convert '{0}' from '<brace-enclosed initializer list>' to 'S'
S s = {0};
Run Code Online (Sandbox Code Playgroud)
另一方面,clang ++编译它.
这是g ++的已知问题吗?