]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/CXX/dcl.decl/dcl.meaning/dcl.fct.default/p4.cpp
Vendor import of clang trunk r238337:
[FreeBSD/FreeBSD.git] / test / CXX / dcl.decl / dcl.meaning / dcl.fct.default / p4.cpp
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);   // want 2 decls before next default arg
10 void f0(int i, int j, int k);
11
12 namespace N0 {
13   void f0(int, int, int); // expected-note{{candidate}}
14
15   void test_f0_inner_scope() {
16     f0(); // expected-error{{no matching}}
17   }
18 }
19
20 void test_f0_outer_scope() {
21   f0(); // okay
22 }
23
24 void f0(int i = 1, // expected-error{{redefinition of default argument}}
25         int, int); 
26
27 template<typename T> void f1(T); // expected-note{{previous}}
28
29 template<typename T>
30 void f1(T = T()); // expected-error{{cannot be added}}
31
32
33 namespace N1 {
34   // example from C++03 standard
35   // FIXME: make these "f2"s into "f"s, then fix our scoping issues
36   void f2(int, int); 
37   void f2(int, int = 7); 
38   void h() {
39     f2(3); // OK, calls f(3, 7) 
40     void f(int = 1, int);       // expected-error{{missing default argument}}
41   }
42   
43   void m()
44   {
45     void f(int, int); // expected-note{{'f' declared here}}
46     f(4);  // expected-error{{too few arguments to function call}}
47     void f(int, int = 5); // expected-note{{previous definition}}
48     f(4); // okay
49     void f(int, int = 5); // expected-error{{redefinition of default argument}}
50   }
51   
52   void n()
53   {
54     f2(6); // okay
55   }
56 }
57
58
59 namespace PR18432 {
60
61 struct A {
62   struct B {
63     static void Foo (int = 0);
64   };
65   
66   // should not hide default args
67   friend void B::Foo (int);
68 };
69
70 void Test ()
71 {
72   A::B::Foo ();
73 }
74
75 } // namespace