safe_range<SomeRange&> case
Johel Ernesto Guerrero Peña

Created on 2019-12-19.00:00:00 last changed 8 months ago


Date: 2020-01-05.16:13:01

Proposed resolution:

This wording is relative to N4842.

  1. 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_range only if:

    1. (5.1) — is_lvalue_reference_v<T> is true, or

    2. (5.2) — given an expression E such that decltype((E)) is T, if the validity of iterators obtained from the object denoted by E is not tied to the lifetime of that object.

    -6- [Note: Since the validity of iterators is not tied to the lifetime of an object whose type models safe_range, aA function can accept arguments of such a type that models safe_range by value and return iterators obtained from it without danger of dangling. — end note]

Date: 2020-01-05.16:13:01

[ 2020-01 Priority set to 3 after review on the reflector. ]

Date: 2019-12-19.00:00:00

[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.

Date User Action Args
2020-01-05 16:13:01adminsetmessages: + msg10911
2019-12-21 15:01:34adminsetmessages: + msg10901
2019-12-19 00:00:00admincreate