https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113620
--- Comment #6 from Andrew Pinski <pinskia at gcc dot gnu.org> --- (In reply to Patrick Palka from comment #5) > Seems to be a name lookup issue ultimately: > > struct A { > template<class T, class U> > struct B; > > template<class V> > struct B<int, V> { > int x = V::value; // error: 'V' has not been declared > int y = T::value; // no error! > int z = U::value; // no error! > }; > }; That would make sense on why it was rejected before GCC 4.9 even. Now I wonder if this is related to the diagnostic issue mentioned in https://gcc.gnu.org/pipermail/gcc-patches/2024-January/643811.html even.