template class A { template class SubA { int _k; }; T1 _t1; T2 _t2; // { dg-message "instantiated" } }; template class B { // { dg-error "declaration" } class SubB1 { B _i; // { dg-error "incomplete type" } }; class SubB2 { int _j; }; A::SubA _a; // { dg-error "not a base type" "not base" } // { dg-message "note" "note" { target *-*-* } 20 } // { dg-message "instantiated" "inst" { target *-*-* } 20 } // { dg-error "non-template" "non-template" { target *-*-* } 20 } }; int main() { B objB; // { dg-message "instantiated" } return 0; }