std::ranges::borrowed_iterator_t, std::ranges::borrowed_subrange_t
From cppreference.com
C++
Feature test macros (C++20)
Concepts library (C++20)
Metaprogramming library (C++11)
Ranges library (C++20)
Filesystem library (C++17)
Concurrency support library (C++11)
Execution control library (C++26)
Ranges library
a placeholder type indicating that an iterator or a
(class) [edit]
(C++23)(C++23)
(C++23)(C++23)
(C++23)(C++23)
(C++26)(C++26)
(C++23)(C++23)
(C++23)(C++23)
(C++23)(C++23)
(C++23)(C++23)
(C++23)(C++23)
(C++23)
(C++23)(C++23)
(C++23)
(C++23)(C++23)
(C++23)(C++23)
(C++23)(C++23)
(C++23)(C++23)
(C++23)(C++23)
(C++23)
Defined in header
<ranges>
template< ranges::range R >
using borrowed_iterator_t = /* see below */;
(1)
(since C++20)
using borrowed_iterator_t = /* see below */;
template< ranges::range R >
using borrowed_subrange_t = /* see below */;
(2)
(since C++20)
using borrowed_subrange_t = /* see below */;
2) std::ranges::subrange <std::ranges::iterator_t <R>> if
R
models borrowed_range
, std::ranges::dangling otherwise.These two alias templates are used by some constrained algorithms to avoid returning potentially dangling iterators or views.
[edit] Possible implementation
borrowed_iterator_t |
---|
template< std::ranges::range R > using borrowed_iterator_t = std::conditional_t <std::ranges::borrowed_range <R>, std::ranges::iterator_t <R>, std::ranges::dangling >; |
borrowed_subrange_t |
template< std::ranges::range R > using borrowed_subrange_t = std::conditional_t <std::ranges::borrowed_range <R>, std::ranges::subrange <std::ranges::iterator_t <R>>, std::ranges::dangling >; |
[edit] See also
(C++20)
subrange
should not be returned since it would be dangling (class) [edit]