1// Copyright (C) 1999 Free Software Foundation, Inc. 2// Contributed by Nathan Sidwell 6 Jun 1999 <nathan@acm.org> 3 4// dynamic cast can only cast to public unambiguous bases 5 6extern "C" void abort (); 7 8struct A {virtual ~A(){} int m; }; 9struct B {virtual ~B(){} int m; }; 10 11struct C1 : A {int m;}; 12struct C2 : A {int m;}; 13 14// A is ambiguous, but private in one branch 15struct D1 : B, C1, private C2 {int m;}; 16// A is ambiguous, and public in both branches 17struct D2 : B, C1, C2 {int m;}; 18 19void fn(B *bd1, B *bd2) 20{ 21 A *ad1; 22 A *ad2; 23 24 ad1 = dynamic_cast<A *>(bd1); 25 if(ad1) abort(); 26 ad2 = dynamic_cast<A *>(bd2); 27 if(ad2) abort(); 28} 29 30int main() 31{ 32 D1 d1; 33 D2 d2; 34 35 fn((B *)&d1, (B *)&d2); 36 return 0; 37} 38