- ranges[meta header]
- std::ranges[meta namespace]
- as_rvalue_view[meta class]
- function[meta id-type]
- cpp23[meta cpp]
constexpr V base() const &
requires copy_constructible<V>; // (1) C++23
constexpr V base() &&; // (2) C++23元となるRangeを取得する。
- (1) : 元となるRangeをコピーして返す
- (2) : 元となるRangeをムーブして返す
メンバ変数base_として保持している、元となるRangeオブジェクトがあるとして、以下を返す:
-
(1) :
return base_; -
(2) :
return std::move(base_);- std::move[link /reference/utility/move.md]
- ここで、
Vはstd::ranges::ref_viewであり、元となるRangeはviewに変換されている。
#include <cassert>
#include <vector>
#include <ranges>
int main() {
std::vector<int> v = {1, 2, 3};
auto r = std::views::as_rvalue(v);
std::ranges::ref_view<std::vector<int>> base = r.base();
assert(&base.base() == &v);
}- r.base()[color ff0000]
- base.base()[link /reference/ranges/ref_view/base.md]
- C++23
- Clang: 17 [mark verified]
- GCC: 13 [mark verified]
- ICC: ?
- Visual C++: 2022 Update 4 [mark verified]