Should this work?

monarch_dodra monarchdodra at gmail.com
Fri Jan 10 12:41:32 PST 2014


On Friday, 10 January 2014 at 19:40:35 UTC, Manu wrote:
> On 11 January 2014 00:31, John Colvin
>> On Friday, 10 January 2014 at 14:28:09 UTC, John Colvin wrote:
>> or if you want something short and simple, define a free 
>> function:
>> auto popFrontRet(R)(ref R range)
>>     if(isInputRange!R)
>> {
>>     range.popFront();
>>     assert(!range.empty);
>>     return range.front;
>> }
>>
>
> This is what I've done. I'm just surprised that such an obvious 
> function
> doesn't exist, and suspect I was just retarded at phobos again.
> Having a function that does this is kinda important to simplify 
> lots of
> expressions that otherwise need to be broken out across a bunch 
> of lines.
>
> Does nobody see this coming up in their code? I have it 
> basically every
> time I use ranges, and as usual, surprised others don't feel 
> the same way.

Could you confirm that what you wanted is:
"pop, then take the new front" [1]
and not
"pop and get the popped element" [2]
?

In case of [1], how do you know if you can call the function, as 
knowing not empty is not enough? Take a range with a single 
element: First you pop, then it's empty, then you take front 
(boom).

In case of [2], honestly, I've never felt the need for that. As I 
said previously, I think it's better to pop *once* you are done 
with the object, rather than once you start using it. It's better 
in terms of exception safety, and in certain cases, a premature 
pop can invalidate the element you want to operate on (byLine) :/


More information about the Digitalmars-d mailing list