1 // PR c++/89744 2 3 namespace N1 { 4 template<typename> struct A 5 { 6 template<typename> struct B {}; AA7 A() { B<int> b; } 8 }; 9 10 template<> template<typename> 11 struct A<int>::B 12 { 13 virtual void foo() {} 14 }; 15 16 A<int> a; 17 } 18 19 namespace N2 { 20 template<typename> struct A 21 { 22 template<typename> struct B {}; 23 A() { B<int> b; } 24 }; 25 26 template<> template<typename> 27 struct A<int>::B 28 { 29 virtual void foo() {} 30 void bar() {} 31 }; 32 33 A<int> a; 34 } 35 36 namespace N3 { 37 template<typename> struct A 38 { 39 template<typename> struct B {}; 40 A() { B<int> b; } 41 }; 42 43 template<> template<typename> 44 struct A<int>::B 45 { 46 ~B() {} 47 }; 48 49 A<int> a; 50 } 51 52 #if __cpp_variadic_templates 53 namespace N4 { 54 template<typename...> struct A 55 { 56 template<typename> struct B {}; 57 typedef B<int> X; 58 }; 59 60 template<> template<typename> 61 struct A<int>::B 62 { 63 typedef int Y; 64 }; 65 66 A<int>::B<int> b; 67 } 68 #endif 69