On Saturday, 8 September 2012 at 12:10:26 UTC, kenji hara wrote:
2012/9/8 monarch_dodra <[email protected]>:
[snip]

Still, I find it horrible to have to create a named "dummy" variable just
when I simply want to pass a copy of my range.

Why you are afraid to declaring "dummy" variable?
formattedRead is a parser, not an algorithm (as I said in the pull request comment). After calling it, zero or more elements will remain. And, in almost cases, the remains will be used other purpose, or just
checked that is empty.

int n = formattedRead(input_range, fmt, args...);
next_parsing(input_range);   // reusing input_range
assert(input_range.empty);  // or just checked that is empty

If formattedRead can receive rvalue, calling it would ignore the
remains, and it will cause hidden bug.

int n = formattedRead(r.save, fmt, args...);
// If the remains is not empty, it is ignored. Is this expected, or
something logical bug?

auto dummy = r.save;
int n = formattedRead(dummy, fmt, args...);
assert(dummy.empty); // You can assert that remains should be empty.

formattedRead returns multiple states (the values which are read, how many values are read, and remains of input), so allowing to ignore
them would introduce bad usage and possibilities of bugs.

Kenji Hara

Hum, I think I see your point, although in my opinion, checking the return value is all that is required for generic error checking.

Checking the state of the range afterwards is being super extra careful for a specific use case, and should not necessarilly be forced onto the programmer.

I'll close the pull in the morning.

Reply via email to