dependent-expr5.c

来自「用于进行gcc测试」· C语言 代码 · 共 115 行

C
115
字号
// { dg-do compile }// Copyright 2005 Free Software Foundation// contributed by Alexandre Oliva <aoliva@redhat.com>// inspired in the failure reported in Red Hat bugzilla #168260.template<class F> void bind(F f) {}template<class F> void bindm(F f) {}template<class F, class T> void bindm(F (T::*f)(void)) {} // { dg-error "note" }template<class F> void bindn(F f) {}template<class F, class T> void bindn(F (*f)(T)) {}template<class F> void bindb(F f) {}template<class F, class T> void bindb(F (*f)(T)) {} // { dg-error "note" }template<class F, class T> void bindb(F (T::*f)(void)) {} // { dg-error "note" }struct foo {  static int baist;  int bait;  void barf ();  static void barf (int);  struct bar {    static int baikst;    int baikt;    void bark ();    static void bark (int);    bar() {      bind (&baist);      bind (&foo::baist);      bind (&bait); // { dg-error "nonstatic data member" }      bind (&foo::bait);      bind (&baikst);      bind (&bar::baikst);      bind (&baikt); // ok, this->baikt      bind (&bar::baikt);      bind (&barf); // { dg-error "no matching function" }      bind (&foo::barf); // { dg-error "no matching function" }      bindm (&barf); // { dg-error "no matching function" }      bindm (&foo::barf);      bindn (&barf);      bindn (&foo::barf);      bindb (&barf);      bindb (&foo::barf); // { dg-error "ambiguous" }      bind (&bark); // { dg-error "no matching function" }      bind (&bar::bark); // { dg-error "no matching function" }      bindm (&bark); // { dg-error "no matching function" }      bindm (&bar::bark);      bindn (&bark);      bindn (&bar::bark);      bindb (&bark);      bindb (&bar::bark); // { dg-error "ambiguous" }    }  };  template <typename T>  struct barT {    static int baikst;    int baikt;    void bark ();    static void bark (int);    barT() {      bind (&baist);      bind (&foo::baist);      bind (&bait); // { dg-error "nonstatic data member" }      bind (&foo::bait);      bind (&baikst);      bind (&barT::baikst);      bind (&baikt); // ok, this->baikt      bind (&barT::baikt);      bind (&barf); // { dg-error "no matching function" }      bind (&foo::barf); // { dg-error "no matching function" }      bindm (&barf); // { dg-error "no matching function" }      bindm (&foo::barf);      bindn (&barf);      bindn (&foo::barf);      bindb (&barf);      bindb (&foo::barf); // { dg-error "ambiguous" }      bind (&bark); // { dg-error "no matching function" }      bind (&barT::bark); // { dg-error "no matching function" }      bindm (&bark); // { dg-error "no matching function" }      bindm (&barT::bark);      bindn (&bark);      bindn (&barT::bark);      bindb (&bark);      bindb (&barT::bark); // { dg-error "ambiguous" }    }  };  bar bard;  barT<void> bart;} bad;

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?