https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116099
--- Comment #5 from Jonathan Wakely <redi at gcc dot gnu.org> --- Ha, so because it doesn't know what `const Oops` is, g++ applies the implicit-int rule and decides it's `const int Oops` i.e. a non-type template parameter, but that's invalid because `template<class T> struct S` is declared with a type template parameter.