C++ Ranges
C++20 による標準アルゴリズムの刷新。コレクションを2つのイテレータではなく1つのオブジェクトとして渡し、変換をパイプでつなげられる。
従来は std::sort(v.begin(), v.end()) と書く必要があり、二つのイテレータが別々のコンテナのものでも、コンパイラは助けてくれなかった。Ranges なら std::ranges::sort(v) で済む。さらに大きな新機軸がビューで、これは遅延評価され、所有権を持たない、組み合わせ可能なアダプタだ。v | views::filter(even) | views::transform(square) | views::take(5) は、中間の vector を一切作らずにコレクションを一度だけたどる。基盤になったのは Eric Niebler の range-v3 ライブラリである。
不満の種は、コンパイル時間、コンセプトがあっても読みにくいままのエラーメッセージ、そして C++20 が ranges::to なしで出荷されたため、実際のコンテナに戻すのが無駄に面倒なことだった。これは C++23 で追加された。