1// PR c++/16829
2// { dg-do "compile" }
3
4void f1(int = 0, int);                       // { dg-error "default" }
5
6void f2(int = 0, int) {}                     // { dg-error "default" }
7
8void f3(int, int);
9void f3(int = 0, int);                       // { dg-error "default" }
10
11void f4(int, int);
12void f4(int = 0, int) {}                     // { dg-error "default" }
13
14void f5();
15void f5(int = 0, int);                       // { dg-error "default" }
16
17void f6();
18void f6(int = 0, int) {}                     // { dg-error "default" }
19
20template<typename> void g1(int = 0, int);    // { dg-error "default" }
21
22template<typename> void g2(int = 0, int) {}  // { dg-error "default" }
23
24template<typename> void g3(int, int);
25template<typename> void g3(int = 0, int);    // { dg-error "default" }
26
27template<typename> void g4(int, int);
28template<typename> void g4(int = 0, int) {}  // { dg-error "default" }
29
30template<typename> void g5();
31template<typename> void g5(int = 0, int);    // { dg-error "default" }
32
33template<typename> void g6();
34template<typename> void g6(int = 0, int) {}  // { dg-error "default" }
35
36template<typename T> void g7(T, T)   {}
37template<typename T> void g7(T* = 0, T*) {}  // { dg-error "default" }
38
39
40struct 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
66  template<typename T> void G6(T, T)   {}
67  template<typename T> void G6(T* = 0, T*) {}  // { dg-error "default" }
68};
69
70void A::F3(int = 0, int) {}                     // { dg-error "default" }
71
72template<typename> void A::G3(int = 0, int) {}  // { dg-error "default" }
73
74
75template<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
101  template<typename T> void G6(T, T)   {}
102  template<typename T> void G6(T* = 0, T*) {}  // { dg-error "default" }
103};
104
105template<typename T>
106void B<T>::F3(int = 0, int) {}  // { dg-error "default" }
107
108template<typename T> template<typename>
109void B<T>::G3(int = 0, int) {}  // { dg-error "default" }
110