1 // PR c++/16829
2 // { dg-do compile }
3 
4 void f1(int = 0, int);                       // { dg-error "default" }
5 
6 void f2(int = 0, int) {}                     // { dg-error "default" }
7 
8 void f3(int, int);
9 void f3(int = 0, int);                       // { dg-error "default" }
10 
11 void f4(int, int);
12 void f4(int = 0, int) {}                     // { dg-error "default" }
13 
14 void f5();
15 void f5(int = 0, int);                       // { dg-error "default" }
16 
17 void f6();
18 void f6(int = 0, int) {}                     // { dg-error "default" }
19 
20 template<typename> void g1(int = 0, int);    // { dg-error "default" }
21 
22 template<typename> void g2(int = 0, int) {}  // { dg-error "default" }
23 
24 template<typename> void g3(int, int);
25 template<typename> void g3(int = 0, int);    // { dg-error "default" }
26 
27 template<typename> void g4(int, int);
28 template<typename> void g4(int = 0, int) {}  // { dg-error "default" }
29 
30 template<typename> void g5();
31 template<typename> void g5(int = 0, int);    // { dg-error "default" }
32 
33 template<typename> void g6();
34 template<typename> void g6(int = 0, int) {}  // { dg-error "default" }
35 
g7(T,T)36 template<typename T> void g7(T, T)   {}
37 template<typename T> void g7(T* = 0, T*) {}  // { dg-error "default" }
38 
39 
40 struct A
41 {
42   void F1(int = 0, int);                       // { dg-error "default" }
43 
44   void F2(int = 0, int) {}                     // { dg-error "default" }
45 
46   void F3(int, int);
47 
48   void F4();
49   void F4(int = 0, int);                       // { dg-error "default" }
50 
51   void F5();
52   void F5(int = 0, int) {}                     // { dg-error "default" }
53 
54   template<typename> void G1(int = 0, int);    // { dg-error "default" }
55 
56   template<typename> void G2(int = 0, int) {}  // { dg-error "default" }
57 
58   template<typename> void G3(int, int);
59 
60   template<typename> void G4();
61   template<typename> void G4(int = 0, int);    // { dg-error "default" }
62 
63   template<typename> void G5();
64   template<typename> void G5(int = 0, int) {}  // { dg-error "default" }
65 
G6A66   template<typename T> void G6(T, T)   {}
67   template<typename T> void G6(T* = 0, T*) {}  // { dg-error "default" }
68 };
69 
70 void A::F3(int = 0, int) {}                     // { dg-error "default" }
71 
72 template<typename> void A::G3(int = 0, int) {}  // { dg-error "default" }
73 
74 
75 template<typename> struct B
76 {
77   void F1(int = 0, int);                       // { dg-error "default" }
78 
79   void F2(int = 0, int) {}                     // { dg-error "default" }
80 
81   void F3(int, int);
82 
83   void F4();
84   void F4(int = 0, int);                       // { dg-error "default" }
85 
86   void F5();
87   void F5(int = 0, int) {}                     // { dg-error "default" }
88 
89   template<typename> void G1(int = 0, int);    // { dg-error "default" }
90 
91   template<typename> void G2(int = 0, int) {}  // { dg-error "default" }
92 
93   template<typename> void G3(int, int);
94 
95   template<typename> void G4();
96   template<typename> void G4(int = 0, int);    // { dg-error "default" }
97 
98   template<typename> void G5();
99   template<typename> void G5(int = 0, int) {}  // { dg-error "default" }
100 
G6B101   template<typename T> void G6(T, T)   {}
102   template<typename T> void G6(T* = 0, T*) {}  // { dg-error "default" }
103 };
104 
105 template<typename T>
106 void B<T>::F3(int = 0, int) {}  // { dg-error "default" }
107 
108 template<typename T> template<typename>
109 void B<T>::G3(int = 0, int) {}  // { dg-error "default" }
110