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 -----