• Class / Function / Type

      std::
    • Header file

      <>
    • Other / All

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

    履歴 編集

    function template
    <tuple>

    std::forward_as_tuple

    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という名前で一時期表記されていた。
    コンパイラのバージョンによっては、この名前での実装もありえる。

    参照