public:
iterator() requires default_initializable<iterator_t<V>> = default; // (1)
private:
constexpr iterator(filter_view& parent, iterator_t<V> current); // (2) 説明専用
概要
filter_view::iteratorオブジェクトを構築する。
- (1) : デフォルトコンストラクタ
- (2) :
privateな説明専用コンストラクタ。filter_viewのbegin()から呼び出される
効果
- (1) :
current_、parent_をデフォルト構築する - (2) :
current_をstd::move(current_)で、parent_をaddressof(parent_)で初期化する
例
#include <ranges>
#include <vector>
#include <iostream>
int main() {
std::vector<int> vec = {0, 1, 2, 3, 4, 5};
std::ranges::filter_view fv{vec, [](int x){ return x % 2 == 0; }};
// begin()を経由してイテレータを取得する
auto i = fv.begin();
std::cout << *i << '\n';
i++;
std::cout << *i << '\n';
i++;
std::cout << *i << '\n';
}
出力
0
2
4
バージョン
言語
- C++20
処理系
- Clang: 13.0.0 ✅
- GCC: 10.1.0 ✅
- ICC: ?
- Visual C++: 2019 Update 10 ✅
参照
- N4861 24.7.4 Filter view
- N4950 26.7.8 Filter view
- P3059R2 Making user-defined constructors of view iterators/sentinels private
- C++26で、(2)のユーザー定義コンストラクタを
publicからprivateに移動
- C++26で、(2)のユーザー定義コンストラクタを