map kinds of Ranges

Steven Schveighoffer schveiguy at yahoo.com
Wed May 25 10:15:07 PDT 2011


On Wed, 25 May 2011 12:19:03 -0400, Andrei Alexandrescu  
<SeeWebsiteForEmail at erdani.org> wrote:

> 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".

Wait, I thought auto ref was to allow rvalues to be passed by reference?   
I.e. given the function:

void foo(auto ref S s)

then you could call foo with an rvalue or an lvalue for s.

I swear every time you have an opinion on auto ref it changes :(

Or are there two different meanings depending on whether auto ref is a  
parameter or return value attribute?

-Steve


More information about the Digitalmars-d mailing list