Why take arguments by reference?¶
Relevant GitHub issue: https://github.com/eliaskosunen/scnlib/issues/2
Another frequent complaint is how the library requires default-constructing your arguments, and then passing them by reference. A proposed alternative is returning the arguments as a tuple, and then unpacking them at call site.
This is covered pretty well by the above GitHub issue, but to summarize:
std::tuplehas measurable overhead (~5% slowdown)
it still would require your arguments to be default-constructible
To elaborate on the second bullet point, consider this example:
auto [result, i, str] = scn::scan_tuple<int, non_default_constructible_string>( range, scn::default_tag);
Now, consider what would happen if an error occurs during scanning the
integer. The function would need to return, but what to do with the string?
It must be default-constructed (
std::tuple doesn’t allow
Would it be more convenient, especially with C++17 structured bindings?
One could argue that, and that’s why an alternative API, returning a
is available, in the header
The rationale of putting it in a separate header is to avoid pulling in the
entirety of very heavy standard headers
TODO: flesh this section out