default2.cpp revision 3996f23ac20de411e0b5931a451bd05142f0b712
1// RUN: clang -fsyntax-only -verify %s 2void f(int i, int j, int k = 3); 3void f(int i, int j, int k); 4void f(int i, int j = 2, int k); 5void f(int i, int j, int k); 6void f(int i = 1, int j, int k); 7void f(int i, int j, int k); 8 9void i() 10{ 11 f(); 12 f(0); 13 f(0, 1); 14 f(0, 1, 2); 15} 16 17 18int f1(int i, int i, int j) { // expected-error {{redefinition of parameter 'i'}} 19 i = 17; 20 return j; 21} 22 23int x; 24void g(int x, int y = x); // expected-error {{default argument references parameter 'x'}} 25 26void h() 27{ 28 int i; 29 extern void h2(int x = sizeof(i)); // expected-error {{default argument references local variable 'i' of enclosing function}} 30} 31 32void g2(int x, int y, int z = x + y); // expected-error {{default argument references parameter 'x'}} expected-error {{default argument references parameter 'y'}} 33 34void nondecl(int (*f)(int x = 5)) // {expected-error {{default arguments can only be specified}}} 35{ 36 void (*f2)(int = 17) // {expected-error {{default arguments can only be specified}}} 37 = (void (*)(int = 42))f; // {expected-error {{default arguments can only be specified}}} 38} 39 40class X { 41 void f(X* x = this); // expected-error{{invalid use of 'this' outside of a nonstatic member function}} 42 43 void g() { 44 int f(X* x = this); // expected-error{{default argument references 'this'}} 45 } 46}; 47