std::ranges:: get (std::ranges::subrange)
Defined in header
<ranges>
|
||
template
<
std::
size_t
N,
class
I,
class
S,
ranges::
subrange_kind
K
>
requires
(
(
N
==
0
&&
std::
copyable
<
I
>
)
||
N
==
1
)
|
(1) | (since C++20) |
template
<
std::
size_t
N,
class
I,
class
S,
ranges::
subrange_kind
K
>
requires
(
N
<
2
)
|
(2) | (since C++20) |
namespace
std
{
using
ranges
::
get
;
}
|
(3) | (since C++20) |
Provides structured binding support.
subrange
lvalue (or a const rvalue) when
N
==
0
or
N
==
1
, respectively.
subrange
rvalue.
std
, which simplifies their usage and makes every
subrange
with a copyable iterator a
pair-like
type.
Parameters
r | - |
a
subrange
|
Return value
Example
#include <array> #include <iostream> #include <iterator> #include <ranges> int main() { std::array a{1, -2, 3, -4}; std::ranges::subrange sub_a{std::next(a.begin()), std::prev(a.end())}; std::cout << *std::ranges::get<0>(sub_a) << ' ' // == *(begin(a) + 1) << *std::ranges::get<1>(sub_a) << '\n'; // == *(end(a) - 1) *std::get<0>(sub_a) = 42; // OK // *std::get<2>(sub_a) = 13; // Error: index can only be 0 or 1 }
Output:
-2 -4
Defect reports
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
DR | Applied to | Behavior as published | Correct behavior |
---|---|---|---|
LWG 3589 | C++20 |
overload
(
1
)
copies
begin_
if
N
is
0
, but
I
might not model
copyable
|
added constraints |
See also
Structured binding (C++17) | binds the specified names to sub-objects or tuple elements of the initializer |
(C++11)
|
tuple accesses specified element
(function template) |
(C++11)
|
accesses an element of a
pair
(function template) |
(C++11)
|
accesses an element of an
array
(function template) |
(C++17)
|
reads the value of the variant given the index or the type (if the type is unique), throws on error
(function template) |
(C++26)
|
obtains a reference to real or imaginary part from a
std::complex
(function template) |