gcc 4.9结构初始化中的错误?

时间:2015-04-07 08:43:23

标签: c++ c++11 gcc gcc4.9

我有代码:

struct A {
    int a;
};

struct B {
    int b;
    const A a[2];
};

struct C {
    int c;
    const B b[2];
};

const C test = {0, {}};

int main()
{
    return test.c;
}

我有gcc 4.8.2和4.9.2。它可以编译得很好:

g++-4.9 -Wall test.cpp -o test
g++-4.8 -std=c++11 -Wall test.cpp -o test
g++-4.8 -Wall test.cpp -o test

但是,它无法编译:

g++-4.9 -std=c++11 -Wall test.cpp -o test

编译器输出为:

test.cpp:15:22: error: uninitialized const member ‘B::a’
 const C test = {0, {}};
                      ^
test.cpp:15:22: error: uninitialized const member ‘B::a’

这是一个错误还是我只是不明白?

1 个答案:

答案 0 :(得分:3)

这是一个错误,它本质上减少了GCC抱怨聚合初始化中未明确初始化的const数据成员。 E.g。

struct {const int i;} bar = {};

Fails因为i的初始值设定项中没有bar的初始化子句。但是,该标准在§8.5.1/7中指定了

  

如果列表中的 initializer-clauses 少于   聚合中的成员,然后未明确初始化每个成员   应从其大括号或等于初始化程序初始化,或者如果有的话   从空的初始化列表中没有大括号或等于初始化   (8.5.4)

因此,代码初始化i(好像是= {}),并且GCC投诉不正确。

事实上,这个错误已在四年前作为#49132报告,并在GCC 5中得到修复。