how to make '==' safe for classes?
Neia Neutuladh
neia at ikeran.org
Sun Oct 28 18:17:41 UTC 2018
On Sun, 28 Oct 2018 18:00:06 +0000, Stanislav Blinov wrote:
> On Sunday, 28 October 2018 at 12:38:12 UTC, ikod wrote:
>
>> and object.opEquals(a,b) do not inherits safety from class C
>> properties, and also I can't override it.
>
> Yep. Since Object is the base class and it defines opEquals as:
> ```
> bool opEquals(Object);
> ```
>
> the compiler rewrites `a == b` as
> `(cast(Object)a).opEquals(cast(Object)ob)`, i.e. it inserts a @system
> call into your code.
More pedantically, it rewrites it as:
(a is b) ||
(a !is null && (cast(Object)a).opEquals(cast(Object)b))
An object might not be equal to itself via opEquals, but it will always
compare equal to itself with ==.
More information about the Digitalmars-d-learn
mailing list