📄 overload11.c
字号:
// { 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 "" } candidatevoid ovl (float); // { dg-error "" } candidatevoid 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;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -