DIP 1016--ref T accepts r-values--Formal Assessment
Andrei Alexandrescu
SeeWebsiteForEmail at erdani.com
Wed Jan 30 21:03:26 UTC 2019
On 1/30/19 1:29 PM, Manu wrote:
> On Wed, Jan 30, 2019 at 9:20 AM Neia Neutuladh via
> Digitalmars-d-announce <digitalmars-d-announce at puremagic.com> wrote:
>>
>> On Wed, 30 Jan 2019 09:15:36 -0800, Manu wrote:
>>> Why are you so stuck on this case? The DIP is about accepting rvalues,
>>> not lvalues...
>>> Calling with 'p', an lvalue, is not subject to this DIP.
>>
>> The result of a CastExpression is an rvalue. An implicit cast is a
>> compiler-inserted CastExpression. Therefore all lvalues with a potential
>> implicit cast are rvalues.
>
> But there's no existing language rule that attempts to perform an
> implicit cast where an lvalue is supplied to a ref arg...?
That's exactly what lowerings are for: to precisely specify what should
happen when the proposed construct is used. DIP 1016 proposes a lowering
of the form:
{
T __temp0 = expr;
fun(__temp0);
}
In the first step, an implicit conversion of an lvalue may take place.
> Why is the cast being attempted? 'p' is an lvalue, and whatever that
> does should remain exactly as is (ie, emits a compile error).
Not according to DIP 1016. Here is an example pasted from it:
========
This inconvenience extends broadly to every manner of rvalue passed to
functions, including:
...
fun(my_short); // implicit type conversions (ie, short->int promotion)
========
Presumably my_short is a variable of type short. Is that correct?
Again (this is not a rhetorical or sarcastic question): are you sure DIP
1016 expresses what you are trying to accomplish?
> We could perhaps allow this for `const` args, but that feels like
> separate follow-up work to me, and substantially lesser value. This
> DIP doesn't want to change anything about lvalues.
What we have here is:
* DIP 1016 proposes a hole in the language one could drive a truck through.
* The problem goes undetected in community review.
* Its own author seems to not have an understanding of what the DIP
proposes.
Andrei
More information about the Digitalmars-d-announce
mailing list