最終更新日時: 2025年05月30日 13時42分02秒 (JST)
Akira Takahashi が更新

履歴 編集

function
<ranges>

# std::ranges::ref_view::コンストラクタ(C++20)

    template <different-from<ref_view> T>
      requires 以下参照
    constexpr
      ref_view(T&& t);          // (1) C++20

## 概要

`ref_view`オブジェクトを構築する。

- (1) : `t`へのポインタを`*this`に保持する

## 効果

- (1) : メンバ変数`r_`を`addressof(static_cast<R&>(std::forward<T>(t)))`で初期化する

## 備考

- (1) : 説明専用の関数`FUN`を以下のように定義する：

      void FUN(R&);
      void FUN(R&&) = delete;

  - requires節は、以下と等価になる：

      convertible_to<T, R&> && requires { FUN(declval<T>()); }

  - これはつまり、このコンストラクタには一時オブジェクトは渡せないことを意味する

## 例

    #include <iostream>
    #include <vector>
    #include <ranges>

    int main() {
      std::vector<int> v = {1, 2, 3};
      for (int x : std::ranges::ref_view(v)) {
        std::cout << x << ' ';
      }
    }

### 出力

    1 2 3

## バージョン

### 言語

- C++20

### 処理系

- Clang: 13.0.0 ✅
- GCC: 10.1.0 ✅
- ICC: ?
- Visual C++: 2019 Update 10 ✅