1 // { dg-do assemble } 2 // GROUPS passed visibility 3 #include <iostream> 4 5 6 7 class base { 8 //========== 9 base_priv(const char * n)10 void base_priv(const char * n) 11 { std::cout << "base_priv called from: " << n << "\n"; } 12 13 protected: 14 base_prot(const char * n)15 void base_prot(const char * n) 16 { std::cout << "base_prot called from: " << n << "\n"; } 17 18 public: 19 base_publ(const char * n)20 void base_publ(const char * n) 21 { std::cout << "base_publ called from: " << n << "\n"; } 22 test(const char * n)23 void test(const char * n) { base_publ(n); base_prot(n); base_priv(n); } 24 25 }; // class base 26 27 28 29 class derived : public base { // Make this public, 30 //============================ // and we don't get an error 31 32 friend void derived_friend(); 33 34 public : 35 test(const char * n)36 void test(const char * n) { base_publ(n); base_prot(n);} 37 38 }; // class derived 39 40 41 42 void derived_friend()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 main(int argc,char * argv[])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