namespace std::ranges {
template<class R, size_t N>
elements_view(R&&, const integral_constant<size_t, N>&) ->
elements_view<views::all_t<R>, N>; // (1) C++20 (削除)
template<class R, size_t N>
elements_view(R&&) -> elements_view<views::all_t<R>, N>; // (2) C++23
}
概要
elements_view
クラステンプレートの型推論補助。
- (1) : C++20で導入されたが、C++23で削除された
- (2) : C++23で導入された新しい推論補助
備考
C++20では、elements_view
は第2引数としてintegral_constant
を受け取っていたが、C++23からはテンプレート引数としてN
を直接指定するように変更された。
例
#include <ranges>
#include <map>
#include <string>
#include <type_traits>
int main() {
std::map<int, std::string> m = {{1, "one"}, {2, "two"}, {3, "three"}};
// C++23以降の使用方法
std::ranges::elements_view<std::views::all_t<std::map<int, std::string>&>, 0> ev{m};
// 推論された型を確認
static_assert(std::same_as<
decltype(ev),
std::ranges::elements_view<std::ranges::ref_view<std::map<int, std::string>>, 0>
>);
}
出力
バージョン
言語
- C++20: (1)
- C++23: (2)
処理系
- Clang: 13.0.0 ✅
- GCC: 10.1.0 ✅
- ICC: ?
- Visual C++: 2019 Update 10 ✅