Fix format_as for non-const begin/end views #3955
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Fixes issue #3752
base::format
does not accept rvalues, using the result offormat_as
directly means it is passed one. Doesn't matter for ranges with a const begin and end, but sincestd::ranges::filter_view
caches the next value to return, it only has a mutable begin/end iterator.If we just store the result of
format_as
in a temporary variable, we can pass it as an lvalue.Since we use it in
fmt/include/fmt/ranges.h
Lines 485 to 490 in 1dc71f2
And we don't call
std::forward
anyway, I don't think we're performing any pessimisation by making this changeAnother way to fix this is by providing a
&&
overload offmt/include/fmt/ranges.h
Lines 541 to 545 in 1dc71f2
However other control paths (that pass lvalues) then flow through this, which doesn't seem right, so didn't opt for that method