111
|
1 // { dg-do assemble }
|
|
2
|
|
3 // Copyright (C) 1999 Free Software Foundation, Inc.
|
|
4 // Contributed by Nathan Sidwell 5 Sep 1999 <nathan@acm.org>
|
|
5
|
|
6 // [over.match] 13.3 tells us where overload resolution occurs.
|
|
7 // [over.match.call] 13.3.1.1 says that in
|
|
8 // (...( postfix-expression )...) (expression-list)
|
|
9 // the postfix-expression must be the name of a function (amongst some other
|
|
10 // choices). This means comma and conditional exprs cannot be placed there.
|
|
11 // This clause is the only one I can find which bans
|
|
12 // (cond ? fna : fnb) (arglist)
|
|
13 // which would be a major headache to have to implement.
|
|
14 // [over.over] 13.4 tells us when the use of a function name w/o arguments is
|
|
15 // resolved to the address of a particular function. These are determined by
|
|
16 // the context of the function name, and it does allow more complicated primary
|
|
17 // expressions.
|
|
18
|
|
19 // Using a naked function name is rather strange, we used to warn about it
|
|
20 // (rather inconsistently), but subsequent changes broke the warning. Make
|
|
21 // sure that doesn't happen again.
|
|
22
|
|
23
|
|
24 void ovl (int); // { dg-message "ovl|candidate expects" } candidate
|
|
25 void ovl (float); // { dg-message "ovl|candidate expects" } candidate
|
|
26 void fn (int);
|
|
27 void fna (int);
|
|
28
|
|
29 int main (int argc, char **argv)
|
|
30 {
|
|
31 void (*ptr) (int);
|
|
32 void (*vptr) ();
|
|
33
|
|
34 (ovl) (1); // ok
|
|
35 (&ovl) (1); // ok
|
|
36 (ovl) (); // { dg-error "" } no matching candidates
|
|
37 (&ovl) (); // { dg-error "" } not suitable for overload resolution
|
|
38
|
|
39 // 13.3.1.1 indicates that the following are errors -- the primary expression
|
|
40 // is not the name of a function.
|
145
|
41 (0, ovl) (1); // { dg-error "7:no context" } not suitable for overload resolution
|
|
42 (0, &ovl) (1); // { dg-error "7:no context" } not suitable for overload resolution
|
111
|
43 (argc ? ovl : ovl) (1); // { dg-error "" } not suitable for overload resolution
|
|
44 (argc ? &ovl : &ovl) (1); // { dg-error "" } not suitable for overload resolution
|
|
45
|
|
46 (fn) (1); // ok
|
|
47 (&fn) (1); // ok (no overload resolution)
|
|
48 (0, fn) (1); // ok (no overload resolution)
|
|
49 (0, &fn) (1); // ok (no overload resolution)
|
|
50 (argc ? fna : fn) (1); // ok (no overload resolution)
|
|
51 (argc ? &fna : &fn) (1); // ok (no overload resolution)
|
|
52
|
|
53 ptr = (ovl); // ok
|
|
54 ptr = (&ovl); // ok
|
145
|
55 ptr = (0, ovl); // ok { dg-error "13:no context" }
|
|
56 ptr = (0, &ovl); // ok { dg-error "13:no context" }
|
111
|
57 ptr = (argc ? ovl : ovl); // ok { dg-error "no context" }
|
|
58 ptr = (argc ? &ovl : &ovl);// ok { dg-error "no context" }
|
|
59
|
|
60 vptr = (ovl); // { dg-error "" } no matching candidates
|
|
61 vptr = (&ovl); // { dg-error "" } no matching candidates
|
145
|
62 vptr = (0, ovl); // { dg-error "14:no context" } no matching candidates
|
|
63 vptr = (0, &ovl); // { dg-error "14:no context" } no matching candidates
|
111
|
64 vptr = (argc ? ovl : ovl); // { dg-error "" } no matching candidates
|
|
65 vptr = (argc ? &ovl : &ovl);// { dg-error "" } no matching candidates
|
|
66
|
|
67 ptr = (fn);
|
|
68 ptr = (&fn);
|
|
69 ptr = (0, fn);
|
|
70 ptr = (0, &fn);
|
|
71 ptr = (argc ? fna : fn);
|
|
72 ptr = (argc ? &fna : &fn);
|
|
73
|
|
74 f; // { dg-error "" } not a call
|
|
75 ovl; // { dg-error "" } not suitable for overload
|
|
76 &ovl; // { dg-error "" } not suitable for overload
|
|
77 (void)f; // ok
|
|
78 (void)ovl; // { dg-error "" } not suitable for overload
|
|
79 (void)&ovl; // { dg-error "" } not suitable for overload
|
|
80 static_cast<void>(f); // ok
|
|
81 static_cast<void>(ovl); // { dg-error "" } not suitable for overload
|
|
82 static_cast<void>(&ovl); // { dg-error "" } not suitable for overload
|
|
83 ((void)1, f); // { dg-warning "" "" { xfail *-*-* } } not a call
|
145
|
84 ((void)1, ovl); // { dg-error "13:no context" } not suitable for overload
|
|
85 ((void)1, &ovl); // { dg-error "13:no context" } not suitable for overload
|
111
|
86 (void)((void)1, f); // ok
|
145
|
87 (void)((void)1, ovl); // { dg-error "19:no context" } not suitable for overload
|
|
88 (void)((void)1, &ovl); // { dg-error "19:no context" } not suitable for overload
|
111
|
89
|
|
90 return 0;
|
|
91 }
|