memfriend7.c
来自「Mac OS X 10.4.9 for x86 Source Code gcc」· C语言 代码 · 共 134 行
C
134 行
// { dg-do compile }// Copyright (C) 2003 Free Software Foundation// Contributed by Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>// Member function of class template as friend// Erroneous case: mismatch during specializationtemplate <class T> struct A { template <class U> void f(U); void g(); void h(); void i(int); template <T t> void j();};class C { int ii; // { dg-error "private" } template <class U> template <class V> friend void A<U>::f(V); template <class U> friend void A<U>::g(); template <class U> friend void A<U>::h(); template <class U> friend void A<U>::i(int); template <class U> template <U t> friend void A<U>::j();};template <class T> struct A<T*> { void f(int); template <class U> void g(); int h(); void i(char); template <int> void j();};template <class T> void A<T*>::f(int){ C c; c.ii = 0; // { dg-error "context" }}template <class T> template <class U> void A<T*>::g(){ C c; c.ii = 0; // { dg-error "context" }}template <class T> int A<T*>::h(){ C c; c.ii = 0; // { dg-error "context" }}template <class T> void A<T*>::i(char){ C c; c.ii = 0; // { dg-error "context" }}template <class T> template <int> void A<T*>::j(){ C c; c.ii = 0; // { dg-error "context" }}template <> struct A<char> { void f(int); template <class U> void g(); int h(); void i(char); template <int> void j();};void A<char>::f(int){ C c; c.ii = 0; // { dg-error "context" }}template <class U> void A<char>::g(){ C c; c.ii = 0; // { dg-error "context" }}template <> void A<char>::g<int>(){ C c; c.ii = 0; // { dg-error "context" }}int A<char>::h(){ C c; c.ii = 0; // { dg-error "context" }}void A<char>::i(char){ C c; c.ii = 0; // { dg-error "context" }}template <int> void A<char>::j(){ C c; c.ii = 0; // { dg-error "context" }}template <> void A<char>::j<0>(){ C c; c.ii = 0; // { dg-error "context" }}int main(){ A<int *> a1; a1.f(0); // { dg-error "instantiated" } a1.g<char>(); // { dg-error "instantiated" } a1.g<int>(); // { dg-error "instantiated" } a1.h(); // { dg-error "instantiated" } a1.i('a'); // { dg-error "instantiated" } a1.j<1>(); // { dg-error "instantiated" } A<char> a2; a2.f(0); a2.g<char>(); // { dg-error "instantiated" } a2.g<int>(); a2.h(); a2.i('a'); a2.j<1>(); // { dg-error "instantiated" } a2.j<0>();}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?