| // { dg-do assemble } |
| |
| // Copyright (C) 1999 Free Software Foundation, Inc. |
| // Contributed by Nathan Sidwell 5 Sep 1999 <nathan@acm.org> |
| |
| // [over.match] 13.3 tells us where overload resolution occurs. |
| // [over.match.call] 13.3.1.1 says that in |
| // (...( postfix-expression )...) (expression-list) |
| // the postfix-expression must be the name of a function (amongst some other |
| // choices). This means comma and conditional exprs cannot be placed there. |
| // This clause is the only one I can find which bans |
| // (cond ? fna : fnb) (arglist) |
| // which would be a major headache to have to implement. |
| // [over.over] 13.4 tells us when the use of a function name w/o arguments is |
| // resolved to the address of a particular function. These are determined by |
| // the context of the function name, and it does allow more complicated primary |
| // expressions. |
| |
| // Using a naked function name is rather strange, we used to warn about it |
| // (rather inconsistently), but subsequent changes broke the warning. Make |
| // sure that doesn't happen again. |
| |
| |
| void ovl (int); // { dg-error "" } candidate |
| void ovl (float); // { dg-error "" } candidate |
| void fn (int); |
| void fna (int); |
| |
| int main (int argc, char **argv) |
| { |
| void (*ptr) (int); |
| void (*vptr) (); |
| |
| (ovl) (1); // ok |
| (&ovl) (1); // { dg-error "" } not suitable for overload resolution |
| (ovl) (); // { dg-error "" } no matching candidates |
| (&ovl) (); // { dg-error "" } not suitable for overload resolution |
| |
| // 13.3.1.1 indicates that the following are errors -- the primary expression |
| // is not the name of a function. |
| (0, ovl) (1); // { dg-error "" } not suitable for overload resolution |
| (0, &ovl) (1); // { dg-error "" } not suitable for overload resolution |
| (argc ? ovl : ovl) (1); // { dg-error "" } not suitable for overload resolution |
| (argc ? &ovl : &ovl) (1); // { dg-error "" } not suitable for overload resolution |
| |
| (fn) (1); // ok |
| (&fn) (1); // ok (no overload resolution) |
| (0, fn) (1); // ok (no overload resolution) |
| (0, &fn) (1); // ok (no overload resolution) |
| (argc ? fna : fn) (1); // ok (no overload resolution) |
| (argc ? &fna : &fn) (1); // ok (no overload resolution) |
| |
| ptr = (ovl); // ok |
| ptr = (&ovl); // ok |
| // 13.4 indicates these are ok. |
| ptr = (0, ovl); // ok { dg-bogus "" "" { xfail *-*-* } } |
| ptr = (0, &ovl); // ok { dg-bogus "" "" { xfail *-*-* } } |
| ptr = (argc ? ovl : ovl); // ok { dg-bogus "" "" { xfail *-*-* } } |
| ptr = (argc ? &ovl : &ovl);// ok { dg-bogus "" "" { xfail *-*-* } } |
| |
| vptr = (ovl); // { dg-error "" } no matching candidates |
| vptr = (&ovl); // { dg-error "" } no matching candidates |
| vptr = (0, ovl); // { dg-error "" } no matching candidates |
| vptr = (0, &ovl); // { dg-error "" } no matching candidates |
| vptr = (argc ? ovl : ovl); // { dg-error "" } no matching candidates |
| vptr = (argc ? &ovl : &ovl);// { dg-error "" } no matching candidates |
| |
| ptr = (fn); |
| ptr = (&fn); |
| ptr = (0, fn); |
| ptr = (0, &fn); |
| ptr = (argc ? fna : fn); |
| ptr = (argc ? &fna : &fn); |
| |
| f; // { dg-warning "" } not a call |
| ovl; // { dg-error "" } not suitable for overload |
| &ovl; // { dg-error "" } not suitable for overload |
| (void)f; // ok |
| (void)ovl; // { dg-error "" } not suitable for overload |
| (void)&ovl; // { dg-error "" } not suitable for overload |
| static_cast<void>(f); // ok |
| static_cast<void>(ovl); // { dg-error "" } not suitable for overload |
| static_cast<void>(&ovl); // { dg-error "" } not suitable for overload |
| ((void)1, f); // { dg-warning "" "" { xfail *-*-* } } not a call |
| ((void)1, ovl); // { dg-error "" } not suitable for overload |
| ((void)1, &ovl); // { dg-error "" } not suitable for overload |
| (void)((void)1, f); // ok |
| (void)((void)1, ovl); // { dg-error "" } not suitable for overload |
| (void)((void)1, &ovl); // { dg-error "" } not suitable for overload |
| |
| return 0; |
| } |