template < typename T>
struct A {
struct B {
} ;
} ;
struct C {
typedef A< C> D;
int f( ) {
typename D:: B p;
return 0 ;
}
} ;
C gc;
int x = gc.f ( ) ;
template <>
struct A< C> {
struct B {
B( ) {
cout << "B::B()" << endl;
}
~B( ) {
cout << "B::~B()" << endl;
}
} ;
} ;
int main( ) {
}
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+CnN0cnVjdCBBIHsKICAgIHN0cnVjdCBCIHsKICAgIH07Cn07CgpzdHJ1Y3QgQyB7CiAgICB0eXBlZGVmIEE8Qz4gRDsKCiAgICBpbnQgZigpIHsKICAgICAgICB0eXBlbmFtZSBEOjpCIHA7CiAgICAgICAgcmV0dXJuIDA7CiAgICB9Cn07CgpDIGdjOwppbnQgeCA9IGdjLmYoKTsKCnRlbXBsYXRlIDw+CnN0cnVjdCBBPEM+IHsKICAgIHN0cnVjdCBCIHsKICAgICAgICBCKCkgewogICAgICAgICAgICBjb3V0IDw8ICJCOjpCKCkiIDw8IGVuZGw7CiAgICAgICAgfQoKICAgICAgICB+QigpIHsKICAgICAgICAgICAgY291dCA8PCAiQjo6fkIoKSIgPDwgZW5kbDsKICAgICAgICB9CiAgICB9Owp9OwoKaW50IG1haW4oKSB7Cn0K