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