// PR c++/13950, DR 176 template struct Base { }; // { dg-error "" } candidate struct D1: Base { D1::Base* p1; D1::Base* p2; Base *p3; Base* p4; }; struct D2: Base, Base { D2::Base* p1; // { dg-error "" } D2::Base* p2; Base *p3; // { dg-error "" } Base* p4; }; template struct D3: Base { typename D3::Base* p1; typename D3::template Base* p2; }; template struct D3; template struct D4: Base, Base { typename D4::Base* p1; // { dg-error "" } typename D4::template Base* p2; }; template struct D4; // { dg-message "required" }