llvm-project/clang/test/Parser/cxx-friend.cpp
Douglas Gregor 3b4abb6792 Improve handling of friend types in several ways:
- When instantiating a friend type template, perform semantic
  analysis on the resulting type.
  - Downgrade the errors concerning friend type declarations that do
  not refer to classes to ExtWarns in C++98/03. C++0x allows
  practically any type to be befriended, and ignores the friend
  declaration if the type is not a class.

llvm-svn: 100635
2010-04-07 17:57:12 +00:00

41 lines
890 B
C++

// RUN: %clang_cc1 -fsyntax-only -verify %s
class C {
friend class D;
};
class A {
public:
void f();
};
friend int x; // expected-error {{'friend' used outside of class}}
friend class D {}; // expected-error {{'friend' used outside of class}}
union U {
int u1;
};
class B {
// 'A' here should refer to the declaration above.
friend class A;
friend C; // expected-warning {{must specify 'class' to befriend}}
friend U; // expected-warning {{must specify 'union' to befriend}}
friend int; // expected-warning {{non-class type 'int' cannot be a friend}}
friend void myfunc();
void f(A *a) { a->f(); }
};
template <typename t1, typename t2> class some_template;
friend // expected-error {{'friend' used outside of class}}
some_template<foo, bar>& // expected-error {{use of undeclared identifier 'foo'}}
; // expected-error {{expected unqualified-id}}