xref: /aosp_15_r20/external/clang/test/CXX/class.access/class.access.nest/p1.cpp (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -verify %s
2*67e74705SXin Li 
3*67e74705SXin Li // Derived from GNU's std::string
4*67e74705SXin Li namespace test0 {
5*67e74705SXin Li   class A {
6*67e74705SXin Li     struct B {
7*67e74705SXin Li       unsigned long length;
8*67e74705SXin Li     };
9*67e74705SXin Li     struct C : B {
10*67e74705SXin Li       static const unsigned long max_length;
11*67e74705SXin Li     };
12*67e74705SXin Li   };
13*67e74705SXin Li 
14*67e74705SXin Li   const unsigned long A::C::max_length = sizeof(B);
15*67e74705SXin Li }
16*67e74705SXin Li 
17*67e74705SXin Li // Example from the standard.
18*67e74705SXin Li namespace test1 {
19*67e74705SXin Li   class E {
20*67e74705SXin Li     int x;
21*67e74705SXin Li     class B {};
22*67e74705SXin Li 
23*67e74705SXin Li     class I {
24*67e74705SXin Li       B b;
25*67e74705SXin Li       int y; // expected-note {{declared private here}}
f(E * p,int i)26*67e74705SXin Li       void f(E* p, int i) {
27*67e74705SXin Li         p->x = i;
28*67e74705SXin Li       }
29*67e74705SXin Li     };
30*67e74705SXin Li 
g(I * p)31*67e74705SXin Li     int g(I* p) { return p->y; } // expected-error {{'y' is a private member of 'test1::E::I'}}
32*67e74705SXin Li   };
33*67e74705SXin Li }
34