1 | // RUN: %clang_cc1 -fsyntax-only -pedantic -verify %s |
2 | |
3 | // PR13819 |
4 | // REQUIRES: LP64 |
5 | |
6 | // [dcl.ambig.res]p1: |
7 | struct S { |
8 | S(int); |
9 | void bar(); |
10 | }; |
11 | |
12 | int returns_an_int(); |
13 | |
14 | void foo(double a) |
15 | { |
16 | S w(int(a)); // expected-warning{{disambiguated as a function declaration}} expected-note{{add a pair of parentheses}} |
17 | w(17); |
18 | S x1(int()); // expected-warning{{disambiguated as a function declaration}} expected-note{{add a pair of parentheses}} |
19 | x1(&returns_an_int); |
20 | S y((int)a); |
21 | y.bar(); |
22 | S z = int(a); |
23 | z.bar(); |
24 | } |
25 | |
26 | // [dcl.ambig.res]p3: |
27 | char *p; |
28 | void *operator new(__SIZE_TYPE__, int); |
29 | void foo3() { |
30 | const int x = 63; |
31 | new (int(*p)) int; //new-placement expression |
32 | new (int(*[x])); //new type-id |
33 | } |
34 | |
35 | // [dcl.ambig.res]p4: |
36 | template <class T> // expected-note{{here}} |
37 | struct S4 { |
38 | T *p; |
39 | }; |
40 | S4<int()> x; //type-id |
41 | S4<int(1)> y; // expected-error{{must be a type}} |
42 | |
43 | // [dcl.ambig.res]p5: |
44 | void foo5() |
45 | { |
46 | (void)sizeof(int(1)); //expression |
47 | (void)sizeof(int()); // expected-error{{function type}} |
48 | } |
49 | |
50 | // [dcl.ambig.res]p6: |
51 | void foo6() |
52 | { |
53 | (void)(int(1)); //expression |
54 | (void)(int())1; // expected-error{{to 'int ()'}} |
55 | } |
56 | |
57 | // [dcl.ambig.res]p7: |
58 | class C7 { }; |
59 | void f7(int(C7)) { } // expected-note{{candidate}} |
60 | int g7(C7); |
61 | void foo7() { |
62 | f7(1); // expected-error{{no matching function}} |
63 | f7(g7); //OK |
64 | } |
65 | |
66 | void h7(int *(C7[10])) { } // expected-note{{previous}} |
67 | void h7(int *(*_fp)(C7 _parm[10])) { } // expected-error{{redefinition}} |
68 | |
69 | struct S5 { |
70 | static bool const value = false; |
71 | }; |
72 | int foo8() { |
73 | int v(int(S5::value)); // expected-warning{{disambiguated as a function declaration}} expected-note{{add a pair of parentheses}} expected-error{{parameter declarator cannot be qualified}} |
74 | } |
75 | |
76 | template<typename T> |
77 | void rdar8739801( void (T::*)( void ) __attribute__((unused)) ); |
78 | |