This change replaces the __forwarding_range implementation detail with the ranges::safe_range concept and adds the ranges::enable_safe_range variable template for opt-in in to the concept. It also adjusts the begin/end/rbegin/rend customization point objects to match the new rules for accessing rvalue ranges only when safe to do so. * include/bits/range_access.h (ranges::enable_safe_range): Define. (ranges::begin, ranges::end, ranges::rbegin, ranges::rend): Constrain to only accept types satisfying safe_range and treat argument as an lvalue when calling a member of performing ADL. (ranges::__detail::__range_impl, ranges::__detail::__forwarding_range): Remove. (ranges::range): Adjust definition. (ranges::safe_range): Define. (ranges::iterator_t, ranges::range_difference_t): Reorder definitions to match the synopsis in the working draft. (ranges::disable_sized_range): Remove duplicate definition. * include/experimental/string_view (ranges::enable_safe_range): Add partial specialization for std::experimental::basic_string_view. * include/std/ranges (ranges::viewable_range, ranges::subrange) (ranges::empty_view, ranges::iota_view): Use safe_range. Specialize enable_safe_range. (ranges::safe_iterator_t, ranges::safe_subrange_t): Define. * include/std/span (ranges::enable_safe_range): Add partial specialization for std::span. * include/std/string_view (ranges::enable_safe_range): Likewise for std::basic_string_view. * testsuite/std/ranges/access/begin.cc: Adjust expected results. * testsuite/std/ranges/access/cbegin.cc: Likewise. * testsuite/std/ranges/access/cdata.cc: Likewise. * testsuite/std/ranges/access/cend.cc: Likewise. * testsuite/std/ranges/access/crbegin.cc: Likewise. * testsuite/std/ranges/access/crend.cc: Likewise. * testsuite/std/ranges/access/data.cc: Likewise. * testsuite/std/ranges/access/end.cc: Likewise. * testsuite/std/ranges/access/rbegin.cc: Likewise. * testsuite/std/ranges/access/rend.cc: Likewise. * testsuite/std/ranges/empty_view.cc: Test ranges::begin and ranges::end instead of unqualified calls to begin and end. * testsuite/std/ranges/safe_range.cc: New test. * testsuite/std/ranges/safe_range_types.cc: New test. * testsuite/util/testsuite_iterators.h: Add comment about safe_range. From-SVN: r279135
| Name |
Last commit
|
Last update |
|---|---|---|
| .. | ||
| common_type | Loading commit data... | |
| debug | Loading commit data... | |
| exception | Loading commit data... | |
| hash_fn | Loading commit data... | |
| io | Loading commit data... | |
| native_type | Loading commit data... | |
| performance | Loading commit data... | |
| pstl | Loading commit data... | |
| regression | Loading commit data... | |
| statistic | Loading commit data... | |
| thread | Loading commit data... | |
| replacement_memory_operators.h | Loading commit data... | |
| slow_clock.h | Loading commit data... | |
| specfun_testcase.h | Loading commit data... | |
| testsuite_abi.cc | Loading commit data... | |
| testsuite_abi.h | Loading commit data... | |
| testsuite_abi_check.cc | Loading commit data... | |
| testsuite_allocator.cc | Loading commit data... | |
| testsuite_allocator.h | Loading commit data... | |
| testsuite_api.h | Loading commit data... | |
| testsuite_character.cc | Loading commit data... | |
| testsuite_character.h | Loading commit data... | |
| testsuite_common_types.h | Loading commit data... | |
| testsuite_container_traits.h | Loading commit data... | |
| testsuite_containergen.h | Loading commit data... | |
| testsuite_containers.h | Loading commit data... | |
| testsuite_counter_type.h | Loading commit data... | |
| testsuite_error.h | Loading commit data... | |
| testsuite_fs.h | Loading commit data... | |
| testsuite_greedy_ops.h | Loading commit data... | |
| testsuite_hooks.cc | Loading commit data... | |
| testsuite_hooks.h | Loading commit data... | |
| testsuite_io.h | Loading commit data... | |
| testsuite_iterators.h | Loading commit data... | |
| testsuite_new_operators.h | Loading commit data... | |
| testsuite_performance.h | Loading commit data... | |
| testsuite_random.h | Loading commit data... | |
| testsuite_regex.h | Loading commit data... | |
| testsuite_rng.h | Loading commit data... | |
| testsuite_rvalref.h | Loading commit data... | |
| testsuite_shared.cc | Loading commit data... | |
| testsuite_tr1.h | Loading commit data... |