Sdílet prostřednictvím


add_rvalue_reference – třída

Vytvoří typ odkazu rvalue parametru šablony, pokud se jedná o objekt nebo typ funkce. Jinak je vzhledem k sémantice sbalení odkazu typ stejný jako parametr šablony.

Syntaxe

template <class T>
struct add_rvalue_reference;

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

Parametry

T
Typ, který chcete upravit.

Poznámky

Třída add_rvalue_reference má člen s názvem type, což je alias pro typ rvalue odkaz na parametr šablony T. Sémantika sbalení odkazu znamená, že pro jiné než objektové a nefunkční typy T je TT&&. Pokud je například T typ odkazu lvalue, add_rvalue_reference<T>::type je typ odkazu lvalue, nikoli odkaz rvalue.

Pro usnadnění type_traits <> definuje pomocnou šablonu, add_rvalue_reference_tkterá aliasy type člena add_rvalue_reference.

Příklad

Tento příklad kódu používá static_assert k zobrazení způsobu vytváření typů odkazů rvalue pomocí add_rvalue_reference a add_rvalue_reference_ta jak výsledek typu add_rvalue_reference odkazu lvalue není odkaz rvalue, ale sbalí na typ odkazu lvalue.

// 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.
*/

Požadavky

Záhlaví: <type_traits>

Namespace: std

Viz také

<type_traits>
add_lvalue_reference – třída
is_rvalue_reference – třída