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.