On Saturday, 5 May 2012 at 04:15:21 UTC, Jonathan M Davis wrote:
On Saturday, May 05, 2012 05:50:26 Era Scarecrow wrote:
> On Saturday, 5 May 2012 at 03:32:06 UTC, Jonathan M Davis
> wrote:
>> ---------
>> 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
>> ---------
Hmm maybe it should have a preference for Lvalue vs Rvalue...
So... Walter or Andrei?
1. no match
2. match with implicit conversions (Lvalue required)
3. match with conversion to const (Lvalue required)
4. match with implicit conversions
5. match with conversion to const
6. exact match
This will likely be _very_ relevant to the proposed changes
which make ref and const ref work with rvalues (the details on
that are still being sorted out, I believe). However, I don't
believe that either Walter or Andrei pays attention to
D.Learn, so if you want to bring it up for discussion, post
about it in the main newsgroup (not to mention, your post is
buried enough in this thread that many who _do_ pay attention
to D.Learn wouldn't see it).
This is a topic pulled from D.learn.
http://forum.dlang.org/thread/[email protected]
Quick brief overview: While trying to use opAssign to copy data
(and keep arrays separate), one opAssign is being selected over
the other. The first is for a reference (ref X) which does a
buffer[] = rhs.buffer[] copy, while (X) for the temporaries the
array is passed over, as buffer = rhs.buffer
When adding changing (ref X) to (ref const X), it is calling the
(X) which breaks my array separation when (ref const X) should
work fine. (Afterall I'm promising not to change the data, not
requiring it to be const).