Created on 2019-12-19.00:00:00 last changed 12 months ago
Proposed resolution:
This wording is relative to N4885.
Modify [range.range] as indicated:
template<class T> concept borrowed_range = range<T> && (is_lvalue_reference_v<T> || enable_borrowed_range<remove_cvref_t<T>>);-5- Let U be remove_reference_t<T> if T is an rvalue reference type, and T otherwise. Given
-6- [Note: Since the validity of iterators is not tied to the lifetime ofan expression E such that decltype((E)) is Ta variable u of type U, T models borrowed_range only if the validity of iterators obtained fromthe object denoted by Eu is not tied to the lifetime of thatobjectvariable.an objecta variable whose type models borrowed_range, a functioncan accept arguments ofwith a parameter of such a typeby value andcan return iterators obtained from it without danger of dangling. — end note]
[ 2021-10-14 Approved at October 2021 virtual plenary. Status changed: Voting → WP. ]
[ 2021-09-20; Reflector poll ]
Set status to Tentatively Ready after five votes in favour during reflector poll in June.
[ 2021-05-19 Tim updates wording ]
The new wording below attempts to keep the "borrowed" property generally applicable to all models of borrowed_range, instead of bluntly carving out lvalue reference types.
[ 2020-01 Priority set to 3 after review on the reflector. ]
Previous resolution [SUPERSEDED]:
This wording is relative to N4842.
Modify [range.range] as indicated:
template<class T> concept safe_range = range<T> && (is_lvalue_reference_v<T> || enable_safe_range<remove_cvref_t<T>>);-5-
Given an expression E such that decltype((E)) is T,A type T models safe_rangeonlyif:-6- [Note:
(5.1) — is_lvalue_reference_v<T> is true, or
(5.2) — given an expression E such that decltype((E)) is T,
ifthe validity of iterators obtained from the object denoted by E is not tied to the lifetime of that object.Since the validity of iterators is not tied to the lifetime of an object whose type models safe_range, aA function can accept arguments ofsucha type that models safe_rangeby valueand return iterators obtained from it without danger of dangling. — end note]
[range.dangling] p2 hints at how safe_range should allow lvalue ranges to model it. However, its wording doesn't take into account that case.
History | |||
---|---|---|---|
Date | User | Action | Args |
2023-11-22 15:47:43 | admin | set | status: wp -> c++23 |
2021-10-14 09:56:08 | admin | set | messages: + msg12115 |
2021-10-14 09:56:08 | admin | set | status: voting -> wp |
2021-09-29 12:57:28 | admin | set | status: ready -> voting |
2021-09-20 11:34:46 | admin | set | messages: + msg12057 |
2021-09-20 11:34:46 | admin | set | status: new -> ready |
2021-05-20 01:13:33 | admin | set | messages: + msg11821 |
2020-01-05 16:13:01 | admin | set | messages: + msg10911 |
2019-12-21 15:01:34 | admin | set | messages: + msg10901 |
2019-12-19 00:00:00 | admin | create |