The compiler given mc1 == ac1
will search for the best match for the operator==(A,B) using the normal overload resolution rules for any function.
Assuming it finds your bool myClass::operator==(const myClass&)
function the unambiguously best match (this may not be the case. for example it may find an operator declared bool operator==(const myClass&, const anotherClass&)
which is superior instead), it will then bind and make the necessary parameter conversions as it would for any function call.
To make the conversion from an lvale of type anotherClass to a const myClass&
(assuming anotherClass does not inherit from myClass, in which case no conversion would be needed) it will then search for a single (unambiguously best) converting constructor or conversion operator to turn the parameter into a myClass temporary and then execute the operator== call with that.
It the parameter of a function is a non-const reference than it will not consider performing such temporary conversion. The reason is that a non-const reference usually indicates that the function will perform some sideeffect on that parameter, which would be discarded when the temporary is destroyed leaving the original object uneffected - therefore it would most likely be a logic error accidently discarding this sideeffect than intentionally doing so - so the language designers disallowed it.