最終更新日時(UTC):
が更新

履歴 編集

function template
<tuple>

std::forward_as_tuple(C++11)

namespace {
  template <class... Types>
  tuple<Types&&...> forward_as_tuple(Types&&...) noexcept;           // C++11

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

概要

パラメータの元の型からなるtupleを生成する。左辺値参照型は左辺値参照型として、右辺値は右辺値参照として転送される。

戻り値

パラメータの元の型からなるtupleオブジェクト

例外

投げない

#include <tuple>
#include <string>
#include <type_traits>

int main()
{
  // 一時オブジェクトからは右辺値参照のtupleが作られる
  auto t1 = std::forward_as_tuple(1, 'a', std::string("Hello"));
  static_assert(std::is_same<decltype(t1), std::tuple<int&&, char&&, std::string&&>>());

  // 左辺値からは左辺値参照のtupleが作られる
  int a = 1;
  char b = 'a';
  std::string c = "Hello";
  auto t2 = std::forward_as_tuple(a, b, c);
  static_assert(std::is_same<decltype(t2), std::tuple<int&, char&, std::string&>>());
}

出力

バージョン

言語

  • C++11

処理系

注意事項

forward_as_tupleは、ドラフト仕様の段階でpack_argumentsという名前で一時期表記されていた。
コンパイラのバージョンによっては、この名前での実装もありえる。

参照