http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57769
--- Comment #2 from Henri <korpela.henri.mikael at gmail dot com> --- (In reply to Paolo Carlini from comment #1) > Please add here a minimized self-contained reproducer. Also, you are not > saying which version of GCC you are using. My GCC version is currently 4.7. I use Code::Blocks as my IDE. Interesting that my attempt to reproduce the internal compiler error fails in the self-contained code below (with compiler errors)... class C{ public: C(C&&) = default; explicit C(int (&array)[2][2]) : C({ ._m_array = { {array[0][0], array[0][1]}, {array[1][0], array[1][1]} } }) { } private: int _m_array[2][2]; }; int main(void){ int array[2][2] = { {1, 2}, {3, 4} }; C c(array); return 0; } ||In constructor 'C::C(int (&)[2][2])':| |42|error: no matching function for call to 'C::C(<brace-enclosed initializer list>)'| |42|note: candidates are:| |37|note: C::C(int (&)[2][2])| |37|note: no known conversion for argument 1 from '<brace-enclosed initializer list>' to 'int (&)[2][2]'| |35|note: constexpr C::C(C&&)| |35|note: no known conversion for argument 1 from '<brace-enclosed initializer list>' to 'C&&'| ||=== Build finished: 1 errors, 0 warnings (0 minutes, 0 seconds) ===| ...and somehow succeeds here: class C{ public: C(C&&) = default; explicit C(int (&&array)[2][2]) : C({ ._m_array = { {array[0][0], array[0][1]}, {array[1][0], array[1][1]} } }) { } private: int _m_array[2][2]; }; int main(void){ C c({{ {1, 2}, {3, 4} }}); return 0; } ||In constructor 'C::C(int (&&)[2][2])':| |42|internal compiler error: in process_init_constructor_array, at cp/typeck2.c:1080| ||=== Build finished: 1 errors, 0 warnings (0 minutes, 0 seconds) ===| This leads me to believe that the compiler fails to parse rvalue references to multidimensional arrays in a scenario like this.