1// { dg-do assemble  }
2// GROUPS passed visibility
3#include <iostream>
4
5
6
7class base {
8//==========
9
10    void base_priv(const char * n)
11	{ std::cout << "base_priv called from: " << n << "\n";  }
12
13protected:
14
15    void base_prot(const char * n)
16	{ std::cout << "base_prot called from: " << n << "\n"; }
17
18public:
19
20    void base_publ(const char * n)
21	{ std::cout << "base_publ called from: " << n << "\n"; }
22
23    void test(const char * n) { base_publ(n); base_prot(n); base_priv(n); }
24
25}; // class base
26
27
28
29class derived : public base {	// Make this public,
30//============================	// and we don't get an error
31
32friend void derived_friend();
33
34public :
35
36    void test(const char * n) { base_publ(n); base_prot(n);}
37
38}; // class derived
39
40
41
42void
43derived_friend()
44//--------------
45{
46    derived pd;
47
48    pd.base_publ("friend of derived class");	// Compiler error here
49    pd.base_prot("friend of derived class");
50}
51
52
53
54int main(int argc, char *argv[])
55//==========================
56{
57    base b;
58    b.base_publ("base class object");
59    b.test("member of base class object");
60    std::cout << "\n";
61
62    derived pd;
63    pd.test("member of derived class object");
64    derived_friend();
65    std::cout << "\n";
66
67} /* main */
68
69