最終更新日時: 2025年07月10日 10時26分30秒 (JST)
Koichi Murase が更新

履歴 編集

function
<ranges>

# std::ranges::elements_view::推論補助(C++20)

    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 ✅

## 関連項目

- `views::all`

## 参照

- P2367R0 Remove misuses of list-initialization in Clause 24