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".