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

履歴 編集

function template
<functional>

# std::ref(C++11)

    namespace std {
      template <class T>
      reference_wrapper<T> ref(T& t) noexcept;                   // (1) C++11

      template <class T>
      constexpr reference_wrapper<T> ref(T& t) noexcept;         // (1) C++20

      template <class T>
      reference_wrapper<T> ref(reference_wrapper<T> t) noexcept; // (2) C++11

      template <class T>
      constexpr reference_wrapper<T> ref(reference_wrapper<T> t) noexcept; // (2) C++20

      template <class T>
      void ref(const T&&) = delete;                              // (3)
    }

## 概要

変数への参照`t`を保持する`reference_wrapper`オブジェクトを生成する

C++20からは、テンプレートパラメーター`T`は不完全型をサポートしている。

## 戻り値

- (1) : `t`を参照する`reference_wrapper<T>`オブジェクトを返す。
- (2) : `t`をそのまま返す。

## 例外

投げない

## 例

    #include <iostream>
    #include <functional>

    int main()
    {
      int x = 3;

      // 参照ラッパーrは、変数xへの参照を保持する
      std::reference_wrapper<int> r = std::ref(x);
      ++x;

      std::cout << r.get() << std::endl;
    }

### 出力

    4

## バージョン

### 言語

- C++11

### 処理系

- Clang: ??
- GCC: 4.7.0 ✅
- ICC: ??
- Visual C++: ??

## 参照

- P0357R3 reference_wrapper for incomplete types
  - テンプレートパラメータ`T`に不完全型が許可された経緯
- P1065R2 constexpr INVOKE