Yes, that will work since operator overloading allows the same flexibility as overloading a function. (confined within the usual 'rules' of those operators of course)
You can also change an operator's behaviour dependent on the type of the either operand, externally from a class.
Code:
class foo
{
public:
friend float operator+ (float, const foo&);
friend float operator+ (int, const foo&);
};
float operator+ (float, const foo&);
float operator+ (int, const foo&);