C++ overloaded operators and D

via Digitalmars-d digitalmars-d at puremagic.com
Wed Nov 12 06:41:15 PST 2014


On Wednesday, 12 November 2014 at 11:43:36 UTC, IgorStepanov 
wrote:
> C++ and D provides different behaviour for operator overloading.
> D has a opIndex + opIndexAssign overloads, and if we want to 
> map opIndex to operator[], we must to do something with 
> opIndexAssign.

operator[] can be mapped to opIndex just fine, right? Only 
opIndexAssign wouldn't be accessible from C++ via an operator, 
but that's because the feature doesn't exist. We can still call 
it via its name opIndexAssign.

> operator< and operator> can't be mapped to D. Same for 
> operator&.

That's true. Maybe we can just live with pragma(mangle) for them, 
but use D's op... for all others?

> Binary arithmetic operators can't be mapped to D, if them 
> implemented as static functions:
>
> Foo operator+(int a, Foo f); //unable to map it to D, because 
> static module-level Foo opAdd(int, Foo) will not provide the 
> same behaviour as operator+ in D.
> Thus: C++ and D overloaded operators should live in different 
> worlds.

Can't we map both static and member operators to opBinary resp. 
opBinaryRight members in this case? How likely is it that both 
are defined on the C++ side, and if they are, how likely is it 
that they will behave differently?


More information about the Digitalmars-d mailing list