http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58753
--- Comment #8 from Ville Voutilainen <ville.voutilainen at gmail dot com> --- Slightly reduced, I guess... #include <initializer_list> template <class T> struct X {X(std::initializer_list<int>) {}}; template <class zomg> class T { X<T> x{1}; }; int main() { T<int> t; } This gives plaatti-reduced2.cpp: In constructor ‘constexpr T<int>::T()’: plaatti-reduced2.cpp:7:7: error: no matching function for call to ‘X<T<int> >::X(<brace-enclosed initializer list>)’ class T { ^ plaatti-reduced2.cpp:7:7: note: candidates are: plaatti-reduced2.cpp:4:11: note: X<T>::X(std::initializer_list<int>) [with T = T<int>] struct X {X(std::initializer_list<int>) {}}; ^ plaatti-reduced2.cpp:4:8: note: constexpr X<T<int> >::X(const X<T<int> >&) struct X {X(std::initializer_list<int>) {}}; ^ plaatti-reduced2.cpp:4:8: note: no known conversion for argument 1 from ‘int’ to ‘const X<T<int> >&’ plaatti-reduced2.cpp:4:8: note: constexpr X<T<int> >::X(X<T<int> >&&) plaatti-reduced2.cpp:4:8: note: no known conversion for argument 1 from ‘int’ to ‘X<T<int> >&&’ plaatti-reduced2.cpp: In function ‘int main()’: plaatti-reduced2.cpp:14:10: note: synthesized method ‘constexpr T<int>::T()’ first required here T<int> t; ^