JSON Spirit имеет удобный operator==
template< class Config >
bool Value_impl< Config >::operator==( const Value_impl& lhs ) const
{
if( this == &lhs ) return true;
if( type() != lhs.type() ) return false;
return v_ == lhs.v_;
}
Переменная lhs
выглядит как знакомая «левая сторона» из многих других примеров, подразумевая для меня, что это не будет работать так, как ожидалось, если для того, что назначено этому оператору, нет левой стороны.
Это верно? Если так, то почему?
В любом случае, пожалуйста, указывайте стандарт.
b = x == y;
переводит на b = x.operator==( y );
так operator==()
должны быть определены для x
который принимает аргумент любого типа y
является.
class Y
{
public:
};
class X
{
public:
bool operator==( Y rhs )
{
return false;
}
};
void tester()
{
X x;
Y y;
bool b = x == y; // works
b = y == x; // error
}