https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66153
--- Comment #7 from Peter Boyle <paboyle at ph dot ed.ac.uk> --- Signature of fail in 8.0.0 (head) is: ^~~~ prog.cc: In substitution of 'template<int N, class obj> Container<decltype (function<N>(arg.data[0]))> function(const Container<obj>&) [with int N = 1; obj = <missing>]': prog.cc:43:101: recursively required by substitution of 'template<int N, class obj> Container<decltype (function<N>(arg.data[0]))> function(const Container<obj>&) [with int N = 1; obj = <missing>]' prog.cc:43:101: required by substitution of 'template<int N, class obj> Container<decltype (function<N>(arg.data[0]))> function(const Container<obj>&) [with int N = 1; obj = <missing>]' prog.cc:45:33: required from 'Container<decltype (function<N>(arg.data[0]))> function(const Container<obj>&) [with int N = 1; obj = Recursive<Recursive<std::complex<double> > >]' prog.cc:58:26: required from here prog.cc:43:101: fatal error: template instantiation depth exceeds maximum of 900 (use -ftemplate-depth= to increase the maximum) template<int N,class obj> auto function(const Container<obj> & arg)-> Container<decltype(function<N>(arg.data[0]))> ~~~~~~~~~~~^~~~~~~~~~~~~ compilation terminated.