// PR c++/89744 namespace N1 { template struct A { template struct B {}; A() { B b; } }; template<> template struct A::B { virtual void foo() {} }; A a; } namespace N2 { template struct A { template struct B {}; A() { B b; } }; template<> template struct A::B { virtual void foo() {} void bar() {} }; A a; } namespace N3 { template struct A { template struct B {}; A() { B b; } }; template<> template struct A::B { ~B() {} }; A a; } #if __cpp_variadic_templates namespace N4 { template struct A { template struct B {}; typedef B X; }; template<> template struct A::B { typedef int Y; }; A::B b; } #endif