template36.c

来自「linux下编程用 编译软件」· C语言 代码 · 共 58 行

C
58
字号
// { dg-do run  }// Testcase for implicit 'typename' and resolution of 'typename's in the// current scope.class base1 { public:    int bar() const    { return 1; }};class base2 { public:    int bar() const    { return 0; }};template<class X>struct base_trait {    typedef base1 base;};template<>struct base_trait<float> {    typedef base2 base;};template<class T>class weird : public base_trait<T>::base {public:    typedef typename base_trait<T>::base base;    base f ();    int base::* g ();    int zowee() const    { return this->bar(); }  };template <class T>typename weird<T>::base weird<T>::f (){    return base();}// The standard does not allow this case; the `typename' keyword may// not appear in a ptr-operator.#if 0template <class T>int typename weird<T>::base::* weird<T>::g (){ return 0; }#endifint main(){    weird<float> z;    return z.zowee() || z.f().bar();}

⌨️ 快捷键说明

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