xref: /llvm-project/clang/test/SemaCXX/PR12361.cpp (revision 200f3bd39562f4d605f13567398025d30fa27d61)
1  // RUN: %clang_cc1 -fsyntax-only -verify -std=c++98 %s
2  // RUN: %clang_cc1 -fsyntax-only -verify -std=c++17 %s
3 
4 class D {
5     class E{
6         class F{}; // expected-note{{implicitly declared private here}}
7         friend  void foo(D::E::F& q);
8         };
9     friend  void foo(D::E::F& q); // expected-error{{'F' is a private member of 'D::E'}}
10     };
11 
foo(D::E::F & q)12 void foo(D::E::F& q) {}
13 
14 class D1 {
15     class E1{
16         class F1{}; // expected-note{{implicitly declared private here}}
17         friend  D1::E1::F1 foo1();
18         };
19     friend  D1::E1::F1 foo1(); // expected-error{{'F1' is a private member of 'D1::E1'}}
20     };
21 
foo1()22 D1::E1::F1 foo1() { return D1::E1::F1(); }
23 
24 class D2 {
25     class E2{
26         class F2{};
27         friend  void foo2();
28         };
foo2()29     friend  void foo2(){ D2::E2::F2 c;}
30     };
31