https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91292
--- Comment #2 from Jonathan Wakely <redi at gcc dot gnu.org> --- Oops, sorry, those mangled names are actually for this further reduced code: template<bool, typename T> struct enable_if { }; template<typename T> struct enable_if<true, T> { using type = T; }; template<typename T> typename enable_if<(int)sizeof(T) >= -(1), int>::type size1(T *t); template<typename T> typename enable_if<(int)sizeof(T) >= -1, int>::type size2(T *t); template<typename T> typename enable_if<(int)sizeof(T) >= -(1.), int>::type size3(T *t); template<typename T> typename enable_if<(int)sizeof(T) >= -1., int>::type size4(T *t); int x(int *iptr) { return size1(iptr) + size2(iptr) + size3(iptr) + size4(iptr); }