class Foo { public: private: static const int kRows = 4; static const int kCols = 4; union { float m_n[kRows][kCols]; float m_m[kRows * kCols] = { 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f }; }; }; int main() { Foo myFoo; return 0; } Compile: g++ -std=c++11 foo.cc Result: foo.cc: In constructor ‘constexpr Foo::Foo()’: foo.cc:1:7: internal compiler error: in cx_check_missing_mem_inits, at cp/semantics.c:6166 class Foo { ^ foo.cc:1:7: internal compiler error: Abort trap: 6 g++: internal compiler error: Abort trap: 6 (program cc1plus) Abort trap: 6 System: Darwin Kernel Version 12.2.0: Sat Aug 25 00:48:52 PDT 2012; root:xnu-2050.18.24~1/RELEASE_X86_64 x86_64 GCC build command: ./configure --enable-languages=c,c++ g++ --version g++ (GCC) 4.8.0 20121020 (experimental) Additional notes: By either naming the union, or supplying a default constructor the sample compiles.
This is fixed in mainline. I'm adding the testcase and closing the bug.
Done.