map kinds of Ranges

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Wed May 25 09:19:03 PDT 2011


On 5/25/11 10:48 AM, Steven Schveighoffer wrote:
> On Wed, 25 May 2011 11:45:30 -0400, Don <nospam at nospam.com> wrote:
>
>> Steven Schveighoffer wrote:
>>> On Wed, 25 May 2011 10:59:46 -0400, Don <nospam at nospam.com> wrote:
>>>
>>>> Robert Clipsham wrote:
>>>>> On 24/05/2011 04:28, Jonathan M Davis wrote:
>>>>>>> Thoughts on this?
>>>>>>
>>>>>> I believe that the best and most likely to be implemented syntax
>>>>>> which has
>>>>>> been suggested (it was Andrei's idea IIRC) is to simply add
>>>>>> optional clauses
>>>>>> to attributes. So, instead of pure, you'd do pure(condition). If
>>>>>> the condition
>>>>>> is true, the templated function it's on is pure. If the condition
>>>>>> is false,
>>>>>> then the function isn't pure. Don't expect pure to become @pure or
>>>>>> nothrow to
>>>>>> become @nothrow though. I think that at this point, any attribute
>>>>>> which is a
>>>>>> keyword is going to stay one, and any attribute that has @ on the
>>>>>> front of it
>>>>>> is going to stay that way as well.
>>>>>>
>>>>>> - Jonathan M Davis
>>>>> Wouldn't it make sense to follow the same syntax as auto ref? auto
>>>>> pure, auto nothrow, auto @safe etc? (Although I guess that doesn't
>>>>> allow for conditions, nevermind :<)
>>>>
>>>> 'auto ref' is one of worst syntax anomalies in the language. It
>>>> should be a single keyword -- eg, 'autoref' -- it has nothing in
>>>> common with the other use of 'auto', and it's not necessarily 'ref'.
>>> The current implementation is incorrect. In a correct implementation
>>> auto ref *is* always ref.
>>> -Steve
>>
>> You're saying this example from the spec shouldn't compile?
>>
>> auto ref foo() { return 3; } // value return
>
> Yes. Auto ref is specifically to allow passing rvalues as references to
> functions, not as a template that means either ref or not. At least,
> that is my understanding from Andrei's description. I don't have a copy
> of TDPL, but I think it's in there too.
>
> -Steve

The example should work. "auto ref" means "ref if possible, otherwise 
drop it".

Andrei


More information about the Digitalmars-d mailing list