Ok, here's your clue complements of the MSDN Library:

Compiler Error C2593
'operator identifier' is ambiguous

More than one possible operator was defined for the specified overloaded operator.

An explicit cast of one or more of the actual parameters can resolve the ambiguity.

The following is an example of this error:
Code:
struct A {};
struct B : A {};
struct X {};
struct D : B, X {};
void operator+( X, X );
void operator+( A, B );
D d;
void main()
{
   d +  d;         // error, D has an A, B, and X 
   (X)d + (X)d;    // OK, uses operator+( X, X )
}