diff options
Diffstat (limited to 'gcc-4.9/gcc/testsuite/g++.dg/inherit/operator1.C')
-rw-r--r-- | gcc-4.9/gcc/testsuite/g++.dg/inherit/operator1.C | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/inherit/operator1.C b/gcc-4.9/gcc/testsuite/g++.dg/inherit/operator1.C new file mode 100644 index 000000000..6ef669c21 --- /dev/null +++ b/gcc-4.9/gcc/testsuite/g++.dg/inherit/operator1.C @@ -0,0 +1,34 @@ +// 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; +} + |