1// { dg-do assemble } 2// { dg-options "-Wconversion" } 3// Test that we resolve this case as mandated by the standard, but also 4// warn about it. We choose op char* not because it is a member of B -- 5// the standard says that all conversion ops are treated as coming from 6// the type of the argument -- but because it is non-const. 7 8struct A { 9 operator const char *() const { return ""; } 10}; 11 12struct B : public A { 13 operator char *() { return 0; } 14}; 15 16int main() 17{ 18 B b; 19 if ((const char *)b != 0) // { dg-warning "" } surprising overload resolution 20 return 1; 21 if ((const char *)(const B)b == 0) 22 return 2; 23 if ((const char *)(const B &)b == 0) 24 return 3; 25} 26