http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54763
Bug #: 54763 Summary: Crash with enable_if (instead of recursive template errors) Classification: Unclassified Product: gcc Version: 4.7.2 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ AssignedTo: unassig...@gcc.gnu.org ReportedBy: pk...@outlook.com Created attachment 28308 --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=28308 C++11 code which causes an internal compiler error The attached minimised C++11 test case causes an internal compiler error. Clang instead gives an endless list of errors such as: fatal error: recursive template instantiation exceeded maximum depth of 512 The code, which is also shown below, will run correctly if the enable_if is instead set to: std::enable_if<(I>0)>::type. #include <type_traits> template <unsigned> struct tint {}; double zod(tint<0>) { return 3.142; } template < unsigned I, typename = typename std::enable_if<(I>0),decltype(zod(tint<I-1>()))>::type > decltype(zod(tint<I-1>())) zod(tint<I>) { return zod(tint<I-1>()); } int main(int argc, char *argv[]) { zod(tint<0>()); return 0; }