1 // RUN: %clang_cc1 -fsyntax-only -verify %s
2
3 void f0(int i, int j, int k = 3);
4 void f0(int i, int j, int k);
5 void f0(int i, int j = 2, int k);
6 void f0(int i, int j, int k);
7 void f0(int i = 1, // expected-note{{previous definition}}
8 int j, int k);
9 void f0(int i, int j, int k);
10
11 namespace N0 {
12 void f0(int, int, int); // expected-note{{candidate}}
13
test_f0_inner_scope()14 void test_f0_inner_scope() {
15 f0(); // expected-error{{no matching}}
16 }
17 }
18
test_f0_outer_scope()19 void test_f0_outer_scope() {
20 f0(); // okay
21 }
22
23 void f0(int i = 1, // expected-error{{redefinition of default argument}}
24 int, int);
25
26 template<typename T> void f1(T); // expected-note{{previous}}
27
28 template<typename T>
29 void f1(T = T()); // expected-error{{cannot be added}}
30
31
32 namespace N1 {
33 // example from C++03 standard
34 // FIXME: make these "f2"s into "f"s, then fix our scoping issues
35 void f2(int, int);
36 void f2(int, int = 7);
h()37 void h() {
38 f2(3); // OK, calls f(3, 7)
39 void f(int = 1, int); // expected-error{{missing default argument}}
40 }
41
m()42 void m()
43 {
44 void f(int, int); // expected-note{{'f' declared here}}
45 f(4); // expected-error{{too few arguments to function call}}
46 void f(int, int = 5); // expected-note{{previous definition}}
47 f(4); // okay
48 void f(int, int = 5); // expected-error{{redefinition of default argument}}
49 }
50
n()51 void n()
52 {
53 f2(6); // okay
54 }
55 }
56