Code behaves incorrectly if it is compiled in std.functional

Timon Gehr via Digitalmars-d digitalmars-d at puremagic.com
Mon Jun 8 05:28:06 PDT 2015


On 06/08/2015 09:28 AM, ketmar wrote:
> On Sun, 07 Jun 2015 18:49:24 +0200, Timon Gehr wrote:
>
>> On 06/06/2015 08:06 AM, ketmar wrote:
>>> On Sat, 06 Jun 2015 00:28:51 +0200, Timon Gehr wrote:
>>>
>>>> On 06/05/2015 02:33 PM, ketmar wrote:
>>>>> i agree, i think it was a keyword used 'cause it was already used in
>>>>> C.
>>>>> but it's meaning is completely redefined in D.
>>>>
>>>> The meaning is exactly the same. It's the default storage class.
>>>
>>> then i'll fill a bug about `auto auto` and will reopen it until it's
>>> fixed.
>>>
>>>
>> This is valid C:
>>
>> int main(){
>>     const auto int x=2;
>>     return 0;
>> }
>>
>> This is not valid C:
>>
>> int main(){
>>     auto auto int x=2;
>>     return 0;
>> }
>>
>> What is the problem?
>
> sorry, i didn't realized that this is NG for C language.
>

This is valid D, but it is pointless:

int main(){
     const auto x=2;
     return 0;
}

int main(){
     auto const x=2;
     return 0;
}


This is valid D:

int main(){
     const x=2;
     return 0;
}

This is not valid D:

int main(){
     auto auto x=2;
     return 0;
}

int main(){
     int const x=2;
     return 0;
}


This could be valid D, but isn't (assuming DMD behaves correctly here, I 
don't think this is documented), because it is pointless, and the 
compiler is now arbitrarily trying to be helpful:

int main(){
     const auto int x=2;
     return 0;
}

The error message:
tt.d(2): Error: variable tt.main.x storage class 'auto' has no effect if 
type is not inferred, did you mean 'scope'?

Note "storage class".


Ditto:

int main(){
     auto const int x=2;
     return 0;
}



More information about the Digitalmars-d mailing list