https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109277
--- Comment #4 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
(In reply to Andrew Pinski from comment #2)
> The difference is is_convertible definition.
> 12:
> template<typename _From, typename _To>
> struct is_convertible
> : public __is_convertible_helper<_From, _To>::type
> { };
>
>
> 13:
> template<typename _From, typename _To>
> struct is_convertible
> : public __bool_constant<__is_convertible(_From, _To)>
> { };
>
> So it might be a front-end issue after all.
and yes that is definitely the difference here. If I add back the
__is_convertible_helper and use that for is_convertible to the GCC 13
preprocessed source, the code then compiles.