最終更新日時: 2024年06月11日 22時45分38秒 (JST)
Akira Takahashi が更新

履歴 編集

function template
<tuple>

# std::make_tuple(C++11)

    namespace std {
      template <class... Types>
      tuple<VTypes ...> make_tuple(Types&&...);           // C++11

      template <class... Types>
      constexpr tuple<VTypes ...> make_tuple(Types&&...); // C++14
    }

## 概要

渡された可変個パラメータのコピーから`tuple`型のオブジェクトを構築する。

## 戻り値

パラメータパックの値からなる`tuple`オブジェクトを返す。

- C++11 : `Types...`の各型`T`において、
  - `std::decay<T>::type`の結果型を使用し、
  - かつ型`T`が`std::reference_wrapper`型であった場合`T&`型を使用する
- C++20 : `Types...`の各型`T`において、
  - `std::unwrap_ref_decay_t<T>`を適用した型を使用する

## 例

    #include <tuple>
    #include <string>
    #include <functional>

    int main()
    {
      // 渡した値からtupleを構築
      std::tuple<int, char, const char*> t1 = std::make_tuple(1, 'a', "Hello");

      // tupleのコンストラクタによってconst char*をstd::stringに型変換
      std::tuple<int, char, std::string> t2 = std::make_tuple(1, 'a', "Hello");

      int a = 1;
      char b = 'b';
      std::string c = "hello";

      // 変数のコピーからtupleを構築
      std::tuple<int, char, std::string> t3 = std::make_tuple(a, b, c);

      // 変数の一部を参照と見なしてtupleを構築
      std::tuple<int, char&, const std::string&> t4 = std::make_tuple(a, std::ref(b), std::cref(c));
    }

### 出力

## バージョン

### 言語

- C++11

### 処理系

- Clang: ?
- GCC: 4.6.1 ✅
- ICC: ?
- Visual C++: 2008 ✅, 2010 ✅

## 参照

- N3471 Constexpr Library Additions: utilities, v3
- P0318R1 `unwrap_ref_decay` and `unwrap_reference`