https://gcc.gnu.org/bugzilla/show_bug.cgi?id=72076
--- Comment #7 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
(In reply to Thorsten Hirsch from comment #6)
> One by one. :)
> I mean this snippet:
>
> template<typename _Tp>
>
> constexpr
>
> typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
>
> int>::__type
>
> ilogb(_Tp __x)
>
> { return __builtin_ilogb(__x); }
>
>
> Is this valid? Or should there be an "int" or "float" after the "constexpr"
> in line 2?
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
int>::__type
is a type, it is either SFINAE or is int. Basically the template is rejected
as a substitution failure and not considered or is the type is an int.
This is standard C++98ism. One which is confusing but used so you can do
overloads which are not considered part of the overload class.
See https://en.wikipedia.org/wiki/Substitution_failure_is_not_an_error for more
information on that.
Again do you have a preprocessed source for the failure you are seeing and what
is the full error message?