45 lines
1,011 B
C++
45 lines
1,011 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 {{specify 'class' to befriend}}
|
||
|
friend U; // expected-warning {{specify 'union' to befriend}}
|
||
|
friend int; // expected-warning {{non-class friend type 'int'}}
|
||
|
|
||
|
friend void myfunc();
|
||
|
|
||
|
void f(A *a) { a->f(); }
|
||
|
};
|
||
|
|
||
|
void bar() {} // expected-note {{previous definition is here}}
|
||
|
class E {
|
||
|
friend void bar() {} // expected-error {{redefinition of 'bar'}}
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
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}}
|