| // { dg-do run } |
| // Author: Alfred Miniarik <a8601248@unet.univie.ac.at> |
| // test of dynamic_cast |
| // runtime detecting of nonpublic |
| // inheritance within a cast |
| // and therefor failing with result 0. |
| |
| extern "C" void abort(); |
| extern "C" int printf (const char *, ...); |
| |
| static int errors = 0; |
| |
| void error(int i) |
| { |
| printf("Error %i\n",i); |
| errors++; |
| } |
| |
| struct A {virtual ~A(){}}; |
| struct B : private virtual A {}; |
| struct C : virtual A {}; |
| struct D : B, C {}; |
| |
| int |
| main() |
| { |
| D d; |
| A* ap= &d; |
| if(&d != dynamic_cast<D*>(ap)) error(1); |
| if((B*)&d != dynamic_cast<B*>(ap)) error(2); |
| if((C*)&d != dynamic_cast<C*>(ap)) error(3); |
| return errors ? 1 : 0; |
| } |