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