[FIX] gcc15: conditionally borrowed_range views#3360
Merged
Conversation
gcc15 now implements std::ranges::to For `std::string` (as example), the call is delegated to `std::string(std::from_range, R &&)`. This then will use `std::ranges::data` to get the data pointer and just copy the data. This happens, for example, in format_sam's `id | detail::take_until_and_consume(is_space) | ranges::to<id_type>()`. Since the view is not an lvalue, it needs to be a borrowed_range for `std::ranges::data` to work. Similar to std::views, we make (some of) our views conditionally borrowed if the underlying range is borrowed.
Member
|
Documentation preview available at https://docs.seqan.de/preview/seqan/seqan3/3360 |
Codecov ReportAll modified and coverable lines are covered by tests ✅
Additional details and impacted files@@ Coverage Diff @@
## main #3360 +/- ##
=======================================
Coverage 98.11% 98.11%
=======================================
Files 270 270
Lines 11913 11913
Branches 103 103
=======================================
Hits 11689 11689
Misses 224 224 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
gcc15 now implements
std::ranges::toFor
std::string(as example), the call is delegated tostd::string(std::from_range, R &&).This then will use
std::ranges::datato get the data pointer and just copy the data.This happens, for example, in format_sam's
id | detail::take_until_and_consume(is_space) | ranges::to<id_type>().Since the view is not an lvalue, it needs to be a borrowed_range for
std::ranges::datato work.Similar to std::views, we make (some of) our views conditionally borrowed if the underlying range is borrowed.
Edit: The problem of calling
std::ranges::dataon non-borrowed ranges in thestd::stringrange constructor is now also fixed in GCC. I was aware that this is likely a bug in GCC, but I found it worth making the views borrowed because it allows for optimizations (memcpy instead of iteration).