https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88417
--- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> --- Reduced self contained testcase: extern "C" int printf(const char*,...); extern "C" void abort(); template < typename T> struct X { int i; constexpr X(int _i): i{_i}{} }; template < typename T2 > struct Y { template <typename T> static X<T> x_in_y; }; template< typename T2> template< typename T> X<T> Y<T2>::x_in_y{200}; template<> template<> X<float> Y<int>::x_in_y<float>{100}; template<> template<> X<int> Y<int>::x_in_y<int>{101}; // this partial specialization is never seen, but compiles without error template<> template< typename T > X<T> Y<bool>::x_in_y{77}; int main() { if (Y<bool>::x_in_y<float>.i != 77) abort(); }