blob: 7d89659901ae67a351ea824fd01b353e642987c3 [file] [log] [blame]
John McCallc373d482010-01-27 01:50:18 +00001// RUN: %clang_cc1 -fsyntax-only -faccess-control -verify %s
2
3// C++0x [class.access]p4:
4
5// Access control is applied uniformly to all names, whether the
6// names are referred to from declarations or expressions. In the
7// case of overloaded function names, access control is applied to
8// the function selected by overload resolution.
9
10class Public {} PublicInst;
11class Protected {} ProtectedInst;
12class Private {} PrivateInst;
13
14namespace test0 {
15 class A {
16 public:
17 void foo(Public&);
18 protected:
19 void foo(Protected&); // expected-note 2 {{declared protected here}}
20 private:
21 void foo(Private&); // expected-note 2 {{declared private here}}
22 };
23
24 void test(A *op) {
25 op->foo(PublicInst);
26 op->foo(ProtectedInst); // expected-error {{access to protected member outside any class}}
27 op->foo(PrivateInst); // expected-error {{access to private member outside any class}}
28
29 void (A::*a)(Public&) = &A::foo;
30 void (A::*b)(Protected&) = &A::foo; // expected-error {{access to protected member outside any class}}
31 void (A::*c)(Private&) = &A::foo; // expected-error {{access to private member outside any class}}
32 }
33}