30#ifndef _RWSTD_RW_META_REF_H_INCLUDED
31#define _RWSTD_RW_META_REF_H_INCLUDED
39template <
class _TypeT>
40struct __rw_remove_reference
45template <
class _TypeT>
46struct __rw_remove_reference<_TypeT&>
51#ifndef _RWSTD_NO_RVALUE_REFERENCES
53template <
class _TypeT>
54struct __rw_remove_reference<_TypeT&&>
61#define _RWSTD_REMOVE_REFERENCE(T) _RW::__rw_remove_reference<T>::type
64template <class _TypeT, bool = !__rw_is_void<_TypeT>::value
65 && !__rw_is_reference<_TypeT>::value,
66 bool = __rw_is_rvalue_reference<_TypeT>::value>
67struct __rw_add_lvalue_reference_impl
70 typedef _TypeT _C_type;
73template <
class _TypeT>
74struct __rw_add_lvalue_reference_impl<_TypeT,
true,
false>
78 typedef _TypeT& _C_type;
81template <
class _TypeT>
82struct __rw_add_lvalue_reference_impl<_TypeT,
false,
true>
86 typedef typename __rw_remove_reference<_TypeT>::type& _C_type;
89template <
class _TypeT>
90struct __rw_add_lvalue_reference
93 __rw_add_lvalue_reference_impl<_TypeT>::_C_type type;
96#define _RWSTD_ADD_LVALUE_REFERENCE(T) \
97 _RW::__rw_add_lvalue_reference<T>::type
100template <class _TypeT, bool = __rw_is_object<_TypeT>::value
101 || __rw_is_function<_TypeT>::_C_type>
102struct __rw_add_rvalue_reference_impl
105 typedef _TypeT _C_type;
108#ifndef _RWSTD_NO_RVALUE_REFERENCES
110template <
class _TypeT>
111struct __rw_add_rvalue_reference_impl<_TypeT,
true>
114 typedef _TypeT&& _C_type;
122template <
class _TypeT>
123struct __rw_add_rvalue_reference
126 __rw_add_rvalue_reference_impl<_TypeT>::_C_type type;
129#define _RWSTD_ADD_RVALUE_REFERENCE(T) \
130 _RW::__rw_add_rvalue_reference<T>::type
#define _RWSTD_NAMESPACE(name)