https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93147

--- Comment #5 from Jonathan Wakely <redi at gcc dot gnu.org> ---
Further reduced:

struct A {
  bool operator == (A) const { return true; }
};

struct B {
  bool operator == (B) const { return true; }
};

struct Tuple : private A, private B { };

bool operator==(Tuple, Tuple) { return true; }

bool example(Tuple a, Tuple b)
{
  return a == b;
}

Clang does accept this, but EDG rejects it the same way as GCC:

"pr93147.cc", line 15: error: more than one operator "==" matches these
          operands:
            "Tuple::operator==" (ambiguous by inheritance)
            operand types are: Tuple == Tuple
    return a == b;
             ^

1 error detected in the compilation of "pr93147.cc".

Reply via email to