Boost logo

Boost :

From: Peter Dimov (pdimov_at_[hidden])
Date: 2023-02-20 05:25:43


Gavin Lambert wrote:
> > There are tons of existing C++ code that works perfectly well without
> > adhering to principled approaches to defining op==, and breaking this
> > willy-nilly was irresponsible.
>
> I would instead argue that implementing op== in an unprincipled manner
> was irresponsible in the first place. :)

That's not for you to decide. Some programmer has implemented op==,
it's worked for him perfectly well. You are not a party to the transaction.

It's traditionally not been C++'s philosophy to dictate the meaning of
overloaded operators. There are style guides, sure. These are precisely that,
style guides.

Defining "unprincipled" operator== overloads is common practice, typically
such that x == y means x.something( y ). E.g.

struct none {};

class X
{
private:

    int id_ = 0;

public:

    explicit X( int id, ... );

    bool operator==( int id ) const noexcept { return id_ == id; }
    bool operator==( none ) const noexcept { return id_ == 0; }
};

or the already mentioned boost::function, which uses it to mean "contains".
Whatever your definition of equivalence, X is neither equivalent to an int,
nor to a 'none', and 'none' doesn't even have operator==.


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk