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