| // RUN: %clang_cc1 -fsyntax-only -verify -std=c++98 %s |
| // RUN: %clang_cc1 -fsyntax-only -verify -std=c++17 %s |
| |
| class D { |
| class E{ |
| class F{}; // expected-note{{implicitly declared private here}} |
| friend void foo(D::E::F& q); |
| }; |
| friend void foo(D::E::F& q); // expected-error{{'F' is a private member of 'D::E'}} |
| }; |
| |
| void foo(D::E::F& q) {} |
| |
| class D1 { |
| class E1{ |
| class F1{}; // expected-note{{implicitly declared private here}} |
| friend D1::E1::F1 foo1(); |
| }; |
| friend D1::E1::F1 foo1(); // expected-error{{'F1' is a private member of 'D1::E1'}} |
| }; |
| |
| D1::E1::F1 foo1() { return D1::E1::F1(); } |
| |
| class D2 { |
| class E2{ |
| class F2{}; |
| friend void foo2(); |
| }; |
| friend void foo2(){ D2::E2::F2 c;} |
| }; |