次の方法で共有


add_rvalue_reference クラス

テンプレート パラメーターがオブジェクトまたは関数の型の場合に、その右辺値参照型を作成します。 それ以外の場合、参照縮小のセマンティクスのため、型はテンプレート パラメーターと同じです。

構文

template <class T>
struct add_rvalue_reference;

template <class T>
using add_rvalue_reference_t = typename add_rvalue_reference<T>::type;

パラメーター

T
変更する型。

解説

add_rvalue_reference クラスには、type という名前 のメンバーがあります。これは、テンプレート パラメーター T への rvalue 参照の型のエイリアスです。参照の縮小のセマンティクスは、非オブジェクト型と非関数型に対して型 TT&&T です。たとえば、T が lvalue 参照型の場合、add_rvalue_reference<T>::type は rvalue 参照でなく lvalue 参照型です。

便宜上、<type_traits> はヘルパー テンプレート add_rvalue_reference_t (add_rvalue_referencetype メンバーの別名) を定義します。

このコード例では、static_assert を使用して、右辺値参照型を add_rvalue_referenceadd_rvalue_reference_t を使用して作成する方法、および左辺値参照型での add_rvalue_reference の結果を右辺値参照ではなく左辺値参照型に縮小する方法を示します。

// ex_add_rvalue_reference.cpp
// Build by using: cl /EHsc /W4 ex_add_rvalue_reference.cpp
#include <type_traits>
#include <iostream>
#include <string>

using namespace std;
int main()
{
    static_assert(is_same<add_rvalue_reference<string>::type, string&&>::value,
        "Expected add_rvalue_reference_t<string> to be string&&");
    static_assert(is_same<add_rvalue_reference_t<string*>, string*&&>::value,
        "Expected add_rvalue_reference_t<string*> to be string*&&");
    static_assert(is_same<add_rvalue_reference<string&>::type, string&>::value,
        "Expected add_rvalue_reference_t<string&> to be string&");
    static_assert(is_same<add_rvalue_reference_t<string&&>, string&&>::value,
        "Expected add_rvalue_reference_t<string&&> to be string&&");
    cout << "All static_assert tests of add_rvalue_reference passed." << endl;
    return 0;
}

/*Output:
All static_assert tests of add_rvalue_reference passed.
*/

必要条件

ヘッダー: <type_traits>

名前空間: std

関連項目

<type_traits>
add_lvalue_reference クラス
is_rvalue_reference クラス