cpp
// STRUCT TEMPLATE add_rvalue_reference
template<class _Ty>
struct add_rvalue_reference
{ // add rvalue reference
using type = typename _Add_reference<_Ty>::_Rvalue;
};
template<class _Ty>
using add_rvalue_reference_t = typename _Add_reference<_Ty>::_Rvalue;
// FUNCTION TEMPLATE declval
template<class _Ty>
add_rvalue_reference_t<_Ty> declval() noexcept;
cpp
// STRUCT TEMPLATE _Add_reference
template<class _Ty,
class = void>
struct _Add_reference
{ // add reference
using _Lvalue = _Ty;
using _Rvalue = _Ty;
};
void_t <_Ty&>用来做什么?
template<class _Ty>
struct _Add_reference<_Ty, void_t<_Ty&>>
{ // add reference
using _Lvalue = _Ty&;
using _Rvalue = _Ty&&;
};