Allow Explicit Pointer for Auto Declaration

Jacob via Digitalmars-d digitalmars-d at puremagic.com
Thu Sep 29 18:48:02 PDT 2016


On Friday, 30 September 2016 at 00:05:45 UTC, Steven 
Schveighoffer wrote:
> On 9/29/16 7:42 PM, Jacob wrote:
>> Was wondering if this feature could be implemented, right now 
>> auto needs
>> to be written like this:
>>
>>     auto pValue = someFunctionReturnsRef(); // forgot '&', 
>> still valid
>>                                             // makes a copy 
>> when we
>> didn't want one
>>
>> The feature would make the code look like this:
>>
>>     auto* pValue = someFunctionReturnsRef(); // error 
>> expecting pointer
>>
>> We don't accidentally make a copy when we wanted a pointer. 
>> C++ has a
>> similar semantic for it's auto.
>
> Hm... I'm not familiar with C++ auto, but C++ does have local 
> references. D does not.
>
> I'm not sure if you are asking for the syntax specified, or 
> asking for the original line to be treated like the specified 
> syntax. The latter absolutely is not going to happen, because 
> that breaks valid code.
>
> Even if we added:
>
> auto* pValue = expr;
>
> I don't see why this is more advantageous than:
>
> auto pValue = &expr;
>
> -Steve

auto* pValue = expr;  // still invalid code unless expr evaluate 
to a pointer type
auto* pValue = &expr; // this is valid if expr is a ref

It still requires the &, what it prevents is this situation:

auto pValue = expr; // wanted pointer, expr evaluates to non-ptr 
value through change of code or simply forgetting "&"

So no code should be broken, you can do everything the same way 
without a change in behavior and auto with a "*" is currently 
invalid.

Basically how it works in C++: http://ideone.com/TUz9dO




More information about the Digitalmars-d mailing list