opAssign and const?
Era Scarecrow
rtcvb32 at yahoo.com
Fri May 4 20:43:43 PDT 2012
On Saturday, 5 May 2012 at 03:32:06 UTC, Jonathan M Davis wrote:
> If you've declared an opAssign, I'd be very surprised if _any_
> assignment worked which didn't work with the opAssign that you
> declared. Once you've declared an opAssign, you've taken over
> the assignment operator, and you need to define it for all of
> the types that you want it to work with.
So define all four... gotcha...
> According to http://dlang.org/function.html:
>
> ---------
> Functions are overloaded based on how well the
> arguments to a function can match up with the
> parameters. The function with the best match is
> selected. The levels of matching are:
>
> 1. no match
> 2. match with implicit conversions
> 3. match with conversion to const
> 4. exact match
> ---------
>
> It picks opAssign(X) over opAssign(ref const X) with an
> argument of type X,because opAssign(X) is an exact match (#4)
> whereas opAssign(ref const X)requires a conversion to const
> (#3).
I guess there's one question left. Where does the struct live?
If it closes at ending of the scope I believed that meant the
stack, but then this would be illegal:
ref X func() {
return X(new ubyte[5]); //reference to local variable!
}
If it lives on the heap too rather than the stack, that'd good
to know. I don't recall it specifying in TDPL, but it would be
easy enough to assume it does (Coming from C).
More information about the Digitalmars-d-learn
mailing list