http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51395
Bug #: 51395 Summary: [4.5/4.6 Regression] ICE in dependent_type_p (endless (?) recursion) Classification: Unclassified Product: gcc Version: 4.6.2 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ AssignedTo: unassig...@gcc.gnu.org ReportedBy: d...@gcc.gnu.org Created attachment 25981 --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=25981 test case the ICE is seen with 4.5 and 4.6 branches, not with 4.4 and trunk. $ g++-4.4 -std=c++0x t.cpp t.cpp: In function 'F2 operator|(F1, F2)': t.cpp:2: error: expected primary-expression before '[' token t.cpp:2: error: expected primary-expression before '=' token t.cpp:2: error: expected primary-expression before ']' token t.cpp:2: error: expected primary-expression before 'unsigned' t.cpp:2: error: expected ';' before '{' token t.cpp:2: error: 'x' was not declared in this scope t.cpp: At global scope: t.cpp:4: error: expected primary-expression before '[' token t.cpp:4: error: expected primary-expression before ']' token t.cpp:4: error: expected primary-expression before 'float' t.cpp:4: error: unable to deduce 'auto' from '<expression error>' t.cpp:5: error: expected ',' or ';' before '{' token $ g++-4.5 -std=c++0x t.cpp g++-4.5: Internal error: Segmentation fault (program cc1plus) Please submit a full bug report. $ g++-4.6 -std=c++0x t.cpp g++-4.6: internal compiler error: Segmentation fault (program cc1plus) Please submit a full bug report, $ /usr/lib/gcc-snapshot/bin/g++ -std=c++0x t.cpp t.cpp: In instantiation of 'operator|(F1, F2) [with F1 = <lambda(float)>::<lambda(long long unsigned int)>; F2 = <lambda()>]::<lambda(long long unsigned int)>': t.cpp:2:75: required from 'struct operator|(F1, F2) [with F1 = <lambda(float)>::<lambda(long long unsigned int)>; F2 = <lambda()>]::<lambda(long long unsigned int)>' t.cpp:2:83: required from 'F2 operator|(F1, F2) [with F1 = <lambda(float)>::<lambda(long long unsigned int)>; F2 = <lambda()>]' t.cpp:16:26: required from here t.cpp:2:83: error: no match for call to '(const<lambda()>) (float)' t.cpp:9:15: note: candidates are: t.cpp:2:83: note: <lambda()>::<lambda(float)> (*)() <conversion> t.cpp:2:83: note: candidate expects 1 argument, 2 provided t.cpp:9:17: note: <lambda()> t.cpp:9:17: note: candidate expects 0 arguments, 1 provided t.cpp:2:83: error: return-statement with a value, in function returning 'void' [-fpermissive] t.cpp: In instantiation of 'F2 operator|(F1, F2) [with F1 = <lambda(float)>::<lambda(long long unsigned int)>; F2 = <lambda()>]': t.cpp:16:26: required from here t.cpp:2:83: error: could not convert '{f2, f1}' from 'operator|(F1, F2) [with F1 = <lambda(float)>::<lambda(long long unsigned int)>; F2 = <lambda()>]::<lambda(long long unsigned int)>' to '<lambda()>'