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 14 void test_f0_inner_scope() { 15 f0(); // expected-error{{no matching}} 16 } 17 } 18 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); 37 void h() { 38 f2(3); // OK, calls f(3, 7) 39 void f(int = 1, int); // expected-error{{missing default argument}} 40 } 41 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 51 void n() 52 { 53 f2(6); // okay 54 } 55 } 56