http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56189
Bug #: 56189 Summary: Infinite recursion with noexcept when instantiating function template Classification: Unclassified Product: gcc Version: 4.8.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ AssignedTo: unassig...@gcc.gnu.org ReportedBy: b...@kolumbus.fi The following code: namespace test { template<typename T> void tt(T&, T&); } template<typename T> void tt(T& a, T& b) noexcept(noexcept(::test::tt(a,b))); template<typename T> void foo(T& x, T& y) noexcept(noexcept(tt(x, y))); int main() { int i; foo(i,i); } fails to compile with error: Compilation finished with errors: source.cpp:11:47: error: template instantiation depth exceeds maximum of 900 (use -ftemplate-depth= to increase the maximum) substituting 'template<class T> void tt(T&, T&) [with T = <missing>]' void foo(T& x, T& y) noexcept(noexcept(tt(x, y))); ^ source.cpp:11:47: recursively required from 'void tt(T&, T&) [with T = int]' source.cpp:11:47: required from 'void foo(T&, T&) [with T = int]' source.cpp:16:12: required from here source.cpp:11:47: error: no matching function for call to 'tt(int&, int&)' source.cpp:11:47: note: candidate is: source.cpp:8:6: note: template<class T> void tt(T&, T&) void tt(T& a, T& b) noexcept(noexcept(::test::tt(a,b))); ^ source.cpp:8:6: note: substitution of deduced template arguments resulted in errors seen above