+++ /dev/null
-// Build don't link:
-
-// 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.
-
-// excess errors test - XFAIL
-
-void ovl (int); // ERROR - candidate
-void ovl (float); // ERROR - candidate
-void fn (int);
-void fna (int);
-
-int main (int argc, char **argv)
-{
- void (*ptr) (int);
- void (*vptr) ();
-
- (ovl) (1); // ok
- (&ovl) (1); // ERROR - not suitable for overload resolution
- (ovl) (); // ERROR - no matching candidates
- (&ovl) (); // 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); // ERROR - not suitable for overload resolution
- (0, &ovl) (1); // ERROR - not suitable for overload resolution
- (argc ? ovl : ovl) (1); // ERROR - not suitable for overload resolution
- (argc ? &ovl : &ovl) (1); // 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
- ptr = (0, &ovl); // ok
- ptr = (argc ? ovl : ovl); // ok
- ptr = (argc ? &ovl : &ovl);// ok
-
- vptr = (ovl); // ERROR - no matching candidates
- vptr = (&ovl); // ERROR - no matching candidates
- vptr = (0, ovl); // ERROR - no matching candidates
- vptr = (0, &ovl); // ERROR - no matching candidates
- vptr = (argc ? ovl : ovl); // ERROR - no matching candidates
- vptr = (argc ? &ovl : &ovl);// ERROR - no matching candidates
-
- ptr = (fn);
- ptr = (&fn);
- ptr = (0, fn);
- ptr = (0, &fn);
- ptr = (argc ? fna : fn);
- ptr = (argc ? &fna : &fn);
-
- f; // WARNING - not a call
- ovl; // ERROR - not suitable for overload
- &ovl; // ERROR - not suitable for overload
- (void)f; // ok
- (void)ovl; // ERROR - not suitable for overload
- (void)&ovl; // ERROR - not suitable for overload
- static_cast<void>(f); // ok
- static_cast<void>(ovl); // ERROR - not suitable for overload
- static_cast<void>(&ovl); // ERROR - not suitable for overload
- ((void)1, f); // WARNING - not a call XFAIL
- ((void)1, ovl); // ERROR - not suitable for overload
- ((void)1, &ovl); // ERROR - not suitable for overload
- (void)((void)1, f); // ok
- (void)((void)1, ovl); // ERROR - not suitable for overload
- (void)((void)1, &ovl); // ERROR - not suitable for overload
-
- return 0;
-}