std::experimental::ranges::dangling, std::experimental::ranges::safe_iterator_t
Min standard notice:
Header: <experimental/ranges/iterator>
The class template dangling is a simple wrapper around an object to indicate that the wrapped object may be dangling, that is, it refers to another object whose lifetime may have ended.
# Declarations
template< CopyConstructible T >
class dangling {
public:
dangling() requires DefaultConstructible<T>();
dangling(T t);
T get_unsafe() const;
};
(ranges TS)
template< Range R >
using safe_iterator_t = std::conditional_t<std::is_lvalue_reference<R>::value,
ranges::iterator_t<R>,
ranges::dangling<ranges::iterator_t<R>>;
(ranges TS)