- ranges[meta header]
- std::ranges::views[meta namespace]
- cpo[meta id-type]
- cpp20[meta cpp]
namespace std::ranges::views {
inline constexpr /*unspecified*/ all = /*unspecified*/; // (1)
template<viewable_range R>
using all_t = decltype(all(declval<R>())); // (2)
}
- viewable_range[link viewable_range.md]
- declval[link /reference/utility/declval.md]
- (1): Rangeへの参照として振る舞う
view
を生成するRangeアダプタクロージャオブジェクト - (2):
all
の戻り値の型を得るエイリアステンプレート
all
は、元のRange全体を表すview
。これは、view
ではないRangeをview
として扱うために利用できる。
Rangeアダプタオブジェクトでも暗黙的に使用され、それによりview
かどうかを気にせず使えるようになっている。
all
が生成するview
をまとめて"all view"という。all_t
を使えば、all
の型を得ることができる。
式views::all(E)
の効果は次の通り
E
のdecay
した型がview
のモデルであれば、decay-copy
(E)
と等しい- それ以外のとき、
ref_view
{E}
が有効な式であれば、ref_view
{E}
と等しい - それ以外のとき、
owning_view
{E}
と等しい
#include <ranges>
#include <iostream>
int main() {
using namespace std;
int a[] = {1, 2, 3, 4, 5};
for (int i : a | views::all) {
cout << i;
}
}
- views::all[color ff0000]
12345
- C++20
- Clang: 13.0.0 [mark verified]
- GCC: 10.1.0 [mark verified]
- ICC: ?
- Visual C++: 2019 Update 10 [mark verified]
- N4892 24 Ranges library
- C++20 ranges
- [C++]
<ranges>
のviewを見る19 - owning_view - P2415R2 What is a
view
? (本提案文書はC++20に遡って適用されている)