The problem is that they shouldn't be inside the class, but as free functions.
As member functions, they can only have one argument, which is the right-hand side, but the left-hand side is ALWAYS the class itself.

This code is illegal:
Code:
class Overloader
{
public :
	ostream& operator << (ostream& rLhs, Car::TankStatus eStatus);
};

ostream& Overloader::operator << (ostream& rLhs, Car::TankStatus eStatus) { }
This code is legal:
Code:
class Overloader
{
public :
	ostream& operator << (ostream& rLhs);
};

ostream& Overloader::operator << (ostream& rLhs) { }
And it is also the same as this code:
Code:
class Overloader
{
};

ostream& Overloader::operator << (Overloader& rLhs, ostream& rRhs) { }
No, what we're trying to write is a new type of operator << and >> which takes a Car::TankStatus and a stream to write to/from.
That's why it needs to be free and nor part of a class.
It does not necessarily need to be inside the std namespace either, though.