https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95468
Bug ID: 95468 Summary: ICE in expression sfinae Product: gcc Version: unknown Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: kab at acm dot org Target Milestone: --- The code below gets ICE with gcc9.2 and gcc7.5 (the versions I have immediately available to test with). The error message is: internal compiler error: unexpected expression '(bool)(true)' of kind cast_expr To test: g++ -c -std=c++11 ice-expr-sfinae.cpp Strangely, using a namespace scope function template instead of a static member function template works fine. To demonstrate that, compile with -DTRIGGER_ICE=0. ----- ice-expr-sfinae.cpp ----- #include <type_traits> #ifndef TRIGGER_ICE #define TRIGGER_ICE 1 #endif #if TRIGGER_ICE struct slip { template<bool C> static constexpr bool condition() { return C; } }; template<typename std::enable_if<slip::condition<bool(true)>(), int>::type = 0> static bool dispatch() { return true; } bool test() { return dispatch(); } #else // No ICE if the condition function is at namespace scope. template<bool C> static constexpr bool noslip_condition() { return C; } template<typename std::enable_if<noslip_condition<bool(true)>(), int>::type = 0> static bool dispatch() { return true; } bool test() { return dispatch(); } #endif ----- end of file -----