dr166.c

来自「Mac OS X 10.4.9 for x86 Source Code gcc」· C语言 代码 · 共 61 行

C
61
字号
// { dg-do compile }// Origin: Giovanni Bajo <giovannibajo at gcc dot gnu dot org>// DR166: Friend declarations of template-ids namespace N {  template <class T> void f(T);  void g();  namespace M {    class A {      friend void f<int>(int); // N::f      static int x;   // { dg-error "private" }    };        class B {      template <class T> friend void f(T);  // M::f      static int x;   // { dg-error "private" }    };    class C {      friend void g(); // M::g      static int x;   // { dg-error "private" }    };    template <class T> void f(T)  // will be instantiated as f<long>    {      M::A::x = 0;    // { dg-error "within this context" }      M::B::x = 0;    }    template <> void f<int>(int)    { M::A::x = 0; }      // { dg-error "within this context" }    template <> void f<double>(double )    {       M::B::x = 0;       M::f<long>(0);   // { dg-error "instantiated" }    }    void g(void)    { M::C::x = 0; }  }  template <class T> void f(T)  // will be instantiated as f<long>  {     M::A::x = 0;       // { dg-error "within this context" }    M::B::x = 0;       // { dg-error "within this context" }  }  template <> void f<int>(int )  {     N::f<long>(0);        // { dg-error "instantiated" }    M::A::x = 0;     M::B::x = 0;       // { dg-error "within this context" }  }  template <> void f<char>(char )  { M::A::x = 0; }      // { dg-error "within this context" }  void g(void)  { M::C::x = 0; }      // { dg-error "within this context" }}

⌨️ 快捷键说明

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