On 20/02/2023 18:25, Peter Dimov wrote:
Whatever your definition of equivalence, X is neither equivalent to an int, nor to a 'none', and 'none' doesn't even have operator==.
Regarding this point specifically, the author of X has indeed declared that X has an equivalence to int, by implementing that operator. Being able to ask if `x == 4` inherently implies that `x` can somehow be equivalent to `4`. If that equivalence is not intended to be implied, then it shouldn't have been defined. (or perhaps a different type from `int` should have been used) This does *not* mean that an X is-a int, or even that it can be converted from or to an int -- those are separate operations. But it is -- somehow -- able to answer if it is currently equivalent to an int or not. That is precisely what defining the operator means.