33#ifndef _RWSTD_RW_TUPLE_H_INCLUDED
34# define _RWSTD_RW_TUPLE_H_INCLUDED
45template <
class _TypeT>
46class reference_wrapper;
56# if !defined _RWSTD_NO_VARIADIC_TEMPLATES
58template <
class... _TypesT>
67template <
class _HeadT,
class... _TailT>
68class __rw_tuple<_HeadT, _TailT...>
69 :
public __rw_tuple<_TailT...>
71 typedef __rw_tuple<_TailT...> _Base;
78 : _Base (), _C_data () { }
80 __rw_tuple (
const __rw_tuple& __tuple)
81 : _Base (__tuple._C_tail ())
82 , _C_data (__tuple._C_data) { }
84 __rw_tuple& operator= (
const __rw_tuple& __tuple) {
85 _Base::operator= (__tuple._C_tail ());
86 _C_data = __tuple._C_data;
91 __rw_tuple (
const _HeadT& __head,
const _TailT&... __tail)
92 : _Base (__tail...), _C_data (__head) { }
94 template <
class _HeadU,
class... _TailU>
95 __rw_tuple (
const __rw_tuple<_HeadU, _TailU...>& __tuple)
96 : _Base (__tuple._C_tail ())
97 , _C_data (__tuple._C_head ()) { }
99 template <
class _HeadU,
class... _TailU>
100 __rw_tuple& operator= (
const __rw_tuple<_HeadU, _TailU...>& __tuple) {
101 _Base::operator= (__tuple._C_tail ());
102 _C_data = __tuple._C_head ();
106# if !defined _RWSTD_NO_RVALUE_REFERENCES
108 __rw_tuple (__rw_tuple&& __tuple)
109 : _Base (_STD::move<_Base&&> (__tuple._C_tail ()))
112 __rw_tuple& operator= (__rw_tuple&& __tuple) {
118 template <
class _HeadU,
class... _TailU>
119 explicit __rw_tuple (_HeadU&& __head, _TailU&&... __tail)
123 template <
class _HeadU,
class... _TailU>
124 __rw_tuple (__rw_tuple<_HeadU, _TailU...>&& __tuple)
128 template <
class _HeadU,
class... _TailU>
129 __rw_tuple& operator= (__rw_tuple<_HeadU, _TailU...>&& __tuple) {
130 _Base::operator= (
_RWSTD_MOVE (__tuple._C_tail ()));
137 template <
class _Alloc,
class... _TypesU>
138 __rw_tuple (_STD::allocator_arg_t,
const _Alloc& __alloc,
139 const _TypesU&&... __values);
141 template <
class _Alloc>
142 __rw_tuple (_STD::allocator_arg_t,
const _Alloc& __alloc,
143 __rw_tuple&& __tuple);
145 template <
class _Alloc,
class... _TypesU>
146 __rw_tuple (_STD::allocator_arg_t,
const _Alloc& __alloc,
147 __rw_tuple<_TypesU...>&& __tuple);
151 template <
class _Alloc>
152 __rw_tuple (_STD::allocator_arg_t,
const _Alloc& __alloc);
154 template <
class _Alloc>
155 __rw_tuple (_STD::allocator_arg_t,
const _Alloc& __alloc,
156 const _HeadT& __head,
const _TailT&... __tail);
158 template <
class _Alloc>
159 __rw_tuple (_STD::allocator_arg_t,
const _Alloc& __alloc,
160 const __rw_tuple& __tuple);
162 template <
class _Alloc,
class... _TypesU>
163 __rw_tuple (_STD::allocator_arg_t,
const _Alloc& __alloc,
164 const __rw_tuple<_TypesU...>& __tuple);
168 _HeadT& _C_head () {
return _C_data; }
169 const _HeadT& _C_head ()
const {
return _C_data; }
171 _Base& _C_tail () {
return *
this; }
172 const _Base& _C_tail ()
const {
return *
this; }
179 template <
class _TypeT>
180 void operator= (
const _TypeT&)
const {}
184template <
class _TypeT>
185struct __rw_deduce_ref
187 typedef _TypeT _C_type;
190template <
class _TypeT>
191struct __rw_deduce_ref<
_STD::reference_wrapper<_TypeT> >
193 typedef _TypeT& _C_type;
196template <
class _TypeT>
197struct __rw_deduce_ref<const
_STD::reference_wrapper<_TypeT> >
199 typedef _TypeT& _C_type;
202template <
class _TypeT>
203struct __rw_make_tuple
206 typedef typename __rw_deduce_ref<_C_decay>::_C_type _C_type;
210template <
class... _TypesT,
class... _TypesU>
211bool operator== (
const __rw_tuple<_TypesT...>& __x,
212 const __rw_tuple<_TypesU...>& __y) {
213 return (__x._C_head () == __y._C_head ())
214 && (__x._C_tail () == __y._C_tail ());
219 const __rw_tuple<>& ) {
223template <
class... _TypesT,
class... _TypesU>
224bool operator< (
const __rw_tuple<_TypesT...>& __x,
225 const __rw_tuple<_TypesU...>& __y) {
226 return (__x._C_head () < __y._C_head ())
227 || ( !(__y._C_head () < __x._C_head ())
228 && (__x._C_tail () < __y._C_tail ()));
233 const __rw_tuple<>& ) {
#define _RWSTD_SPECIALIZED_CLASS
#define _RWSTD_NAMESPACE(name)
#define _RWSTD_SPECIALIZED_FUNCTION
#define _RWSTD_FORWARD(_TypeT, __x)
bool operator==(const json_pointer< RefStringTypeLhs > &lhs, const json_pointer< RefStringTypeRhs > &rhs) noexcept
bool operator<(const json_pointer< RefStringTypeLhs > &lhs, const json_pointer< RefStringTypeRhs > &rhs) noexcept