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_t
která 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_t
a 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