safe method overloading with different refness of its arguments
Basile B. via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Tue Jul 4 05:06:36 PDT 2017
On Tuesday, 4 July 2017 at 10:40:42 UTC, drug wrote:
> ```
> struct Foo
> {
> ubyte width, length;
>
> // by reference
> bool opEquals(ref const(Foo) other) const pure @safe
> {
> if (width != other.width)
> return false;
> if (length != other.length)
> return false;
> return true;
> }
>
> // by value
> bool opEquals(const(Foo) other) const pure @safe
> {
> return opEquals(other);
> }
> }
> ```
>
> It works for me, but I'm curious - will compiler always
> recognize what to call and I can avoid recursion and stack
> overflow or I shouldn't do so?
No, not always. One out of two hundreds the compiler fails to
recognize the right call.
Jokes aside if you're not sure just use a templated function with
`auto ref` parameter.
More information about the Digitalmars-d-learn
mailing list