On Mon, 13 Jul 2015 06:49:09 +0000, Yuxuan Shui wrote:
> The main reason here is to use '==' in @safe code:
>
> class A {
> override @safe bool opEquals(Object o) {
> return cast(A)o !is null;
> }
> }
> @safe void main() {
> A a = new A;
> A b = new A;
> a == b;
> }
>
> This doesn't compile in current D, because objects.opEquals takes two
> Object, and Object.opEquals is not @safe.
>
> Why can't we have a template objects.opEquals?
>
> auto opEquals(T, S)(T a, S b) { ... }
'case templates can't be virtual functions, so the following will not
work:
bool cmp (Object a, Object b) { return a.opQeuals(b); }
MyObj a, b;
cmp(a, b);
signature.asc
Description: PGP signature
