Kelas add_rvalue_reference
Membuat jenis referensi rvalue dari parameter templat, jika itu adalah objek atau jenis fungsi. Jika tidak, karena semantik referensi yang diciutkan, jenisnya sama dengan parameter templat.
template <class T>
struct add_rvalue_reference;
template <class T>
using add_rvalue_reference_t = typename add_rvalue_reference<T>::type;
T
Jenis yang akan dimodifikasi.
Kelas add_rvalue_reference
memiliki anggota bernama type
, yang merupakan alias untuk jenis referensi rvalue ke parameter templat T. Semantik referensi yang menciutkan menyiratkan bahwa, untuk jenis non-objek dan non-fungsi T, T&&
adalah T. Misalnya, ketika T adalah jenis referensi lvalue, add_rvalue_reference<T>::type
adalah jenis referensi lvalue, bukan referensi rvalue.
Untuk kenyamanan, <type_traits> mendefinisikan templat pembantu, add_rvalue_reference_t
, yang alias type
anggota .add_rvalue_reference
Contoh kode ini menggunakan static_assert untuk menunjukkan bagaimana jenis referensi rvalue dibuat dengan menggunakan add_rvalue_reference
dan add_rvalue_reference_t
, dan bagaimana hasil pada add_rvalue_reference
jenis referensi lvalue bukan referensi rvalue, tetapi diciutkan ke jenis referensi 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.
*/
Header: <type_traits>
Namespace: std
<type_traits>
Kelas add_lvalue_reference
Kelas is_rvalue_reference