// PR c++/50858

class String {
   typedef struct ImplicitConversionFromWTFStringToBoolDisallowedA* 
   (String::*UnspecifiedBoolTypeA);
   typedef struct ImplicitConversionFromWTFStringToBoolDisallowedB* 
   (String::*UnspecifiedBoolTypeB);
   operator UnspecifiedBoolTypeA() const;
   operator UnspecifiedBoolTypeB() const;
};
inline bool equalIgnoringCase(const String& a, const String& b) { return true; }
inline bool equalPossiblyIgnoringCase(const String& a, 
                                      const String& b,
                                      bool ignoreCase) {
  return ignoreCase ? equalIgnoringCase(a, b) : (a == b); } // { dg-error "ambiguous" }
// { dg-message "note" "note" { target *-*-* } .-1 }
