1 // PR c++/63201 2 // { dg-do compile { target c++14 } } 3 4 template <class T> 5 struct Y 6 { 7 template <class U> static U x; 8 }; 9 10 template <class T> 11 template <class U> 12 U Y<T>::x = U(); 13 14 template <> 15 template <class U> 16 U Y<int>::x = 42; 17 18 template <> 19 template <class U> 20 // odd diagnostic 21 U Y<float>::x<U> = 42; // { dg-error "partial specialization" } 22 23 template <> 24 template <> 25 int Y<float>::x<int> = 42; // { dg-bogus "non-member-template declaration" } 26 27 template <class T> 28 struct Z 29 { 30 template <class U> struct ZZ 31 { 32 template <class V> static V x; 33 }; 34 }; 35 36 template <class T> 37 template <class U> 38 template <class V> 39 V Z<T>::ZZ<U>::x = V(); 40 41 template <> 42 template <> 43 template <class V> 44 V Z<int>::ZZ<int>::x = V(); 45 46 template <> 47 template <class U> 48 struct Z<float>::ZZ 49 { 50 template <class V> static V x; 51 }; 52 53 template <> 54 template <class U> 55 template <class V> 56 V Z<float>::ZZ<U>::x = V(); 57 58 template <> 59 template <> 60 template <> 61 int Z<float>::ZZ<int>::x<int> = 42; // { dg-bogus "non-member-template declaration" } 62 63 int main() 64 { 65 int y = Y<int>::x<int>; 66 int z = Z<float>::ZZ<int>::x<int>; 67 } 68