- ranges[meta header]
- std::ranges[meta namespace]
- ref_view[meta class]
- function[meta id-type]
- cpp20[meta cpp]
template <different-from<ref_view> T>
requires 以下参照
constexpr
ref_view(T&& t); // (1) C++20ref_viewオブジェクトを構築する。
- (1) :
tへのポインタを*thisに保持する
- (1) : メンバ変数
r_をaddressof(static_cast<R&>(std::forward<T>(t)))で初期化する
-
(1) : 説明専用の関数
FUNを以下のように定義する:void FUN(R&); void FUN(R&&) = delete;
- requires節は、以下と等価になる:
convertible_to<T, R&> && requires { FUN(declval<T>()); }
- これはつまり、このコンストラクタには一時オブジェクトは渡せないことを意味する
#include <iostream>
#include <vector>
#include <ranges>
int main() {
std::vector<int> v = {1, 2, 3};
for (int x : std::ranges::ref_view(v)) {
std::cout << x << ' ';
}
}1 2 3
- C++20
- Clang: 13.0.0 [mark verified]
- GCC: 10.1.0 [mark verified]
- ICC: ?
- Visual C++: 2019 Update 10 [mark verified]