https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108955
--- Comment #4 from Andrew Pinski <pinskia at gcc dot gnu.org> --- (In reply to Andrew Pinski from comment #3) > The code is definitely invalid. > > How to fix it is to move this: > template <class T> > inline void AssertMoveable(T *t = 0) { if(t) AssertMoveable0(t); } > > > Below the definitions of AssertMoveable0. > (__GNUC__ < 4 || __GNUC_MINOR__ < 1) > > That is check is just wrong. Especially while GCC 13.0.1 is a stage 4 > compiler. > > Maybe it should be just: > __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 4) That is if this is GCC before GCC 4.1.0 do it differently. The reason why not many people hit this is because the first official release of a major release of GCC these days is N.1.0 and you would only hit this during the development of the trunk ...