struct X { int data; X& operator=(X& a) { return a; } X& operator=(int a) { data = a; return *this; } }; int main() { X x1, x2; x1 = x2; // call x1.operator=(x2) x1 = 5; // call x1.operator=(5) }