111
|
1 // { dg-do run }
|
|
2 #include <iostream>
|
|
3
|
|
4 class A1 {
|
|
5 friend class B;
|
|
6 public:
|
|
7 virtual void foo() {}
|
|
8 };
|
|
9
|
|
10 class A2 : public virtual A1 {friend class B;};
|
|
11
|
|
12 class A3 : public virtual A1, private A2 {friend class B;};
|
|
13
|
|
14 class B
|
|
15 {
|
|
16 public:
|
|
17 B(A1* a) : itsA(dynamic_cast<A2*>(a)) {}
|
|
18 A2* itsA;
|
|
19 };
|
|
20
|
|
21 int main()
|
|
22 {
|
|
23 A1* a=new A3;
|
|
24 B b(a);
|
|
25
|
|
26 if (b.itsA)
|
|
27 std::cout << "cast ok" << std::endl;
|
|
28 else
|
|
29 std::cout << "cast failed" << std::endl;
|
|
30 return 0;
|
|
31 }
|