// Test that conversions to base classes happen when calling | |
// operators. | |
// { dg-do run } | |
extern "C" void abort (); | |
struct B1; | |
struct B2; | |
B2* p; | |
B1* p2; | |
struct B1 { | |
virtual void f () {} | |
}; | |
struct B2 { | |
int i; | |
bool operator!() { if (this != p) abort (); return true; } | |
operator void*() { if (this != p) abort (); return this; } | |
}; | |
struct B3 : public B1, public B2 { | |
}; | |
int main () { | |
B3 b; | |
p = (B2*) &b; | |
p2 = (B1*) &b; | |
bool b1 = b; | |
bool b2 = !b; | |
} | |