// PR c++/44909 // { dg-do compile { target c++11 } } // Declaring A>'s copy ctor means choosing a ctor to initialize D, // which means choosing a ctor for C>, which meant considering // C(const B&) which means choosing a ctor for B, which means choosing // a ctor for A>. Cycle. template struct A { T t; }; template struct B { typename T::U u; }; template struct C { C(const T&); }; template struct D { C > v; }; struct E { typedef A > U; }; extern A > a; A > a2(a);