1 // PR c++/13950, DR 176 2 3 template <class T> struct Base { }; // { dg-message "" } candidate 4 5 struct D1: Base<void> 6 { 7 D1::Base* p1; 8 D1::Base<double>* p2; 9 Base *p3; 10 Base<double>* p4; 11 }; 12 13 struct D2: Base<void>, Base<void*> 14 { 15 D2::Base* p1; // { dg-error "" } 16 D2::Base<double>* p2; 17 Base *p3; // { dg-error "" } 18 Base<double>* p4; 19 }; 20 21 template <class T> 22 struct D3: Base<T> { 23 typename D3::Base* p1; 24 typename D3::template Base<double>* p2; 25 }; 26 template struct D3<void>; 27 28 template <class T> 29 struct D4: Base<T>, Base<T*> { 30 typename D4::Base* p1; // { dg-error "" } 31 typename D4::template Base<double>* p2; 32 }; 33 template struct D4<void>; // { dg-message "required" } 34