Commit a30036b2 by Chris Jefferson Committed by Benjamin Kosnik

re PR libstdc++/18159 (tr1/tuple is broken on darwin)


2004-10-28  Chris Jefferson  <chris@bubblescope.net>

	PR libstdc++/18159
	* include/tr1/tuple: Fix, change formatting.

From-SVN: r89782
parent 859ee18f
2004-10-28 Chris Jefferson <chris@bubblescope.net>
PR libstdc++/18159
* include/tr1/tuple: Fix, change formatting.
2004-10-28 Benjamin Kosnik <bkoz@redhat.com> 2004-10-28 Benjamin Kosnik <bkoz@redhat.com>
* include/ext/mt_allocator.h (__common_pool_policy): Add template * include/ext/mt_allocator.h (__common_pool_policy): Add template
......
...@@ -36,1372 +36,1399 @@ namespace tr1 ...@@ -36,1372 +36,1399 @@ namespace tr1
struct _NullClass { }; struct _NullClass { };
// Foward definition of the tuple class // Foward definition of the tuple class
template<typename _T0 = _NullClass, typename _T1 = _NullClass, template<typename _Tp0 = _NullClass, typename _Tp1 = _NullClass,
typename _T2 = _NullClass, typename _T3 = _NullClass, typename _Tp2 = _NullClass, typename _Tp3 = _NullClass,
typename _T4 = _NullClass, typename _T5 = _NullClass, typename _Tp4 = _NullClass, typename _Tp5 = _NullClass,
typename _T6 = _NullClass, typename _T7 = _NullClass, typename _Tp6 = _NullClass, typename _Tp7 = _NullClass,
typename _T8 = _NullClass, typename _T9 = _NullClass> typename _Tp8 = _NullClass, typename _Tp9 = _NullClass>
class tuple; class tuple;
// Gives the type of the ith element of a given tuple type. // Gives the type of the ith element of a given tuple type.
template<int __i, typename _T> template<int __i, typename _Tp>
struct tuple_element; struct tuple_element;
template<typename _T0, typename _T1, typename _T2, typename _T3, template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3,
typename _T4, typename _T5, typename _T6, typename _T7, typename _Tp4, typename _Tp5, typename _Tp6, typename _Tp7,
typename _T8, typename _T9> typename _Tp8, typename _Tp9>
struct tuple_element<0, tuple<_T0, _T1, _T2, _T3, _T4, _T5, _T6, struct tuple_element<0, tuple<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5, _Tp6,
_T7, _T8, _T9> > _Tp7, _Tp8, _Tp9> >
{ typedef _T0 type; }; { typedef _Tp0 type; };
template<typename _T0, typename _T1, typename _T2, typename _T3, template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3,
typename _T4, typename _T5, typename _T6, typename _T7, typename _Tp4, typename _Tp5, typename _Tp6, typename _Tp7,
typename _T8, typename _T9> typename _Tp8, typename _Tp9>
struct tuple_element<1, tuple<_T0, _T1, _T2, _T3, _T4, _T5, _T6, struct tuple_element<1, tuple<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5, _Tp6,
_T7, _T8, _T9> > _Tp7, _Tp8, _Tp9> >
{ typedef _T1 type; }; { typedef _Tp1 type; };
template<typename _T0, typename _T1, typename _T2, typename _T3, template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3,
typename _T4, typename _T5, typename _T6, typename _T7, typename _Tp4, typename _Tp5, typename _Tp6, typename _Tp7,
typename _T8, typename _T9> typename _Tp8, typename _Tp9>
struct tuple_element<2, tuple<_T0, _T1, _T2, _T3, _T4, _T5, _T6, struct tuple_element<2, tuple<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5, _Tp6,
_T7, _T8, _T9> > _Tp7, _Tp8, _Tp9> >
{ typedef _T2 type; }; { typedef _Tp2 type; };
template<typename _T0, typename _T1, typename _T2, typename _T3, template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3,
typename _T4, typename _T5, typename _T6, typename _T7, typename _Tp4, typename _Tp5, typename _Tp6, typename _Tp7,
typename _T8, typename _T9> typename _Tp8, typename _Tp9>
struct tuple_element<3, tuple<_T0, _T1, _T2, _T3, _T4, _T5, _T6, struct tuple_element<3, tuple<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5, _Tp6,
_T7, _T8, _T9> > _Tp7, _Tp8, _Tp9> >
{ typedef _T3 type; }; { typedef _Tp3 type; };
template<typename _T0, typename _T1, typename _T2, typename _T3, template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3,
typename _T4, typename _T5, typename _T6, typename _T7, typename _Tp4, typename _Tp5, typename _Tp6, typename _Tp7,
typename _T8, typename _T9> typename _Tp8, typename _Tp9>
struct tuple_element<4, tuple<_T0, _T1, _T2, _T3, _T4, _T5, _T6, struct tuple_element<4, tuple<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5, _Tp6,
_T7, _T8, _T9> > _Tp7, _Tp8, _Tp9> >
{ typedef _T4 type; }; { typedef _Tp4 type; };
template<typename _T0, typename _T1, typename _T2, typename _T3, template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3,
typename _T4, typename _T5, typename _T6, typename _T7, typename _Tp4, typename _Tp5, typename _Tp6, typename _Tp7,
typename _T8, typename _T9> typename _Tp8, typename _Tp9>
struct tuple_element<5, tuple<_T0, _T1, _T2, _T3, _T4, _T5, _T6, struct tuple_element<5, tuple<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5, _Tp6,
_T7, _T8, _T9> > _Tp7, _Tp8, _Tp9> >
{ typedef _T5 type; }; { typedef _Tp5 type; };
template<typename _T0, typename _T1, typename _T2, typename _T3, template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3,
typename _T4, typename _T5, typename _T6, typename _T7, typename _Tp4, typename _Tp5, typename _Tp6, typename _Tp7,
typename _T8, typename _T9> typename _Tp8, typename _Tp9>
struct tuple_element<6, tuple<_T0, _T1, _T2, _T3, _T4, _T5, _T6, struct tuple_element<6, tuple<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5, _Tp6,
_T7, _T8, _T9> > _Tp7, _Tp8, _Tp9> >
{ typedef _T6 type; }; { typedef _Tp6 type; };
template<typename _T0, typename _T1, typename _T2, typename _T3, template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3,
typename _T4, typename _T5, typename _T6, typename _T7, typename _Tp4, typename _Tp5, typename _Tp6, typename _Tp7,
typename _T8, typename _T9> typename _Tp8, typename _Tp9>
struct tuple_element<7, tuple<_T0, _T1, _T2, _T3, _T4, _T5, _T6, struct tuple_element<7, tuple<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5, _Tp6,
_T7, _T8, _T9> > _Tp7, _Tp8, _Tp9> >
{ typedef _T7 type; }; { typedef _Tp7 type; };
template<typename _T0, typename _T1, typename _T2, typename _T3, template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3,
typename _T4, typename _T5, typename _T6, typename _T7, typename _Tp4, typename _Tp5, typename _Tp6, typename _Tp7,
typename _T8, typename _T9> typename _Tp8, typename _Tp9>
struct tuple_element<8, tuple<_T0, _T1, _T2, _T3, _T4, _T5, _T6, struct tuple_element<8, tuple<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5, _Tp6,
_T7, _T8, _T9> > _Tp7, _Tp8, _Tp9> >
{ typedef _T8 type; }; { typedef _Tp8 type; };
template<typename _T0, typename _T1, typename _T2, typename _T3, template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3,
typename _T4, typename _T5, typename _T6, typename _T7, typename _Tp4, typename _Tp5, typename _Tp6, typename _Tp7,
typename _T8, typename _T9> typename _Tp8, typename _Tp9>
struct tuple_element<9, tuple<_T0, _T1, _T2, _T3, _T4, _T5, _T6, struct tuple_element<9, tuple<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5, _Tp6,
_T7, _T8, _T9> > _Tp7, _Tp8, _Tp9> >
{ typedef _T9 type; }; { typedef _Tp9 type; };
// Finds the size of a given tuple type. // Finds the size of a given tuple type.
// NB: Can't this be done via value->type conversions in the generic template<typename _Tp>
// tuple class, say with an enum?
template<typename _T>
struct tuple_size; struct tuple_size;
template<> template<>
struct tuple_size<tuple<_NullClass, _NullClass, _NullClass, _NullClass, struct tuple_size<tuple<_NullClass, _NullClass, _NullClass, _NullClass,
_NullClass, _NullClass, _NullClass, _NullClass, _NullClass, _NullClass, _NullClass, _NullClass,
_NullClass, _NullClass> > _NullClass, _NullClass> >
{ static const int value = 0; }; { static const int value = 0; };
template<typename _T0> template< typename _Tp0>
struct tuple_size<tuple<_T0, _NullClass, _NullClass, _NullClass, struct tuple_size<tuple< _Tp0, _NullClass, _NullClass, _NullClass,
_NullClass, _NullClass, _NullClass, _NullClass, _NullClass, _NullClass, _NullClass, _NullClass,
_NullClass, _NullClass> > _NullClass, _NullClass> >
{ static const int value = 1; }; { static const int value = 1; };
template<typename _T0, typename _T1> template<typename _Tp0, typename _Tp1>
struct tuple_size<tuple<_T0, _T1, _NullClass, _NullClass, _NullClass, struct tuple_size<tuple<_Tp0, _Tp1, _NullClass, _NullClass, _NullClass,
_NullClass, _NullClass, _NullClass, _NullClass, _NullClass, _NullClass, _NullClass, _NullClass,
_NullClass> > _NullClass> >
{ static const int value = 2; }; { static const int value = 2; };
template<typename _T0, typename _T1, typename _T2> template<typename _Tp0, typename _Tp1, typename _Tp2>
struct tuple_size<tuple<_T0, _T1, _T2, _NullClass, _NullClass, struct tuple_size<tuple<_Tp0, _Tp1, _Tp2, _NullClass, _NullClass,
_NullClass, _NullClass, _NullClass, _NullClass, _NullClass, _NullClass, _NullClass, _NullClass,
_NullClass> > _NullClass> >
{ static const int value = 3; }; { static const int value = 3; };
template<typename _T0, typename _T1, typename _T2, typename _T3> template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3>
struct tuple_size<tuple<_T0, _T1, _T2, _T3, _NullClass, _NullClass, struct tuple_size<tuple<_Tp0, _Tp1, _Tp2, _Tp3, _NullClass, _NullClass,
_NullClass, _NullClass, _NullClass, _NullClass> > _NullClass, _NullClass, _NullClass, _NullClass> >
{ static const int value = 4; }; { static const int value = 4; };
template<typename _T0, typename _T1, typename _T2, typename _T3, template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3,
typename _T4> typename _Tp4>
struct tuple_size<tuple<_T0, _T1, _T2, _T3, _T4, _NullClass, struct tuple_size<tuple<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _NullClass,
_NullClass, _NullClass, _NullClass, _NullClass> > _NullClass, _NullClass, _NullClass, _NullClass> >
{ static const int value = 5; }; { static const int value = 5; };
template<typename _T0, typename _T1, typename _T2, typename _T3, template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3,
typename _T4, typename _T5> typename _Tp4, typename _Tp5>
struct tuple_size<tuple<_T0, _T1, _T2, _T3, _T4, _T5, _NullClass, struct tuple_size<tuple<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5, _NullClass,
_NullClass, _NullClass, _NullClass> > _NullClass, _NullClass, _NullClass> >
{ static const int value = 6; }; { static const int value = 6; };
template<typename _T0, typename _T1, typename _T2, typename _T3, template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3,
typename _T4, typename _T5, typename _T6> typename _Tp4, typename _Tp5, typename _Tp6>
struct tuple_size<tuple<_T0, _T1, _T2, _T3, _T4, _T5, _T6, struct tuple_size<tuple<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5, _Tp6,
_NullClass, _NullClass, _NullClass> > _NullClass, _NullClass, _NullClass> >
{ static const int value = 7; }; { static const int value = 7; };
template<typename _T0, typename _T1, typename _T2, typename _T3, template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3,
typename _T4, typename _T5, typename _T6, typename _T7> typename _Tp4, typename _Tp5, typename _Tp6, typename _Tp7>
struct tuple_size<tuple<_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, struct tuple_size<tuple<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5, _Tp6, _Tp7,
_NullClass, _NullClass> > _NullClass, _NullClass> >
{ static const int value = 8; }; { static const int value = 8; };
template<typename _T0, typename _T1, typename _T2, typename _T3, template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3,
typename _T4, typename _T5, typename _T6, typename _T7, typename _Tp4, typename _Tp5, typename _Tp6, typename _Tp7,
typename _T8> typename _Tp8>
struct tuple_size<tuple<_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, struct tuple_size<tuple<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5, _Tp6, _Tp7,
_T8, _NullClass> > _Tp8, _NullClass> >
{ static const int value = 9; }; { static const int value = 9; };
template<typename _T0, typename _T1, typename _T2, typename _T3, template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3,
typename _T4, typename _T5, typename _T6, typename _T7, typename _Tp4, typename _Tp5, typename _Tp6, typename _Tp7,
typename _T8, typename _T9> typename _Tp8, typename _Tp9>
struct tuple_size<tuple<_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, struct tuple_size<tuple<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5, _Tp6, _Tp7,
_T8, _T9> > _Tp8, _Tp9> >
{ static const int value = 10; }; { static const int value = 10; };
// Adds a const reference to a non-reference type. // Adds a const reference to a non-reference type.
template<typename _T> template<typename _Tp>
struct __add_const_ref struct __add_c_ref
{ typedef const _T& type; }; { typedef const _Tp& type; };
template<typename _T> template<typename _Tp>
struct __add_const_ref<_T&> struct __add_c_ref<_Tp&>
{ typedef _T& type; }; { typedef _Tp& type; };
// Adds a reference to a non-reference type. // Adds a reference to a non-reference type.
template<typename _T> template<typename _Tp>
struct __add_ref struct __add_ref
{ typedef _T& type; }; { typedef _Tp& type; };
template<typename _T> template<typename _Tp>
struct __add_ref<_T&> struct __add_ref<_Tp&>
{ typedef _T& type; }; { typedef _Tp& type; };
// The empty tuple. // The empty tuple.
template<> template<>
class tuple<_NullClass, _NullClass, _NullClass, _NullClass, _NullClass, class tuple<_NullClass, _NullClass, _NullClass, _NullClass, _NullClass,
_NullClass, _NullClass, _NullClass, _NullClass, _NullClass> _NullClass, _NullClass, _NullClass, _NullClass, _NullClass>
{ {
public: public:
tuple() tuple()
{ } { }
tuple(const tuple& __in) tuple(const tuple& __in)
{ } { }
tuple& operator=(const tuple& __in) tuple& operator=(const tuple& __in)
{ return *this; } { return *this; }
}; };
template<typename _T0> template< typename _Tp0>
class tuple<_T0, _NullClass, _NullClass, _NullClass, _NullClass, class tuple< _Tp0, _NullClass, _NullClass, _NullClass, _NullClass,
_NullClass, _NullClass, _NullClass, _NullClass, _NullClass> _NullClass, _NullClass, _NullClass, _NullClass, _NullClass>
{ {
_T0 __t0; _Tp0 _M_t0;
public: public:
tuple() tuple()
{ } { }
explicit tuple(typename __add_const_ref<_T0>::type __in0): explicit tuple( typename __add_c_ref<_Tp0>::type __in0):
__t0(__in0) _M_t0(__in0)
{ } { }
tuple(const tuple& __in): tuple(const tuple& __in):
__t0(__in.__t0) _M_t0(__in._M_t0)
{ } { }
template <typename _U0>
tuple(const tuple<_U0>& __in): template< typename _Up0>
__t0(__in.__t0) tuple(const tuple< _Up0>& __in):
{ } _M_t0(__in._M_t0)
{ }
tuple& operator=(const tuple& __in)
{ tuple&
__t0=__in.__t0; operator=(const tuple& __in)
return *this; {
} _M_t0=__in._M_t0;
return *this;
template <typename _U0> }
tuple&
operator=(const tuple<_U0>& __in) template< typename _Up0>
{ tuple&
__t0=__in.__t0; operator=(const tuple< _Up0>& __in)
return *this; {
} _M_t0=__in._M_t0;
template<int __i, typename _U> return *this;
friend class __get_helper; }
template<typename, typename, typename, typename, typename, typename,
typename, typename, typename, typename> template<int __i, typename _Up>
friend class tuple; friend class __get_helper;
template<typename, typename, typename, typename, typename, typename,
typename, typename, typename, typename>
friend class tuple;
}; };
template<typename _T0, typename _T1> template<typename _Tp0, typename _Tp1>
class tuple<_T0, _T1, _NullClass, _NullClass, _NullClass, _NullClass, class tuple<_Tp0, _Tp1, _NullClass, _NullClass, _NullClass, _NullClass,
_NullClass, _NullClass, _NullClass, _NullClass> _NullClass, _NullClass, _NullClass, _NullClass>
{
_T0 __t0;
_T1 __t1;
public:
tuple()
{ }
explicit tuple(typename __add_const_ref<_T0>::type __in0,
typename __add_const_ref<_T1>::type __in1):
__t0(__in0), __t1(__in1)
{ }
tuple(const tuple& __in):
__t0(__in.__t0), __t1(__in.__t1)
{ }
template <typename _U0, typename _U1>
tuple(const tuple<_U0, _U1>& __in):
__t0(__in.__t0), __t1(__in.__t1)
{ }
template<class _U1, class _U2>
tuple(const std::pair<_U1, _U2>& __u): __t0(__u.first), __t1(__u.second)
{ }
tuple& operator=(const tuple& __in)
{
__t0=__in.__t0;
__t1=__in.__t1;
return *this;
}
template <typename _U0, typename _U1>
tuple&
operator=(const tuple<_U0, _U1>& __in)
{ {
__t0=__in.__t0; _Tp0 _M_t0;
__t1=__in.__t1; _Tp1 _M_t1;
return *this;
} public:
template<int __i, typename _U> tuple()
friend class __get_helper; { }
template<typename, typename, typename, typename, typename, typename,
typename, typename, typename, typename> explicit tuple(typename __add_c_ref<_Tp0>::type __in0,
friend class tuple; typename __add_c_ref<_Tp1>::type __in1):
_M_t0(__in0), _M_t1(__in1)
{ }
tuple(const tuple& __in):
_M_t0(__in._M_t0), _M_t1(__in._M_t1)
{ }
template<typename _Up0, typename _Up1>
tuple(const tuple<_Up0, _Up1>& __in):
_M_t0(__in._M_t0), _M_t1(__in._M_t1)
{ }
template<class _Up1, class _Up2>
tuple(const std::pair<_Up1, _Up2>& __u):
_M_t0(__u.first), _M_t1(__u.second)
{ }
tuple&
operator=(const tuple& __in)
{
_M_t0=__in._M_t0;
_M_t1=__in._M_t1;
return *this;
}
template<typename _Up0, typename _Up1>
tuple&
operator=(const tuple<_Up0, _Up1>& __in)
{
_M_t0=__in._M_t0;
_M_t1=__in._M_t1;
return *this;
}
template<int __i, typename _Up>
friend class __get_helper;
template<typename, typename, typename, typename, typename, typename,
typename, typename, typename, typename>
friend class tuple;
}; };
template<typename _T0, typename _T1, typename _T2> template<typename _Tp0, typename _Tp1, typename _Tp2>
class tuple<_T0, _T1, _T2, _NullClass, _NullClass, _NullClass, class tuple<_Tp0, _Tp1, _Tp2, _NullClass, _NullClass, _NullClass,
_NullClass, _NullClass, _NullClass, _NullClass> _NullClass, _NullClass, _NullClass, _NullClass>
{
_T0 __t0;
_T1 __t1;
_T2 __t2;
public:
tuple()
{ }
explicit tuple(typename __add_const_ref<_T0>::type __in0,
typename __add_const_ref<_T1>::type __in1,
typename __add_const_ref<_T2>::type __in2):
__t0(__in0), __t1(__in1), __t2(__in2)
{ }
tuple(const tuple& __in):
__t0(__in.__t0), __t1(__in.__t1), __t2(__in.__t2)
{ }
template <typename _U0, typename _U1, typename _U2>
tuple(const tuple<_U0, _U1, _U2>& __in):
__t0(__in.__t0), __t1(__in.__t1), __t2(__in.__t2)
{ }
tuple& operator=(const tuple& __in)
{
__t0=__in.__t0;
__t1=__in.__t1;
__t2=__in.__t2;
return *this;
}
template <typename _U0, typename _U1, typename _U2>
tuple&
operator=(const tuple<_U0, _U1, _U2>& __in)
{ {
__t0=__in.__t0; _Tp0 _M_t0;
__t1=__in.__t1; _Tp1 _M_t1;
__t2=__in.__t2; _Tp2 _M_t2;
return *this;
} public:
template<int __i, typename _U> tuple()
friend class __get_helper; { }
template<typename, typename, typename, typename, typename, typename,
typename, typename, typename, typename> explicit tuple(typename __add_c_ref<_Tp0>::type __in0,
friend class tuple; typename __add_c_ref<_Tp1>::type __in1,
typename __add_c_ref<_Tp2>::type __in2):
_M_t0(__in0), _M_t1(__in1), _M_t2(__in2)
{ }
tuple(const tuple& __in):
_M_t0(__in._M_t0), _M_t1(__in._M_t1), _M_t2(__in._M_t2)
{ }
template<typename _Up0, typename _Up1, typename _Up2>
tuple(const tuple<_Up0, _Up1, _Up2>& __in):
_M_t0(__in._M_t0), _M_t1(__in._M_t1), _M_t2(__in._M_t2)
{ }
tuple&
operator=(const tuple& __in)
{
_M_t0=__in._M_t0;
_M_t1=__in._M_t1;
_M_t2=__in._M_t2;
return *this;
}
template<typename _Up0, typename _Up1, typename _Up2>
tuple&
operator=(const tuple<_Up0, _Up1, _Up2>& __in)
{
_M_t0=__in._M_t0;
_M_t1=__in._M_t1;
_M_t2=__in._M_t2;
return *this;
}
template<int __i, typename _Up>
friend class __get_helper;
template<typename, typename, typename, typename, typename, typename,
typename, typename, typename, typename>
friend class tuple;
}; };
template<typename _T0, typename _T1, typename _T2, typename _T3> template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3>
class tuple<_T0, _T1, _T2, _T3, _NullClass, _NullClass, _NullClass, class tuple<_Tp0, _Tp1, _Tp2, _Tp3, _NullClass, _NullClass, _NullClass,
_NullClass, _NullClass, _NullClass> _NullClass, _NullClass, _NullClass>
{
_T0 __t0;
_T1 __t1;
_T2 __t2;
_T3 __t3;
public:
tuple()
{ }
explicit tuple(typename __add_const_ref<_T0>::type __in0,
typename __add_const_ref<_T1>::type __in1,
typename __add_const_ref<_T2>::type __in2,
typename __add_const_ref<_T3>::type __in3):
__t0(__in0), __t1(__in1), __t2(__in2), __t3(__in3)
{ }
tuple(const tuple& __in):
__t0(__in.__t0), __t1(__in.__t1), __t2(__in.__t2),
__t3(__in.__t3)
{ }
template <typename _U0, typename _U1, typename _U2, typename _U3>
tuple(const tuple<_U0, _U1, _U2, _U3>& __in):
__t0(__in.__t0), __t1(__in.__t1), __t2(__in.__t2),
__t3(__in.__t3)
{ }
tuple& operator=(const tuple& __in)
{
__t0=__in.__t0;
__t1=__in.__t1;
__t2=__in.__t2;
__t3=__in.__t3;
return *this;
}
template <typename _U0, typename _U1, typename _U2, typename _U3>
tuple&
operator=(const tuple<_U0, _U1, _U2, _U3>& __in)
{ {
__t0=__in.__t0; _Tp0 _M_t0;
__t1=__in.__t1; _Tp1 _M_t1;
__t2=__in.__t2; _Tp2 _M_t2;
__t3=__in.__t3; _Tp3 _M_t3;
return *this;
} public:
template<int __i, typename _U> tuple()
friend class __get_helper; { }
template<typename, typename, typename, typename, typename, typename,
typename, typename, typename, typename> explicit tuple(typename __add_c_ref<_Tp0>::type __in0,
friend class tuple; typename __add_c_ref<_Tp1>::type __in1,
typename __add_c_ref<_Tp2>::type __in2,
typename __add_c_ref<_Tp3>::type __in3):
_M_t0(__in0), _M_t1(__in1), _M_t2(__in2), _M_t3(__in3)
{ }
tuple(const tuple& __in):
_M_t0(__in._M_t0), _M_t1(__in._M_t1), _M_t2(__in._M_t2),
_M_t3(__in._M_t3)
{ }
template<typename _Up0, typename _Up1, typename _Up2, typename _Up3>
tuple(const tuple<_Up0, _Up1, _Up2, _Up3>& __in):
_M_t0(__in._M_t0), _M_t1(__in._M_t1), _M_t2(__in._M_t2),
_M_t3(__in._M_t3)
{ }
tuple&
operator=(const tuple& __in)
{
_M_t0=__in._M_t0;
_M_t1=__in._M_t1;
_M_t2=__in._M_t2;
_M_t3=__in._M_t3;
return *this;
}
template<typename _Up0, typename _Up1, typename _Up2, typename _Up3>
tuple&
operator=(const tuple<_Up0, _Up1, _Up2, _Up3>& __in)
{
_M_t0=__in._M_t0;
_M_t1=__in._M_t1;
_M_t2=__in._M_t2;
_M_t3=__in._M_t3;
return *this;
}
template<int __i, typename _Up>
friend class __get_helper;
template<typename, typename, typename, typename, typename, typename,
typename, typename, typename, typename>
friend class tuple;
}; };
template<typename _T0, typename _T1, typename _T2, typename _T3, template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3,
typename _T4> typename _Tp4>
class tuple<_T0, _T1, _T2, _T3, _T4, _NullClass, _NullClass, class tuple<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _NullClass, _NullClass,
_NullClass, _NullClass, _NullClass> _NullClass, _NullClass, _NullClass>
{
_T0 __t0;
_T1 __t1;
_T2 __t2;
_T3 __t3;
_T4 __t4;
public:
tuple()
{ }
explicit tuple(typename __add_const_ref<_T0>::type __in0,
typename __add_const_ref<_T1>::type __in1,
typename __add_const_ref<_T2>::type __in2,
typename __add_const_ref<_T3>::type __in3,
typename __add_const_ref<_T4>::type __in4):
__t0(__in0), __t1(__in1), __t2(__in2), __t3(__in3),
__t4(__in4)
{ }
tuple(const tuple& __in):
__t0(__in.__t0), __t1(__in.__t1), __t2(__in.__t2),
__t3(__in.__t3), __t4(__in.__t4)
{ }
template <typename _U0, typename _U1, typename _U2, typename _U3,
typename _U4>
tuple(const tuple<_U0, _U1, _U2, _U3, _U4>& __in):
__t0(__in.__t0), __t1(__in.__t1), __t2(__in.__t2),
__t3(__in.__t3), __t4(__in.__t4)
{ }
tuple& operator=(const tuple& __in)
{
__t0=__in.__t0;
__t1=__in.__t1;
__t2=__in.__t2;
__t3=__in.__t3;
__t4=__in.__t4;
return *this;
}
template <typename _U0, typename _U1, typename _U2, typename _U3,
typename _U4>
tuple&
operator=(const tuple<_U0, _U1, _U2, _U3, _U4>& __in)
{ {
__t0=__in.__t0; _Tp0 _M_t0;
__t1=__in.__t1; _Tp1 _M_t1;
__t2=__in.__t2; _Tp2 _M_t2;
__t3=__in.__t3; _Tp3 _M_t3;
__t4=__in.__t4; _Tp4 _M_t4;
return *this;
} public:
template<int __i, typename _U> tuple()
friend class __get_helper; { }
template<typename, typename, typename, typename, typename, typename,
typename, typename, typename, typename> explicit tuple(typename __add_c_ref<_Tp0>::type __in0,
friend class tuple; typename __add_c_ref<_Tp1>::type __in1,
typename __add_c_ref<_Tp2>::type __in2,
typename __add_c_ref<_Tp3>::type __in3,
typename __add_c_ref<_Tp4>::type __in4):
_M_t0(__in0), _M_t1(__in1), _M_t2(__in2), _M_t3(__in3), _M_t4(__in4)
{ }
tuple(const tuple& __in):
_M_t0(__in._M_t0), _M_t1(__in._M_t1), _M_t2(__in._M_t2),
_M_t3(__in._M_t3), _M_t4(__in._M_t4)
{ }
template<typename _Up0, typename _Up1, typename _Up2, typename _Up3,
typename _Up4>
tuple(const tuple<_Up0, _Up1, _Up2, _Up3, _Up4>& __in):
_M_t0(__in._M_t0), _M_t1(__in._M_t1), _M_t2(__in._M_t2),
_M_t3(__in._M_t3), _M_t4(__in._M_t4)
{ }
tuple&
operator=(const tuple& __in)
{
_M_t0=__in._M_t0;
_M_t1=__in._M_t1;
_M_t2=__in._M_t2;
_M_t3=__in._M_t3;
_M_t4=__in._M_t4;
return *this;
}
template<typename _Up0, typename _Up1, typename _Up2, typename _Up3,
typename _Up4>
tuple&
operator=(const tuple<_Up0, _Up1, _Up2, _Up3, _Up4>& __in)
{
_M_t0=__in._M_t0;
_M_t1=__in._M_t1;
_M_t2=__in._M_t2;
_M_t3=__in._M_t3;
_M_t4=__in._M_t4;
return *this;
}
template<int __i, typename _Up>
friend class __get_helper;
template<typename, typename, typename, typename, typename, typename,
typename, typename, typename, typename>
friend class tuple;
}; };
template<typename _T0, typename _T1, typename _T2, typename _T3, template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3,
typename _T4, typename _T5> typename _Tp4, typename _Tp5>
class tuple<_T0, _T1, _T2, _T3, _T4, _T5, _NullClass, _NullClass, class tuple<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5, _NullClass, _NullClass,
_NullClass, _NullClass> _NullClass, _NullClass>
{
_T0 __t0;
_T1 __t1;
_T2 __t2;
_T3 __t3;
_T4 __t4;
_T5 __t5;
public:
tuple()
{ }
explicit tuple(typename __add_const_ref<_T0>::type __in0,
typename __add_const_ref<_T1>::type __in1,
typename __add_const_ref<_T2>::type __in2,
typename __add_const_ref<_T3>::type __in3,
typename __add_const_ref<_T4>::type __in4,
typename __add_const_ref<_T5>::type __in5):
__t0(__in0), __t1(__in1), __t2(__in2), __t3(__in3),
__t4(__in4), __t5(__in5)
{ }
tuple(const tuple& __in):
__t0(__in.__t0), __t1(__in.__t1), __t2(__in.__t2),
__t3(__in.__t3), __t4(__in.__t4), __t5(__in.__t5)
{ }
template <typename _U0, typename _U1, typename _U2, typename _U3,
typename _U4, typename _U5>
tuple(const tuple<_U0, _U1, _U2, _U3, _U4, _U5>& __in):
__t0(__in.__t0), __t1(__in.__t1), __t2(__in.__t2),
__t3(__in.__t3), __t4(__in.__t4), __t5(__in.__t5)
{ }
tuple& operator=(const tuple& __in)
{
__t0=__in.__t0;
__t1=__in.__t1;
__t2=__in.__t2;
__t3=__in.__t3;
__t4=__in.__t4;
__t5=__in.__t5;
return *this;
}
template <typename _U0, typename _U1, typename _U2, typename _U3,
typename _U4, typename _U5>
tuple&
operator=(const tuple<_U0, _U1, _U2, _U3, _U4, _U5>& __in)
{ {
__t0=__in.__t0; _Tp0 _M_t0;
__t1=__in.__t1; _Tp1 _M_t1;
__t2=__in.__t2; _Tp2 _M_t2;
__t3=__in.__t3; _Tp3 _M_t3;
__t4=__in.__t4; _Tp4 _M_t4;
__t5=__in.__t5; _Tp5 _M_t5;
return *this;
} public:
template<int __i, typename _U> tuple()
friend class __get_helper; { }
template<typename, typename, typename, typename, typename, typename,
typename, typename, typename, typename> explicit tuple(typename __add_c_ref<_Tp0>::type __in0,
friend class tuple; typename __add_c_ref<_Tp1>::type __in1,
typename __add_c_ref<_Tp2>::type __in2,
typename __add_c_ref<_Tp3>::type __in3,
typename __add_c_ref<_Tp4>::type __in4,
typename __add_c_ref<_Tp5>::type __in5):
_M_t0(__in0), _M_t1(__in1), _M_t2(__in2), _M_t3(__in3), _M_t4(__in4),
_M_t5(__in5)
{ }
tuple(const tuple& __in):
_M_t0(__in._M_t0), _M_t1(__in._M_t1), _M_t2(__in._M_t2),
_M_t3(__in._M_t3), _M_t4(__in._M_t4), _M_t5(__in._M_t5)
{ }
template<typename _Up0, typename _Up1, typename _Up2, typename _Up3,
typename _Up4, typename _Up5>
tuple(const tuple<_Up0, _Up1, _Up2, _Up3, _Up4, _Up5>& __in):
_M_t0(__in._M_t0), _M_t1(__in._M_t1), _M_t2(__in._M_t2),
_M_t3(__in._M_t3), _M_t4(__in._M_t4), _M_t5(__in._M_t5)
{ }
tuple&
operator=(const tuple& __in)
{
_M_t0=__in._M_t0;
_M_t1=__in._M_t1;
_M_t2=__in._M_t2;
_M_t3=__in._M_t3;
_M_t4=__in._M_t4;
_M_t5=__in._M_t5;
return *this;
}
template<typename _Up0, typename _Up1, typename _Up2, typename _Up3,
typename _Up4, typename _Up5>
tuple&
operator=(const tuple<_Up0, _Up1, _Up2, _Up3, _Up4, _Up5>& __in)
{
_M_t0=__in._M_t0;
_M_t1=__in._M_t1;
_M_t2=__in._M_t2;
_M_t3=__in._M_t3;
_M_t4=__in._M_t4;
_M_t5=__in._M_t5;
return *this;
}
template<int __i, typename _Up>
friend class __get_helper;
template<typename, typename, typename, typename, typename, typename,
typename, typename, typename, typename>
friend class tuple;
}; };
template<typename _T0, typename _T1, typename _T2, typename _T3, template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3,
typename _T4, typename _T5, typename _T6> typename _Tp4, typename _Tp5, typename _Tp6>
class tuple<_T0, _T1, _T2, _T3, _T4, _T5, _T6, _NullClass, class tuple<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5, _Tp6, _NullClass,
_NullClass, _NullClass> _NullClass, _NullClass>
{
_T0 __t0;
_T1 __t1;
_T2 __t2;
_T3 __t3;
_T4 __t4;
_T5 __t5;
_T6 __t6;
public:
tuple()
{ }
explicit tuple(typename __add_const_ref<_T0>::type __in0,
typename __add_const_ref<_T1>::type __in1,
typename __add_const_ref<_T2>::type __in2,
typename __add_const_ref<_T3>::type __in3,
typename __add_const_ref<_T4>::type __in4,
typename __add_const_ref<_T5>::type __in5,
typename __add_const_ref<_T6>::type __in6):
__t0(__in0), __t1(__in1), __t2(__in2), __t3(__in3),
__t4(__in4), __t5(__in5), __t6(__in6)
{ }
tuple(const tuple& __in):
__t0(__in.__t0), __t1(__in.__t1), __t2(__in.__t2),
__t3(__in.__t3), __t4(__in.__t4), __t5(__in.__t5),
__t6(__in.__t6)
{ }
template <typename _U0, typename _U1, typename _U2, typename _U3,
typename _U4, typename _U5, typename _U6>
tuple(const tuple<_U0, _U1, _U2, _U3, _U4, _U5, _U6>& __in):
__t0(__in.__t0), __t1(__in.__t1), __t2(__in.__t2),
__t3(__in.__t3), __t4(__in.__t4), __t5(__in.__t5),
__t6(__in.__t6)
{ }
tuple& operator=(const tuple& __in)
{
__t0=__in.__t0;
__t1=__in.__t1;
__t2=__in.__t2;
__t3=__in.__t3;
__t4=__in.__t4;
__t5=__in.__t5;
__t6=__in.__t6;
return *this;
}
template <typename _U0, typename _U1, typename _U2, typename _U3,
typename _U4, typename _U5, typename _U6>
tuple&
operator=(const tuple<_U0, _U1, _U2, _U3, _U4, _U5, _U6>& __in)
{ {
__t0=__in.__t0; _Tp0 _M_t0;
__t1=__in.__t1; _Tp1 _M_t1;
__t2=__in.__t2; _Tp2 _M_t2;
__t3=__in.__t3; _Tp3 _M_t3;
__t4=__in.__t4; _Tp4 _M_t4;
__t5=__in.__t5; _Tp5 _M_t5;
__t6=__in.__t6; _Tp6 _M_t6;
return *this;
} public:
template<int __i, typename _U> tuple()
friend class __get_helper; { }
template<typename, typename, typename, typename, typename, typename,
typename, typename, typename, typename> explicit tuple(typename __add_c_ref<_Tp0>::type __in0,
friend class tuple; typename __add_c_ref<_Tp1>::type __in1,
typename __add_c_ref<_Tp2>::type __in2,
typename __add_c_ref<_Tp3>::type __in3,
typename __add_c_ref<_Tp4>::type __in4,
typename __add_c_ref<_Tp5>::type __in5,
typename __add_c_ref<_Tp6>::type __in6):
_M_t0(__in0), _M_t1(__in1), _M_t2(__in2), _M_t3(__in3), _M_t4(__in4),
_M_t5(__in5), _M_t6(__in6)
{ }
tuple(const tuple& __in):
_M_t0(__in._M_t0), _M_t1(__in._M_t1), _M_t2(__in._M_t2),
_M_t3(__in._M_t3), _M_t4(__in._M_t4), _M_t5(__in._M_t5),
_M_t6(__in._M_t6)
{ }
template<typename _Up0, typename _Up1, typename _Up2, typename _Up3,
typename _Up4, typename _Up5, typename _Up6>
tuple(const tuple<_Up0, _Up1, _Up2, _Up3, _Up4, _Up5, _Up6>& __in):
_M_t0(__in._M_t0), _M_t1(__in._M_t1), _M_t2(__in._M_t2),
_M_t3(__in._M_t3), _M_t4(__in._M_t4), _M_t5(__in._M_t5),
_M_t6(__in._M_t6)
{ }
tuple&
operator=(const tuple& __in)
{
_M_t0=__in._M_t0;
_M_t1=__in._M_t1;
_M_t2=__in._M_t2;
_M_t3=__in._M_t3;
_M_t4=__in._M_t4;
_M_t5=__in._M_t5;
_M_t6=__in._M_t6;
return *this;
}
template<typename _Up0, typename _Up1, typename _Up2, typename _Up3,
typename _Up4, typename _Up5, typename _Up6>
tuple&
operator=(const tuple<_Up0, _Up1, _Up2, _Up3, _Up4, _Up5,
_Up6>& __in)
{
_M_t0=__in._M_t0;
_M_t1=__in._M_t1;
_M_t2=__in._M_t2;
_M_t3=__in._M_t3;
_M_t4=__in._M_t4;
_M_t5=__in._M_t5;
_M_t6=__in._M_t6;
return *this;
}
template<int __i, typename _Up>
friend class __get_helper;
template<typename, typename, typename, typename, typename, typename,
typename, typename, typename, typename>
friend class tuple;
}; };
template<typename _T0, typename _T1, typename _T2, typename _T3, template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3,
typename _T4, typename _T5, typename _T6, typename _T7> typename _Tp4, typename _Tp5, typename _Tp6, typename _Tp7>
class tuple<_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _NullClass, class tuple<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5, _Tp6, _Tp7, _NullClass,
_NullClass> _NullClass>
{
_T0 __t0;
_T1 __t1;
_T2 __t2;
_T3 __t3;
_T4 __t4;
_T5 __t5;
_T6 __t6;
_T7 __t7;
public:
tuple()
{ }
explicit tuple(typename __add_const_ref<_T0>::type __in0,
typename __add_const_ref<_T1>::type __in1,
typename __add_const_ref<_T2>::type __in2,
typename __add_const_ref<_T3>::type __in3,
typename __add_const_ref<_T4>::type __in4,
typename __add_const_ref<_T5>::type __in5,
typename __add_const_ref<_T6>::type __in6,
typename __add_const_ref<_T7>::type __in7):
__t0(__in0), __t1(__in1), __t2(__in2), __t3(__in3),
__t4(__in4), __t5(__in5), __t6(__in6), __t7(__in7)
{ }
tuple(const tuple& __in):
__t0(__in.__t0), __t1(__in.__t1), __t2(__in.__t2),
__t3(__in.__t3), __t4(__in.__t4), __t5(__in.__t5),
__t6(__in.__t6), __t7(__in.__t7)
{ }
template <typename _U0, typename _U1, typename _U2, typename _U3,
typename _U4, typename _U5, typename _U6, typename _U7>
tuple(const tuple<_U0, _U1, _U2, _U3, _U4, _U5, _U6, _U7
>& __in):
__t0(__in.__t0), __t1(__in.__t1), __t2(__in.__t2),
__t3(__in.__t3), __t4(__in.__t4), __t5(__in.__t5),
__t6(__in.__t6), __t7(__in.__t7)
{ }
tuple& operator=(const tuple& __in)
{
__t0=__in.__t0;
__t1=__in.__t1;
__t2=__in.__t2;
__t3=__in.__t3;
__t4=__in.__t4;
__t5=__in.__t5;
__t6=__in.__t6;
__t7=__in.__t7;
return *this;
}
template <typename _U0, typename _U1, typename _U2, typename _U3,
typename _U4, typename _U5, typename _U6, typename _U7>
tuple&
operator=(const tuple<_U0, _U1, _U2, _U3, _U4, _U5, _U6, _U7
>& __in)
{ {
__t0=__in.__t0; _Tp0 _M_t0;
__t1=__in.__t1; _Tp1 _M_t1;
__t2=__in.__t2; _Tp2 _M_t2;
__t3=__in.__t3; _Tp3 _M_t3;
__t4=__in.__t4; _Tp4 _M_t4;
__t5=__in.__t5; _Tp5 _M_t5;
__t6=__in.__t6; _Tp6 _M_t6;
__t7=__in.__t7; _Tp7 _M_t7;
return *this;
} public:
template<int __i, typename _U> tuple()
friend class __get_helper; { }
template<typename, typename, typename, typename, typename, typename,
typename, typename, typename, typename> explicit tuple(typename __add_c_ref<_Tp0>::type __in0,
friend class tuple; typename __add_c_ref<_Tp1>::type __in1,
typename __add_c_ref<_Tp2>::type __in2,
typename __add_c_ref<_Tp3>::type __in3,
typename __add_c_ref<_Tp4>::type __in4,
typename __add_c_ref<_Tp5>::type __in5,
typename __add_c_ref<_Tp6>::type __in6,
typename __add_c_ref<_Tp7>::type __in7):
_M_t0(__in0), _M_t1(__in1), _M_t2(__in2), _M_t3(__in3), _M_t4(__in4),
_M_t5(__in5), _M_t6(__in6), _M_t7(__in7)
{ }
tuple(const tuple& __in):
_M_t0(__in._M_t0), _M_t1(__in._M_t1), _M_t2(__in._M_t2),
_M_t3(__in._M_t3), _M_t4(__in._M_t4), _M_t5(__in._M_t5),
_M_t6(__in._M_t6), _M_t7(__in._M_t7)
{ }
template<typename _Up0, typename _Up1, typename _Up2, typename _Up3,
typename _Up4, typename _Up5, typename _Up6, typename _Up7>
tuple(const tuple<_Up0, _Up1, _Up2, _Up3, _Up4, _Up5, _Up6,
_Up7>& __in):
_M_t0(__in._M_t0), _M_t1(__in._M_t1), _M_t2(__in._M_t2),
_M_t3(__in._M_t3), _M_t4(__in._M_t4), _M_t5(__in._M_t5),
_M_t6(__in._M_t6), _M_t7(__in._M_t7)
{ }
tuple&
operator=(const tuple& __in)
{
_M_t0=__in._M_t0;
_M_t1=__in._M_t1;
_M_t2=__in._M_t2;
_M_t3=__in._M_t3;
_M_t4=__in._M_t4;
_M_t5=__in._M_t5;
_M_t6=__in._M_t6;
_M_t7=__in._M_t7;
return *this;
}
template<typename _Up0, typename _Up1, typename _Up2, typename _Up3,
typename _Up4, typename _Up5, typename _Up6, typename _Up7>
tuple&
operator=(const tuple<_Up0, _Up1, _Up2, _Up3, _Up4, _Up5, _Up6,
_Up7>& __in)
{
_M_t0=__in._M_t0;
_M_t1=__in._M_t1;
_M_t2=__in._M_t2;
_M_t3=__in._M_t3;
_M_t4=__in._M_t4;
_M_t5=__in._M_t5;
_M_t6=__in._M_t6;
_M_t7=__in._M_t7;
return *this;
}
template<int __i, typename _Up>
friend class __get_helper;
template<typename, typename, typename, typename, typename, typename,
typename, typename, typename, typename>
friend class tuple;
}; };
template<typename _T0, typename _T1, typename _T2, typename _T3, template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3,
typename _T4, typename _T5, typename _T6, typename _T7, typename _Tp4, typename _Tp5, typename _Tp6, typename _Tp7,
typename _T8> typename _Tp8>
class tuple<_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, class tuple<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5, _Tp6, _Tp7, _Tp8,
_NullClass> _NullClass>
{
_T0 __t0;
_T1 __t1;
_T2 __t2;
_T3 __t3;
_T4 __t4;
_T5 __t5;
_T6 __t6;
_T7 __t7;
_T8 __t8;
public:
tuple()
{ }
explicit tuple(typename __add_const_ref<_T0>::type __in0,
typename __add_const_ref<_T1>::type __in1,
typename __add_const_ref<_T2>::type __in2,
typename __add_const_ref<_T3>::type __in3,
typename __add_const_ref<_T4>::type __in4,
typename __add_const_ref<_T5>::type __in5,
typename __add_const_ref<_T6>::type __in6,
typename __add_const_ref<_T7>::type __in7,
typename __add_const_ref<_T8>::type __in8):
__t0(__in0), __t1(__in1), __t2(__in2), __t3(__in3),
__t4(__in4), __t5(__in5), __t6(__in6), __t7(__in7),
__t8(__in8)
{ }
tuple(const tuple& __in):
__t0(__in.__t0), __t1(__in.__t1), __t2(__in.__t2),
__t3(__in.__t3), __t4(__in.__t4), __t5(__in.__t5),
__t6(__in.__t6), __t7(__in.__t7), __t8(__in.__t8)
{ }
template <typename _U0, typename _U1, typename _U2, typename _U3,
typename _U4, typename _U5, typename _U6, typename _U7,
typename _U8>
tuple(const tuple<_U0, _U1, _U2, _U3, _U4, _U5, _U6, _U7, _U8
>& __in):
__t0(__in.__t0), __t1(__in.__t1), __t2(__in.__t2),
__t3(__in.__t3), __t4(__in.__t4), __t5(__in.__t5),
__t6(__in.__t6), __t7(__in.__t7), __t8(__in.__t8)
{ }
tuple& operator=(const tuple& __in)
{
__t0=__in.__t0;
__t1=__in.__t1;
__t2=__in.__t2;
__t3=__in.__t3;
__t4=__in.__t4;
__t5=__in.__t5;
__t6=__in.__t6;
__t7=__in.__t7;
__t8=__in.__t8;
return *this;
}
template <typename _U0, typename _U1, typename _U2, typename _U3,
typename _U4, typename _U5, typename _U6, typename _U7,
typename _U8>
tuple&
operator=(const tuple<_U0, _U1, _U2, _U3, _U4, _U5, _U6, _U7,
_U8>& __in)
{ {
__t0=__in.__t0; _Tp0 _M_t0;
__t1=__in.__t1; _Tp1 _M_t1;
__t2=__in.__t2; _Tp2 _M_t2;
__t3=__in.__t3; _Tp3 _M_t3;
__t4=__in.__t4; _Tp4 _M_t4;
__t5=__in.__t5; _Tp5 _M_t5;
__t6=__in.__t6; _Tp6 _M_t6;
__t7=__in.__t7; _Tp7 _M_t7;
__t8=__in.__t8; _Tp8 _M_t8;
return *this;
} public:
template<int __i, typename _U> tuple()
friend class __get_helper; { }
template<typename, typename, typename, typename, typename, typename,
typename, typename, typename, typename> explicit tuple(typename __add_c_ref<_Tp0>::type __in0,
friend class tuple; typename __add_c_ref<_Tp1>::type __in1,
typename __add_c_ref<_Tp2>::type __in2,
typename __add_c_ref<_Tp3>::type __in3,
typename __add_c_ref<_Tp4>::type __in4,
typename __add_c_ref<_Tp5>::type __in5,
typename __add_c_ref<_Tp6>::type __in6,
typename __add_c_ref<_Tp7>::type __in7,
typename __add_c_ref<_Tp8>::type __in8):
_M_t0(__in0), _M_t1(__in1), _M_t2(__in2), _M_t3(__in3), _M_t4(__in4),
_M_t5(__in5), _M_t6(__in6), _M_t7(__in7), _M_t8(__in8)
{ }
tuple(const tuple& __in):
_M_t0(__in._M_t0), _M_t1(__in._M_t1), _M_t2(__in._M_t2),
_M_t3(__in._M_t3), _M_t4(__in._M_t4), _M_t5(__in._M_t5),
_M_t6(__in._M_t6), _M_t7(__in._M_t7), _M_t8(__in._M_t8)
{ }
template<typename _Up0, typename _Up1, typename _Up2, typename _Up3,
typename _Up4, typename _Up5, typename _Up6, typename _Up7,
typename _Up8>
tuple(const tuple<_Up0, _Up1, _Up2, _Up3, _Up4, _Up5, _Up6, _Up7,
_Up8>& __in):
_M_t0(__in._M_t0), _M_t1(__in._M_t1), _M_t2(__in._M_t2),
_M_t3(__in._M_t3), _M_t4(__in._M_t4), _M_t5(__in._M_t5),
_M_t6(__in._M_t6), _M_t7(__in._M_t7), _M_t8(__in._M_t8)
{ }
tuple&
operator=(const tuple& __in)
{
_M_t0=__in._M_t0;
_M_t1=__in._M_t1;
_M_t2=__in._M_t2;
_M_t3=__in._M_t3;
_M_t4=__in._M_t4;
_M_t5=__in._M_t5;
_M_t6=__in._M_t6;
_M_t7=__in._M_t7;
_M_t8=__in._M_t8;
return *this;
}
template<typename _Up0, typename _Up1, typename _Up2, typename _Up3,
typename _Up4, typename _Up5, typename _Up6, typename _Up7,
typename _Up8>
tuple&
operator=(const tuple<_Up0, _Up1, _Up2, _Up3, _Up4, _Up5, _Up6, _Up7,
_Up8>& __in)
{
_M_t0=__in._M_t0;
_M_t1=__in._M_t1;
_M_t2=__in._M_t2;
_M_t3=__in._M_t3;
_M_t4=__in._M_t4;
_M_t5=__in._M_t5;
_M_t6=__in._M_t6;
_M_t7=__in._M_t7;
_M_t8=__in._M_t8;
return *this;
}
template<int __i, typename _Up>
friend class __get_helper;
template<typename, typename, typename, typename, typename, typename,
typename, typename, typename, typename>
friend class tuple;
}; };
template<typename _T0, typename _T1, typename _T2, typename _T3, template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3,
typename _T4, typename _T5, typename _T6, typename _T7, typename _Tp4, typename _Tp5, typename _Tp6, typename _Tp7,
typename _T8, typename _T9> typename _Tp8, typename _Tp9>
class tuple class tuple
{
_T0 __t0;
_T1 __t1;
_T2 __t2;
_T3 __t3;
_T4 __t4;
_T5 __t5;
_T6 __t6;
_T7 __t7;
_T8 __t8;
_T9 __t9;
public:
tuple()
{ }
explicit tuple(typename __add_const_ref<_T0>::type __in0,
typename __add_const_ref<_T1>::type __in1,
typename __add_const_ref<_T2>::type __in2,
typename __add_const_ref<_T3>::type __in3,
typename __add_const_ref<_T4>::type __in4,
typename __add_const_ref<_T5>::type __in5,
typename __add_const_ref<_T6>::type __in6,
typename __add_const_ref<_T7>::type __in7,
typename __add_const_ref<_T8>::type __in8,
typename __add_const_ref<_T9>::type __in9):
__t0(__in0), __t1(__in1), __t2(__in2), __t3(__in3),
__t4(__in4), __t5(__in5), __t6(__in6), __t7(__in7),
__t8(__in8), __t9(__in9)
{ }
tuple(const tuple& __in):
__t0(__in.__t0), __t1(__in.__t1), __t2(__in.__t2),
__t3(__in.__t3), __t4(__in.__t4), __t5(__in.__t5),
__t6(__in.__t6), __t7(__in.__t7), __t8(__in.__t8),
__t9(__in.__t9)
{ }
template <typename _U0, typename _U1, typename _U2, typename _U3,
typename _U4, typename _U5, typename _U6, typename _U7,
typename _U8, typename _U9>
tuple(const tuple<_U0, _U1, _U2, _U3, _U4, _U5, _U6, _U7, _U8,
_U9>& __in):
__t0(__in.__t0), __t1(__in.__t1), __t2(__in.__t2),
__t3(__in.__t3), __t4(__in.__t4), __t5(__in.__t5),
__t6(__in.__t6), __t7(__in.__t7), __t8(__in.__t8),
__t9(__in.__t9)
{ }
tuple& operator=(const tuple& __in)
{
__t0=__in.__t0;
__t1=__in.__t1;
__t2=__in.__t2;
__t3=__in.__t3;
__t4=__in.__t4;
__t5=__in.__t5;
__t6=__in.__t6;
__t7=__in.__t7;
__t8=__in.__t8;
__t9=__in.__t9;
return *this;
}
template <typename _U0, typename _U1, typename _U2, typename _U3,
typename _U4, typename _U5, typename _U6, typename _U7,
typename _U8, typename _U9>
tuple&
operator=(const tuple<_U0, _U1, _U2, _U3, _U4, _U5, _U6, _U7,
_U8, _U9>& __in)
{ {
__t0=__in.__t0; _Tp0 _M_t0;
__t1=__in.__t1; _Tp1 _M_t1;
__t2=__in.__t2; _Tp2 _M_t2;
__t3=__in.__t3; _Tp3 _M_t3;
__t4=__in.__t4; _Tp4 _M_t4;
__t5=__in.__t5; _Tp5 _M_t5;
__t6=__in.__t6; _Tp6 _M_t6;
__t7=__in.__t7; _Tp7 _M_t7;
__t8=__in.__t8; _Tp8 _M_t8;
__t9=__in.__t9; _Tp9 _M_t9;
return *this;
} public:
template<int __i, typename _U> tuple()
friend class __get_helper; { }
template<typename, typename, typename, typename, typename, typename,
typename, typename, typename, typename> explicit tuple(typename __add_c_ref<_Tp0>::type __in0,
friend class tuple; typename __add_c_ref<_Tp1>::type __in1,
typename __add_c_ref<_Tp2>::type __in2,
typename __add_c_ref<_Tp3>::type __in3,
typename __add_c_ref<_Tp4>::type __in4,
typename __add_c_ref<_Tp5>::type __in5,
typename __add_c_ref<_Tp6>::type __in6,
typename __add_c_ref<_Tp7>::type __in7,
typename __add_c_ref<_Tp8>::type __in8,
typename __add_c_ref<_Tp9>::type __in9):
_M_t0(__in0), _M_t1(__in1), _M_t2(__in2), _M_t3(__in3), _M_t4(__in4),
_M_t5(__in5), _M_t6(__in6), _M_t7(__in7), _M_t8(__in8), _M_t9(__in9)
{ }
tuple(const tuple& __in):
_M_t0(__in._M_t0), _M_t1(__in._M_t1), _M_t2(__in._M_t2),
_M_t3(__in._M_t3), _M_t4(__in._M_t4), _M_t5(__in._M_t5),
_M_t6(__in._M_t6), _M_t7(__in._M_t7), _M_t8(__in._M_t8),
_M_t9(__in._M_t9)
{ }
template<typename _Up0, typename _Up1, typename _Up2, typename _Up3,
typename _Up4, typename _Up5, typename _Up6, typename _Up7,
typename _Up8, typename _Up9>
tuple(const tuple<_Up0, _Up1, _Up2, _Up3, _Up4, _Up5, _Up6, _Up7, _Up8,
_Up9>& __in):
_M_t0(__in._M_t0), _M_t1(__in._M_t1), _M_t2(__in._M_t2),
_M_t3(__in._M_t3), _M_t4(__in._M_t4), _M_t5(__in._M_t5),
_M_t6(__in._M_t6), _M_t7(__in._M_t7), _M_t8(__in._M_t8),
_M_t9(__in._M_t9)
{ }
tuple&
operator=(const tuple& __in)
{
_M_t0=__in._M_t0;
_M_t1=__in._M_t1;
_M_t2=__in._M_t2;
_M_t3=__in._M_t3;
_M_t4=__in._M_t4;
_M_t5=__in._M_t5;
_M_t6=__in._M_t6;
_M_t7=__in._M_t7;
_M_t8=__in._M_t8;
_M_t9=__in._M_t9;
return *this;
}
template<typename _Up0, typename _Up1, typename _Up2, typename _Up3,
typename _Up4, typename _Up5, typename _Up6, typename _Up7,
typename _Up8, typename _Up9>
tuple&
operator=(const tuple<_Up0, _Up1, _Up2, _Up3, _Up4, _Up5, _Up6, _Up7,
_Up8, _Up9>& __in)
{
_M_t0=__in._M_t0;
_M_t1=__in._M_t1;
_M_t2=__in._M_t2;
_M_t3=__in._M_t3;
_M_t4=__in._M_t4;
_M_t5=__in._M_t5;
_M_t6=__in._M_t6;
_M_t7=__in._M_t7;
_M_t8=__in._M_t8;
_M_t9=__in._M_t9;
return *this;
}
template<int __i, typename _Up>
friend class __get_helper;
template<typename, typename, typename, typename, typename, typename,
typename, typename, typename, typename>
friend class tuple;
}; };
// Class used in the implementation of get // Class used in the implementation of get
template<int __i, typename _T> template<int __i, typename _Tp>
struct __get_helper; struct __get_helper;
template<typename _T> template<typename _Tp>
struct __get_helper<0, _T> struct __get_helper<0, _Tp>
{ {
static typename __add_ref<typename tuple_element<0, _T>::type>::type static typename __add_ref<typename tuple_element<0, _Tp>::type>::type
get_value(_T& __in) get_value(_Tp& __in)
{ return __in.__t0; } { return __in._M_t0; }
static typename __add_const_ref<typename tuple_element<0, _T>::type>::type static typename __add_c_ref<typename tuple_element<0, _Tp>::type>::type
get_value(const _T& __in) get_value(const _Tp& __in)
{ return __in.__t0; } { return __in._M_t0; }
}; };
template<typename _T> template<typename _Tp>
struct __get_helper<1, _T> struct __get_helper<1, _Tp>
{
static typename __add_ref<typename tuple_element<1, _T>::type>::type
get_value(_T& __in)
{
return __in.__t1;
}
static typename __add_const_ref<typename tuple_element<1, _T>::type>::type
get_value(const _T& __in)
{
return __in.__t1;
}
};
template<typename _T>
struct __get_helper<2, _T>
{
static typename __add_ref<typename tuple_element<2, _T>::type>::type
get_value(_T& __in)
{
return __in.__t2;
}
static typename __add_const_ref<typename tuple_element<2, _T>::type>::type
get_value(const _T& __in)
{
return __in.__t2;
}
};
template<typename _T>
struct __get_helper<3, _T>
{
static typename __add_ref<typename tuple_element<3, _T>::type>::type
get_value(_T& __in)
{
return __in.__t3;
}
static typename __add_const_ref<typename tuple_element<3, _T>::type>::type
get_value(const _T& __in)
{
return __in.__t3;
}
};
template<typename _T>
struct __get_helper<4, _T>
{
static typename __add_ref<typename tuple_element<4, _T>::type>::type
get_value(_T& __in)
{
return __in.__t4;
}
static typename __add_const_ref<typename tuple_element<4, _T>::type>::type
get_value(const _T& __in)
{
return __in.__t4;
}
};
template<typename _T>
struct __get_helper<5, _T>
{
static typename __add_ref<typename tuple_element<5, _T>::type>::type
get_value(_T& __in)
{
return __in.__t5;
}
static typename __add_const_ref<typename tuple_element<5, _T>::type>::type
get_value(const _T& __in)
{ {
return __in.__t5; static typename __add_ref<typename tuple_element<1, _Tp>::type>::type
} get_value(_Tp& __in)
}; { return __in._M_t1; }
template<typename _T> static typename __add_c_ref<typename tuple_element<1, _Tp>::type>::type
struct __get_helper<6, _T> get_value(const _Tp& __in)
{ { return __in._M_t1; }
static typename __add_ref<typename tuple_element<6, _T>::type>::type };
get_value(_T& __in)
template<typename _Tp>
struct __get_helper<2, _Tp>
{ {
return __in.__t6; static typename __add_ref<typename tuple_element<2, _Tp>::type>::type
} get_value(_Tp& __in)
static typename __add_const_ref<typename tuple_element<6, _T>::type>::type { return __in._M_t2; }
get_value(const _T& __in)
static typename __add_c_ref<typename tuple_element<2, _Tp>::type>::type
get_value(const _Tp& __in)
{ return __in._M_t2; }
};
template<typename _Tp>
struct __get_helper<3, _Tp>
{ {
return __in.__t6; static typename __add_ref<typename tuple_element<3, _Tp>::type>::type
} get_value(_Tp& __in)
}; { return __in._M_t3; }
template<typename _T> static typename __add_c_ref<typename tuple_element<3, _Tp>::type>::type
struct __get_helper<7, _T> get_value(const _Tp& __in)
{ { return __in._M_t3; }
static typename __add_ref<typename tuple_element<7, _T>::type>::type };
get_value(_T& __in)
template<typename _Tp>
struct __get_helper<4, _Tp>
{ {
return __in.__t7; static typename __add_ref<typename tuple_element<4, _Tp>::type>::type
} get_value(_Tp& __in)
static typename __add_const_ref<typename tuple_element<7, _T>::type>::type { return __in._M_t4; }
get_value(const _T& __in)
static typename __add_c_ref<typename tuple_element<4, _Tp>::type>::type
get_value(const _Tp& __in)
{ return __in._M_t4; }
};
template<typename _Tp>
struct __get_helper<5, _Tp>
{ {
return __in.__t7; static typename __add_ref<typename tuple_element<5, _Tp>::type>::type
} get_value(_Tp& __in)
}; { return __in._M_t5; }
template<typename _T> static typename __add_c_ref<typename tuple_element<5, _Tp>::type>::type
struct __get_helper<8, _T> get_value(const _Tp& __in)
{ { return __in._M_t5; }
static typename __add_ref<typename tuple_element<8, _T>::type>::type };
get_value(_T& __in)
template<typename _Tp>
struct __get_helper<6, _Tp>
{ {
return __in.__t8; static typename __add_ref<typename tuple_element<6, _Tp>::type>::type
} get_value(_Tp& __in)
static typename __add_const_ref<typename tuple_element<8, _T>::type>::type { return __in._M_t6; }
get_value(const _T& __in)
static typename __add_c_ref<typename tuple_element<6, _Tp>::type>::type
get_value(const _Tp& __in)
{ return __in._M_t6; }
};
template<typename _Tp>
struct __get_helper<7, _Tp>
{ {
return __in.__t8; static typename __add_ref<typename tuple_element<7, _Tp>::type>::type
} get_value(_Tp& __in)
}; { return __in._M_t7; }
template<typename _T> static typename __add_c_ref<typename tuple_element<7, _Tp>::type>::type
struct __get_helper<9, _T> get_value(const _Tp& __in)
{ { return __in._M_t7; }
static typename __add_ref<typename tuple_element<9, _T>::type>::type };
get_value(_T& __in)
template<typename _Tp>
struct __get_helper<8, _Tp>
{ {
return __in.__t9; static typename __add_ref<typename tuple_element<8, _Tp>::type>::type
} get_value(_Tp& __in)
static typename __add_const_ref<typename tuple_element<9, _T>::type>::type { return __in._M_t8; }
get_value(const _T& __in)
static typename __add_c_ref<typename tuple_element<8, _Tp>::type>::type
get_value(const _Tp& __in)
{ return __in._M_t8; }
};
template<typename _Tp>
struct __get_helper<9, _Tp>
{ {
return __in.__t9; static typename __add_ref<typename tuple_element<9, _Tp>::type>::type
} get_value(_Tp& __in)
}; { return __in._M_t9; }
static typename __add_c_ref<typename tuple_element<9, _Tp>::type>::type
get_value(const _Tp& __in)
{ return __in._M_t9; }
};
/* Returns a reference to the ith element of a tuple. /* Returns a reference to the ith element of a tuple.
* Any const or non-const ref elements are returned with their original type * Any const or non-const ref elements are returned with their original type
*/ */
template<int __i, typename _T0, typename _T1, typename _T2, typename _T3, template<int __i, typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3,
typename _T4, typename _T5, typename _T6, typename _T7, typename _Tp4, typename _Tp5, typename _Tp6, typename _Tp7,
typename _T8, typename _T9> typename _Tp8, typename _Tp9>
typename __add_ref<typename tuple_element<__i,tuple<_T0, _T1, _T2, _T3, typename __add_ref<typename tuple_element<__i, tuple<_Tp0, _Tp1, _Tp2,
_T4, _T5, _T6, _T7, _T8, _T9> >::type>::type _Tp3, _Tp4, _Tp5,
get(tuple<_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9>& __t) _Tp6, _Tp7, _Tp8,
{ _Tp9> >::type>::type
return __get_helper<__i,tuple<_T0, _T1, _T2, _T3, _T4, _T5, _T6, get(tuple<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5, _Tp6, _Tp7, _Tp8,
_T7, _T8, _T9> >::get_value(__t); _Tp9>& __t)
} {
return __get_helper<__i, tuple<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5, _Tp6,
_Tp7, _Tp8, _Tp9> >::get_value(__t);
}
/* Returns a const reference to the ith element of a tuple. /* Returns a const reference to the ith element of a tuple.
* Any const or non-const ref elements are returned with their original type * Any const or non-const ref elements are returned with their original type
*/ */
template<int __i, typename _T0, typename _T1, typename _T2, typename _T3, template<int __i, typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3,
typename _T4, typename _T5, typename _T6, typename _T7, typename _Tp4, typename _Tp5, typename _Tp6, typename _Tp7,
typename _T8, typename _T9> typename _Tp8, typename _Tp9>
typename __add_const_ref<typename tuple_element<__i,tuple<_T0, _T1, _T2, typename __add_c_ref<typename tuple_element<__i, tuple<_Tp0, _Tp1, _Tp2,
_T3, _T4, _T5, _T6, _T7, _T8, _T9> >::type>::type _Tp3, _Tp4, _Tp5,
get(const tuple<_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9 _Tp6, _Tp7, _Tp8,
>& __t) _Tp9> >::type>::type
{ get(const tuple<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5, _Tp6, _Tp7, _Tp8,
return __get_helper<__i,tuple<_T0, _T1, _T2, _T3, _T4, _T5, _T6, _Tp9>& __t)
_T7, _T8, _T9> >::get_value(__t); {
} return __get_helper<__i, tuple<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5, _Tp6,
_Tp7, _Tp8, _Tp9> >::get_value(__t);
}
// This class helps construct the various comparison operations on tuples // This class helps construct the various comparison operations on tuples
template<int __check_equal_size, int __i, int __j, typename _T, typename _U> template<int __check_equal_size, int __i, int __j, typename _Tp, typename _Up>
struct __tuple_compare; struct __tuple_compare;
template<int __i, int __j, typename _T, typename _U> template<int __i, int __j, typename _Tp, typename _Up>
struct __tuple_compare<0, __i, __j, _T, _U> struct __tuple_compare<0, __i, __j, _Tp, _Up>
{
static bool __eq(const _T& __t, const _U& __u)
{
return get<__i>(__t) == get<__i>(__u) &&
__tuple_compare<0, __i+1, __j, _T, _U>::__eq(__t, __u) ;
}
static bool __neq(const _T& __t, const _U& __u)
{
return get<__i>(__t) != get<__i>(__u) ||
__tuple_compare<0, __i+1, __j, _T, _U>::__neq(__t, __u) ;
}
static bool __less(const _T& __t, const _U& __u)
{
return (get<__i>(__t) < get<__i>(__u)) || !(get<__i>(__u) < get<__i>(__t)) &&
__tuple_compare<0, __i+1, __j, _T, _U>::__less(__t, __u) ;
}
static bool __greater(const _T& __t, const _U& __u)
{
return (get<__i>(__t) > get<__i>(__u)) || !(get<__i>(__u) > get<__i>(__t)) &&
__tuple_compare<0, __i+1, __j, _T, _U>::__greater(__t, __u) ;
}
static bool __leq(const _T& __t, const _U& __u)
{
return (get<__i>(__t) <= get<__i>(__u)) && (!(get<__i>(__u)<=get<__i>(__t)) ||
__tuple_compare<0, __i+1, __j, _T, _U>::__leq(__t, __u) );
}
static bool __geq(const _T& __t, const _U& __u)
{ {
return (get<__i>(__t) >= get<__i>(__u)) && (!(get<__i>(__u)>=get<__i>(__t)) || static bool __eq(const _Tp& __t, const _Up& __u)
__tuple_compare<0, __i+1, __j, _T, _U>::__geq(__t, __u) ); {
} return get<__i>(__t) == get<__i>(__u) &&
}; __tuple_compare<0, __i+1, __j, _Tp, _Up>::__eq(__t, __u);
}
template<int __i, typename _T, typename _U> static bool __neq(const _Tp& __t, const _Up& __u)
struct __tuple_compare<0, __i, __i, _T, _U> {
{ return get<__i>(__t) != get<__i>(__u) ||
static bool __eq(const _T&, const _U&) __tuple_compare<0, __i+1, __j, _Tp, _Up>::__neq(__t, __u);
{ }
return true; static bool __less(const _Tp& __t, const _Up& __u)
} {
static bool __neq(const _T&, const _U&) return (get<__i>(__t) < get<__i>(__u)) || !(get<__i>(__u) < get<__i>(__t)) &&
{ __tuple_compare<0, __i+1, __j, _Tp, _Up>::__less(__t, __u);
return false; }
} static bool __greater(const _Tp& __t, const _Up& __u)
static bool __leq(const _T&, const _U&) {
{ return (get<__i>(__t) > get<__i>(__u)) || !(get<__i>(__u) > get<__i>(__t)) &&
return true; __tuple_compare<0, __i+1, __j, _Tp, _Up>::__greater(__t, __u);
} }
static bool __geq(const _T&, const _U&) static bool __leq(const _Tp& __t, const _Up& __u)
{ {
return true; return (get<__i>(__t) <= get<__i>(__u)) && (!(get<__i>(__u)<=get<__i>(__t)) ||
} __tuple_compare<0, __i+1, __j, _Tp, _Up>::__leq(__t, __u));
static bool __less(const _T&, const _U&) }
{ static bool __geq(const _Tp& __t, const _Up& __u)
return false; {
} return (get<__i>(__t) >= get<__i>(__u)) && (!(get<__i>(__u)>=get<__i>(__t)) ||
static bool __greater(const _T&, const _U&) __tuple_compare<0, __i+1, __j, _Tp, _Up>::__geq(__t, __u));
}
};
template<int __i, typename _Tp, typename _Up>
struct __tuple_compare<0, __i, __i, _Tp, _Up>
{ {
return false; static bool __eq(const _Tp&, const _Up&)
} { return true; }
}; static bool __neq(const _Tp&, const _Up&)
{ return false; }
static bool __leq(const _Tp&, const _Up&)
{ return true; }
static bool __geq(const _Tp&, const _Up&)
{ return true; }
static bool __less(const _Tp&, const _Up&)
{ return false; }
static bool __greater(const _Tp&, const _Up&)
{ return false; }
};
template<typename _T0, typename _T1, typename _T2, typename _T3, template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3,
typename _T4, typename _T5, typename _T6, typename _T7, typename _Tp4, typename _Tp5, typename _Tp6, typename _Tp7,
typename _T8, typename _T9, typename _U0, typename _U1, typename _Tp8, typename _Tp9, typename _Up0, typename _Up1,
typename _U2, typename _U3, typename _U4, typename _U5, typename _Up2, typename _Up3, typename _Up4, typename _Up5,
typename _U6, typename _U7, typename _U8, typename _U9> typename _Up6, typename _Up7, typename _Up8, typename _Up9>
bool bool
operator==(const tuple<_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, operator==(const tuple<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5, _Tp6, _Tp7, _Tp8, _Tp9>& __t,
_T9>& __t, const tuple<_U0, _U1, _U2, _U3, _U4, _U5, _U6, const tuple<_Up0, _Up1, _Up2, _Up3, _Up4, _Up5, _Up6, _Up7, _Up8, _Up9>& __u)
_U7, _U8, _U9>& __u)
{ {
typedef tuple<_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9 typedef tuple<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5, _Tp6, _Tp7, _Tp8,
> __T_tuple; _Tp9> __t_tuple;
typedef tuple<_U0, _U1, _U2, _U3, _U4, _U5, _U6, _U7, _U8, _U9 typedef tuple<_Up0, _Up1, _Up2, _Up3, _Up4, _Up5, _Up6, _Up7, _Up8,
> __U_tuple; _Up9> __u_tuple;
return __tuple_compare<tuple_size<__T_tuple>::value - return __tuple_compare<tuple_size<__t_tuple>::value -
tuple_size<__U_tuple>::value, 0, tuple_size<__u_tuple>::value, 0,
tuple_size<__T_tuple>::value, __T_tuple, __U_tuple>::__eq(__t, __u); tuple_size<__t_tuple>::value, __t_tuple, __u_tuple>::__eq(__t, __u);
} }
template<typename _T0, typename _T1, typename _T2, typename _T3, template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3,
typename _T4, typename _T5, typename _T6, typename _T7, typename _Tp4, typename _Tp5, typename _Tp6, typename _Tp7,
typename _T8, typename _T9, typename _U0, typename _U1, typename _Tp8, typename _Tp9, typename _Up0, typename _Up1,
typename _U2, typename _U3, typename _U4, typename _U5, typename _Up2, typename _Up3, typename _Up4, typename _Up5,
typename _U6, typename _U7, typename _U8, typename _U9> typename _Up6, typename _Up7, typename _Up8, typename _Up9>
bool bool
operator!=(const tuple<_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, operator!=(const tuple<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5, _Tp6, _Tp7, _Tp8, _Tp9>& __t,
_T9>& __t, const tuple<_U0, _U1, _U2, _U3, _U4, _U5, _U6, const tuple<_Up0, _Up1, _Up2, _Up3, _Up4, _Up5, _Up6, _Up7, _Up8, _Up9>& __u)
_U7, _U8, _U9>& __u)
{ {
typedef tuple<_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9 typedef tuple<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5, _Tp6, _Tp7, _Tp8,
> __T_tuple; _Tp9> __t_tuple;
typedef tuple<_U0, _U1, _U2, _U3, _U4, _U5, _U6, _U7, _U8, _U9 typedef tuple<_Up0, _Up1, _Up2, _Up3, _Up4, _Up5, _Up6, _Up7, _Up8,
> __U_tuple; _Up9> __u_tuple;
return __tuple_compare<tuple_size<__T_tuple>::value - return __tuple_compare<tuple_size<__t_tuple>::value -
tuple_size<__U_tuple>::value, 0, tuple_size<__u_tuple>::value, 0,
tuple_size<__T_tuple>::value, __T_tuple, __U_tuple>::__neq(__t, __u); tuple_size<__t_tuple>::value, __t_tuple, __u_tuple>::__neq(__t, __u);
} }
template<typename _T0, typename _T1, typename _T2, typename _T3, template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3,
typename _T4, typename _T5, typename _T6, typename _T7, typename _Tp4, typename _Tp5, typename _Tp6, typename _Tp7,
typename _T8, typename _T9, typename _U0, typename _U1, typename _Tp8, typename _Tp9, typename _Up0, typename _Up1,
typename _U2, typename _U3, typename _U4, typename _U5, typename _Up2, typename _Up3, typename _Up4, typename _Up5,
typename _U6, typename _U7, typename _U8, typename _U9> typename _Up6, typename _Up7, typename _Up8, typename _Up9>
bool bool
operator<(const tuple<_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, operator<(const tuple<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5, _Tp6, _Tp7, _Tp8, _Tp9>& __t,
_T9>& __t, const tuple<_U0, _U1, _U2, _U3, _U4, _U5, _U6, const tuple<_Up0, _Up1, _Up2, _Up3, _Up4, _Up5, _Up6, _Up7, _Up8, _Up9>& __u)
_U7, _U8, _U9>& __u)
{ {
typedef tuple<_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9 typedef tuple<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5, _Tp6, _Tp7, _Tp8,
> __T_tuple; _Tp9> __t_tuple;
typedef tuple<_U0, _U1, _U2, _U3, _U4, _U5, _U6, _U7, _U8, _U9 typedef tuple<_Up0, _Up1, _Up2, _Up3, _Up4, _Up5, _Up6, _Up7, _Up8,
> __U_tuple; _Up9> __u_tuple;
return __tuple_compare<tuple_size<__T_tuple>::value - return __tuple_compare<tuple_size<__t_tuple>::value -
tuple_size<__U_tuple>::value, 0, tuple_size<__u_tuple>::value, 0,
tuple_size<__T_tuple>::value, __T_tuple, __U_tuple>::__less(__t, __u); tuple_size<__t_tuple>::value, __t_tuple, __u_tuple>::__less(__t, __u);
} }
template<typename _T0, typename _T1, typename _T2, typename _T3, template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3,
typename _T4, typename _T5, typename _T6, typename _T7, typename _Tp4, typename _Tp5, typename _Tp6, typename _Tp7,
typename _T8, typename _T9, typename _U0, typename _U1, typename _Tp8, typename _Tp9, typename _Up0, typename _Up1,
typename _U2, typename _U3, typename _U4, typename _U5, typename _Up2, typename _Up3, typename _Up4, typename _Up5,
typename _U6, typename _U7, typename _U8, typename _U9> typename _Up6, typename _Up7, typename _Up8, typename _Up9>
bool bool
operator>(const tuple<_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, operator>(const tuple<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5, _Tp6, _Tp7, _Tp8, _Tp9>& __t,
_T9>& __t, const tuple<_U0, _U1, _U2, _U3, _U4, _U5, _U6, const tuple<_Up0, _Up1, _Up2, _Up3, _Up4, _Up5, _Up6, _Up7, _Up8, _Up9>& __u)
_U7, _U8, _U9>& __u)
{ {
typedef tuple<_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9 typedef tuple<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5, _Tp6, _Tp7, _Tp8,
> __T_tuple; _Tp9> __t_tuple;
typedef tuple<_U0, _U1, _U2, _U3, _U4, _U5, _U6, _U7, _U8, _U9 typedef tuple<_Up0, _Up1, _Up2, _Up3, _Up4, _Up5, _Up6, _Up7, _Up8,
> __U_tuple; _Up9> __u_tuple;
return __tuple_compare<tuple_size<__T_tuple>::value - return __tuple_compare<tuple_size<__t_tuple>::value -
tuple_size<__U_tuple>::value, 0, tuple_size<__u_tuple>::value, 0,
tuple_size<__T_tuple>::value, __T_tuple, __U_tuple>::__greater(__t, __u); tuple_size<__t_tuple>::value, __t_tuple, __u_tuple>::__greater(__t, __u);
} }
template<typename _T0, typename _T1, typename _T2, typename _T3, template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3,
typename _T4, typename _T5, typename _T6, typename _T7, typename _Tp4, typename _Tp5, typename _Tp6, typename _Tp7,
typename _T8, typename _T9, typename _U0, typename _U1, typename _Tp8, typename _Tp9, typename _Up0, typename _Up1,
typename _U2, typename _U3, typename _U4, typename _U5, typename _Up2, typename _Up3, typename _Up4, typename _Up5,
typename _U6, typename _U7, typename _U8, typename _U9> typename _Up6, typename _Up7, typename _Up8, typename _Up9>
bool bool
operator<=(const tuple<_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, operator<=(const tuple<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5, _Tp6, _Tp7, _Tp8, _Tp9>& __t,
_T9>& __t, const tuple<_U0, _U1, _U2, _U3, _U4, _U5, _U6, const tuple<_Up0, _Up1, _Up2, _Up3, _Up4, _Up5, _Up6, _Up7, _Up8, _Up9>& __u)
_U7, _U8, _U9>& __u)
{ {
typedef tuple<_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9 typedef tuple<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5, _Tp6, _Tp7, _Tp8,
> __T_tuple; _Tp9> __t_tuple;
typedef tuple<_U0, _U1, _U2, _U3, _U4, _U5, _U6, _U7, _U8, _U9 typedef tuple<_Up0, _Up1, _Up2, _Up3, _Up4, _Up5, _Up6, _Up7, _Up8,
> __U_tuple; _Up9> __u_tuple;
return __tuple_compare<tuple_size<__T_tuple>::value - return __tuple_compare<tuple_size<__t_tuple>::value -
tuple_size<__U_tuple>::value, 0, tuple_size<__u_tuple>::value, 0,
tuple_size<__T_tuple>::value, __T_tuple, __U_tuple>::__leq(__t, __u); tuple_size<__t_tuple>::value, __t_tuple, __u_tuple>::__leq(__t, __u);
} }
template<typename _T0, typename _T1, typename _T2, typename _T3, template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3,
typename _T4, typename _T5, typename _T6, typename _T7, typename _Tp4, typename _Tp5, typename _Tp6, typename _Tp7,
typename _T8, typename _T9, typename _U0, typename _U1, typename _Tp8, typename _Tp9, typename _Up0, typename _Up1,
typename _U2, typename _U3, typename _U4, typename _U5, typename _Up2, typename _Up3, typename _Up4, typename _Up5,
typename _U6, typename _U7, typename _U8, typename _U9> typename _Up6, typename _Up7, typename _Up8, typename _Up9>
bool bool
operator>=(const tuple<_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, operator>=(const tuple<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5, _Tp6, _Tp7, _Tp8, _Tp9>& __t,
_T9>& __t, const tuple<_U0, _U1, _U2, _U3, _U4, _U5, _U6, const tuple<_Up0, _Up1, _Up2, _Up3, _Up4, _Up5, _Up6, _Up7, _Up8, _Up9>& __u)
_U7, _U8, _U9>& __u)
{ {
typedef tuple<_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9 typedef tuple<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5, _Tp6, _Tp7, _Tp8,
> __T_tuple; _Tp9> __t_tuple;
typedef tuple<_U0, _U1, _U2, _U3, _U4, _U5, _U6, _U7, _U8, _U9 typedef tuple<_Up0, _Up1, _Up2, _Up3, _Up4, _Up5, _Up6, _Up7, _Up8,
> __U_tuple; _Up9> __u_tuple;
return __tuple_compare<tuple_size<__T_tuple>::value - return __tuple_compare<tuple_size<__t_tuple>::value -
tuple_size<__U_tuple>::value, 0, tuple_size<__u_tuple>::value, 0,
tuple_size<__T_tuple>::value, __T_tuple, __U_tuple>::__geq(__t, __u); tuple_size<__t_tuple>::value, __t_tuple, __u_tuple>::__geq(__t, __u);
} }
// Provides a way to annotate that a reference to // Provides a way to annotate that a reference to
// an object should be passed. // an object should be passed.
template<typename _T> template<typename _Tp>
class reference_wrapper class reference_wrapper
{ {
_T& __data; _Tp& _M_data;
public:
public: typedef _Tp type;
typedef _T type; explicit reference_wrapper(_Tp& __indata): _M_data(__indata)
{ }
explicit reference_wrapper(_T& __indata): __data(__indata)
{ } operator _Tp& () const
{
operator _T&() const return this->get();
{ return this->get(); } }
_T& _Tp&
get() const get() const
{ return __data; } {
}; return _M_data;
}
};
// Denotes a reference should be taken to a variable. // Denotes a reference should be taken to a variable.
template<typename _T> template<typename _Tp>
reference_wrapper<_T> reference_wrapper<_Tp>
ref(_T& __t) ref(_Tp& __t)
{ return reference_wrapper<_T>(__t); } {
return reference_wrapper<_Tp>(__t);
}
// Denotes a const reference should be taken to a variable. // Denotes a const reference should be taken to a variable.
template<typename _T> template<typename _Tp>
reference_wrapper<_T const> reference_wrapper<_Tp const>
cref(const _T& __t) cref(const _Tp& __t)
{ return reference_wrapper<_T const>(__t); } {
return reference_wrapper<_Tp const>(__t);
}
// Helper which adds a reference to a type when given a reference_wrapper // Helper which adds a reference to a type when given a reference_wrapper
template<typename _T> template<typename _Tp>
struct __strip_reference_wrapper struct __strip_reference_wrapper
{ typedef _T __type; }; {
typedef _Tp __type;
};
template<typename _T> template<typename _Tp>
struct __strip_reference_wrapper<reference_wrapper<_T> > struct __strip_reference_wrapper<reference_wrapper<_Tp> >
{ typedef _T& __type; }; {
typedef _Tp& __type;
};
template<typename _T> template<typename _Tp>
struct __strip_reference_wrapper<const reference_wrapper<_T> > struct __strip_reference_wrapper<const reference_wrapper<_Tp> >
{ typedef _T& __type; }; {
typedef _Tp& __type;
};
template<typename _T0 = _NullClass, typename _T1 = _NullClass, template<typename _Tp0 = _NullClass, typename _Tp1 = _NullClass,
typename _T2 = _NullClass, typename _T3 = _NullClass, typename _Tp2 = _NullClass, typename _Tp3 = _NullClass,
typename _T4 = _NullClass, typename _T5 = _NullClass, typename _Tp4 = _NullClass, typename _Tp5 = _NullClass,
typename _T6 = _NullClass, typename _T7 = _NullClass, typename _Tp6 = _NullClass, typename _Tp7 = _NullClass,
typename _T8 = _NullClass, typename _T9 = _NullClass> typename _Tp8 = _NullClass, typename _Tp9 = _NullClass>
struct __stripped_tuple_type struct __stripped_tuple_type
{ {
typedef tuple<typename __strip_reference_wrapper<_T0>::__type, typedef tuple<typename __strip_reference_wrapper<_Tp0>::__type,
typename __strip_reference_wrapper<_T1>::__type, typename __strip_reference_wrapper<_Tp1>::__type,
typename __strip_reference_wrapper<_T2>::__type, typename __strip_reference_wrapper<_Tp2>::__type,
typename __strip_reference_wrapper<_T3>::__type, typename __strip_reference_wrapper<_Tp3>::__type,
typename __strip_reference_wrapper<_T4>::__type, typename __strip_reference_wrapper<_Tp4>::__type,
typename __strip_reference_wrapper<_T5>::__type, typename __strip_reference_wrapper<_Tp5>::__type,
typename __strip_reference_wrapper<_T6>::__type, typename __strip_reference_wrapper<_Tp6>::__type,
typename __strip_reference_wrapper<_T7>::__type, typename __strip_reference_wrapper<_Tp7>::__type,
typename __strip_reference_wrapper<_T8>::__type, typename __strip_reference_wrapper<_Tp8>::__type,
typename __strip_reference_wrapper<_T9>::__type> __type; typename __strip_reference_wrapper<_Tp9>::__type> __type;
}; };
tuple<> tuple<>
make_tuple() make_tuple()
{ { return tuple<>(); }
return tuple<>();
};
template<typename _T0> template< typename _Tp0>
typename __stripped_tuple_type<_T0>::__type typename __stripped_tuple_type< _Tp0>::__type
make_tuple(_T0 __t0) make_tuple( _Tp0 __t0)
{ {
return typename __stripped_tuple_type<_T0>::__type(__t0);}; return typename __stripped_tuple_type< _Tp0>::
__type( __t0);
}
template<typename _T0, typename _T1> template<typename _Tp0, typename _Tp1>
typename __stripped_tuple_type<_T0, _T1>::__type typename __stripped_tuple_type<_Tp0, _Tp1>::__type
make_tuple(_T0 __t0, _T1 __t1) make_tuple(_Tp0 __t0, _Tp1 __t1)
{ {
return typename __stripped_tuple_type<_T0, _T1>::__type(__t0, __t1);}; return typename __stripped_tuple_type<_Tp0, _Tp1>::
__type(__t0, __t1);
}
template<typename _T0, typename _T1, typename _T2> template<typename _Tp0, typename _Tp1, typename _Tp2>
typename __stripped_tuple_type<_T0, _T1, _T2>::__type typename __stripped_tuple_type<_Tp0, _Tp1, _Tp2>::__type
make_tuple(_T0 __t0, _T1 __t1, _T2 __t2) make_tuple(_Tp0 __t0, _Tp1 __t1, _Tp2 __t2)
{ {
return typename __stripped_tuple_type<_T0, _T1, _T2>::__type(__t0, __t1, __t2);}; return typename __stripped_tuple_type<_Tp0, _Tp1, _Tp2>::
__type(__t0, __t1, __t2);
}
template<typename _T0, typename _T1, typename _T2, typename _T3> template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3>
typename __stripped_tuple_type<_T0, _T1, _T2, _T3>::__type typename __stripped_tuple_type<_Tp0, _Tp1, _Tp2, _Tp3>::__type
make_tuple(_T0 __t0, _T1 __t1, _T2 __t2, _T3 __t3) make_tuple(_Tp0 __t0, _Tp1 __t1, _Tp2 __t2, _Tp3 __t3)
{ {
return typename __stripped_tuple_type<_T0, _T1, _T2, _T3>::__type(__t0, __t1, __t2, __t3);}; return typename __stripped_tuple_type<_Tp0, _Tp1, _Tp2, _Tp3>::
__type(__t0, __t1, __t2, __t3);
}
template<typename _T0, typename _T1, typename _T2, typename _T3, template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3,
typename _T4> typename _Tp4>
typename __stripped_tuple_type<_T0, _T1, _T2, _T3, _T4>::__type typename __stripped_tuple_type<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4>::__type
make_tuple(_T0 __t0, _T1 __t1, _T2 __t2, _T3 __t3, _T4 __t4) make_tuple(_Tp0 __t0, _Tp1 __t1, _Tp2 __t2, _Tp3 __t3, _Tp4 __t4)
{ {
return typename __stripped_tuple_type<_T0, _T1, _T2, _T3, _T4>::__type(__t0, __t1, __t2, __t3, __t4);}; return typename __stripped_tuple_type<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4>::
__type(__t0, __t1, __t2, __t3, __t4);
}
template<typename _T0, typename _T1, typename _T2, typename _T3, template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3,
typename _T4, typename _T5> typename _Tp4, typename _Tp5>
typename __stripped_tuple_type<_T0, _T1, _T2, _T3, _T4, _T5>::__type typename __stripped_tuple_type<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4,
make_tuple(_T0 __t0, _T1 __t1, _T2 __t2, _T3 __t3, _T4 __t4, _Tp5>::__type
_T5 __t5) make_tuple(_Tp0 __t0, _Tp1 __t1, _Tp2 __t2, _Tp3 __t3, _Tp4 __t4,
{ _Tp5 __t5)
return typename __stripped_tuple_type<_T0, _T1, _T2, _T3, _T4, _T5 {
>::__type(__t0, __t1, __t2, __t3, __t4, __t5);}; return typename __stripped_tuple_type<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4,
_Tp5>::
template<typename _T0, typename _T1, typename _T2, typename _T3, __type(__t0, __t1, __t2, __t3, __t4, __t5);
typename _T4, typename _T5, typename _T6> }
typename __stripped_tuple_type<_T0, _T1, _T2, _T3, _T4, _T5, _T6
>::__type template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3,
make_tuple(_T0 __t0, _T1 __t1, _T2 __t2, _T3 __t3, _T4 __t4, typename _Tp4, typename _Tp5, typename _Tp6>
_T5 __t5, _T6 __t6) typename __stripped_tuple_type<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5,
{ _Tp6>::__type
return typename __stripped_tuple_type<_T0, _T1, _T2, _T3, _T4, _T5, make_tuple(_Tp0 __t0, _Tp1 __t1, _Tp2 __t2, _Tp3 __t3, _Tp4 __t4,
_T6>::__type(__t0, __t1, __t2, __t3, __t4, __t5, __t6);}; _Tp5 __t5, _Tp6 __t6)
{
template<typename _T0, typename _T1, typename _T2, typename _T3, return typename __stripped_tuple_type<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4,
typename _T4, typename _T5, typename _T6, typename _T7> _Tp5, _Tp6>::
typename __stripped_tuple_type<_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7 __type(__t0, __t1, __t2, __t3, __t4, __t5, __t6);
>::__type }
make_tuple(_T0 __t0, _T1 __t1, _T2 __t2, _T3 __t3, _T4 __t4,
_T5 __t5, _T6 __t6, _T7 __t7) template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3,
{ typename _Tp4, typename _Tp5, typename _Tp6, typename _Tp7>
return typename __stripped_tuple_type<_T0, _T1, _T2, _T3, _T4, _T5, typename __stripped_tuple_type<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5, _Tp6,
_T6, _T7>::__type(__t0, __t1, __t2, __t3, __t4, __t5, __t6, __t7);}; _Tp7>::__type
make_tuple(_Tp0 __t0, _Tp1 __t1, _Tp2 __t2, _Tp3 __t3, _Tp4 __t4,
template<typename _T0, typename _T1, typename _T2, typename _T3, _Tp5 __t5, _Tp6 __t6, _Tp7 __t7)
typename _T4, typename _T5, typename _T6, typename _T7, {
typename _T8> return typename __stripped_tuple_type<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4,
typename __stripped_tuple_type<_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _Tp5, _Tp6, _Tp7>::
_T8>::__type __type(__t0, __t1, __t2, __t3, __t4, __t5, __t6, __t7);
make_tuple(_T0 __t0, _T1 __t1, _T2 __t2, _T3 __t3, _T4 __t4, }
_T5 __t5, _T6 __t6, _T7 __t7, _T8 __t8)
{ template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3,
return typename __stripped_tuple_type<_T0, _T1, _T2, _T3, _T4, _T5, typename _Tp4, typename _Tp5, typename _Tp6, typename _Tp7,
_T6, _T7, _T8>::__type(__t0, __t1, __t2, __t3, __t4, __t5, __t6, __t7, __t8);}; typename _Tp8>
typename __stripped_tuple_type<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5, _Tp6,
template<typename _T0, typename _T1, typename _T2, typename _T3, _Tp7, _Tp8>::__type
typename _T4, typename _T5, typename _T6, typename _T7, make_tuple(_Tp0 __t0, _Tp1 __t1, _Tp2 __t2, _Tp3 __t3, _Tp4 __t4,
typename _T8, typename _T9> _Tp5 __t5, _Tp6 __t6, _Tp7 __t7, _Tp8 __t8)
typename __stripped_tuple_type<_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, {
_T8, _T9>::__type return typename __stripped_tuple_type<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4,
make_tuple(_T0 __t0, _T1 __t1, _T2 __t2, _T3 __t3, _T4 __t4, _Tp5, _Tp6, _Tp7, _Tp8>::
_T5 __t5, _T6 __t6, _T7 __t7, _T8 __t8, _T9 __t9) __type(__t0, __t1, __t2, __t3, __t4, __t5, __t6, __t7, __t8);
{ }
return typename __stripped_tuple_type<_T0, _T1, _T2, _T3, _T4, _T5,
_T6, _T7, _T8, _T9>::__type(__t0, __t1, __t2, __t3, __t4, __t5, __t6, __t7, __t8, __t9 template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3,
);}; typename _Tp4, typename _Tp5, typename _Tp6, typename _Tp7,
typename _Tp8, typename _Tp9>
typename __stripped_tuple_type<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5, _Tp6,
_Tp7, _Tp8, _Tp9>::__type
make_tuple(_Tp0 __t0, _Tp1 __t1, _Tp2 __t2, _Tp3 __t3, _Tp4 __t4,
_Tp5 __t5, _Tp6 __t6, _Tp7 __t7, _Tp8 __t8, _Tp9 __t9)
{
return typename __stripped_tuple_type<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4,
_Tp5, _Tp6, _Tp7, _Tp8, _Tp9>::
__type(__t0, __t1, __t2, __t3, __t4, __t5, __t6, __t7, __t8, __t9);
}
// A class (and instance) which can be used in 'tie' when an element
// of a tuple is not required
// A class (and instance) which can be used in 'tie' when a element
// is not required.
struct swallow_assign struct swallow_assign
{ {
template<class T> template<class T>
swallow_assign& swallow_assign&
operator=(const T&) operator=(const T&)
{ return *this; } { return *this; }
}; };
...@@ -1412,113 +1439,124 @@ namespace tr1 ...@@ -1412,113 +1439,124 @@ namespace tr1
swallow_assign ignore; swallow_assign ignore;
}; };
// extern swallow_assign ignore;
// Forms a tuple of references to a list of variables.
template< typename _Tp0>
tuple< _Tp0&>
tie( _Tp0& __t0)
{
return make_tuple( ref(__t0));
};
// Allows forms a tuple of references to a list of variables. template<typename _Tp0, typename _Tp1>
template<typename _T0> tuple<_Tp0&, _Tp1&>
tuple<_T0&> tie(_Tp0& __t0, _Tp1& __t1)
tie(_T0& __t0) {
{ return make_tuple(ref(__t0)); }; return make_tuple(ref(__t0), ref(__t1));
};
template<typename _T0, typename _T1>
tuple<_T0&, _T1&>
tie(_T0& __t0, _T1& __t1)
{ return make_tuple(ref(__t0), ref(__t1)); };
template<typename _T0, typename _T1, typename _T2> template<typename _Tp0, typename _Tp1, typename _Tp2>
tuple<_T0&, _T1&, _T2&> tuple<_Tp0&, _Tp1&, _Tp2&>
tie(_T0& __t0, _T1& __t1, _T2& __t2) tie(_Tp0& __t0, _Tp1& __t1, _Tp2& __t2)
{ return make_tuple(ref(__t0), ref(__t1), ref(__t2)); }; {
return make_tuple(ref(__t0), ref(__t1), ref(__t2));
};
template<typename _T0, typename _T1, typename _T2, typename _T3> template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3>
tuple<_T0&, _T1&, _T2&, _T3&> tuple<_Tp0&, _Tp1&, _Tp2&, _Tp3&>
tie(_T0& __t0, _T1& __t1, _T2& __t2, _T3& __t3) tie(_Tp0& __t0, _Tp1& __t1, _Tp2& __t2, _Tp3& __t3)
{ return make_tuple(ref(__t0), ref(__t1), ref(__t2), ref(__t3)); }; {
return make_tuple(ref(__t0), ref(__t1), ref(__t2), ref(__t3));
};
template<typename _T0, typename _T1, typename _T2, typename _T3, template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3,
typename _T4> typename _Tp4>
tuple<_T0&, _T1&, _T2&, _T3&, _T4&> tuple<_Tp0&, _Tp1&, _Tp2&, _Tp3&, _Tp4&>
tie(_T0& __t0, _T1& __t1, _T2& __t2, _T3& __t3, _T4& __t4) tie(_Tp0& __t0, _Tp1& __t1, _Tp2& __t2, _Tp3& __t3, _Tp4& __t4)
{ {
return make_tuple(ref(__t0), ref(__t1), ref(__t2), ref(__t3), ref(__t4)); return make_tuple(ref(__t0), ref(__t1), ref(__t2), ref(__t3),
ref(__t4));
}; };
template<typename _T0, typename _T1, typename _T2, typename _T3, template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3,
typename _T4, typename _T5> typename _Tp4, typename _Tp5>
tuple<_T0&, _T1&, _T2&, _T3&, _T4&, _T5&> tuple<_Tp0&, _Tp1&, _Tp2&, _Tp3&, _Tp4&, _Tp5&>
tie(_T0& __t0, _T1& __t1, _T2& __t2, _T3& __t3, _T4& __t4, _T5& __t5) tie(_Tp0& __t0, _Tp1& __t1, _Tp2& __t2, _Tp3& __t3, _Tp4& __t4,
_Tp5& __t5)
{ {
return make_tuple(ref(__t0), ref(__t1), ref(__t2), ref(__t3), return make_tuple(ref(__t0), ref(__t1), ref(__t2), ref(__t3), ref(__t4),
ref(__t4), ref(__t5)); ref(__t5));
}; };
template<typename _T0, typename _T1, typename _T2, typename _T3, template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3,
typename _T4, typename _T5, typename _T6> typename _Tp4, typename _Tp5, typename _Tp6>
tuple<_T0&, _T1&, _T2&, _T3&, _T4&, _T5&, _T6&> tuple<_Tp0&, _Tp1&, _Tp2&, _Tp3&, _Tp4&, _Tp5&, _Tp6&>
tie(_T0& __t0, _T1& __t1, _T2& __t2, _T3& __t3, _T4& __t4, tie(_Tp0& __t0, _Tp1& __t1, _Tp2& __t2, _Tp3& __t3, _Tp4& __t4, _Tp5& __t5,
_T5& __t5, _T6& __t6) _Tp6& __t6)
{ {
return make_tuple(ref(__t0), ref(__t1), ref(__t2), ref(__t3), return make_tuple(ref(__t0), ref(__t1), ref(__t2), ref(__t3), ref(__t4),
ref(__t4), ref(__t5), ref(__t6)); ref(__t5), ref(__t6));
}; };
template<typename _T0, typename _T1, typename _T2, typename _T3, template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3,
typename _T4, typename _T5, typename _T6, typename _T7> typename _Tp4, typename _Tp5, typename _Tp6, typename _Tp7>
tuple<_T0&, _T1&, _T2&, _T3&, _T4&, _T5&, _T6&, _T7&> tuple<_Tp0&, _Tp1&, _Tp2&, _Tp3&, _Tp4&, _Tp5&, _Tp6&, _Tp7&>
tie(_T0& __t0, _T1& __t1, _T2& __t2, _T3& __t3, _T4& __t4, tie(_Tp0& __t0, _Tp1& __t1, _Tp2& __t2, _Tp3& __t3, _Tp4& __t4, _Tp5& __t5,
_T5& __t5, _T6& __t6, _T7& __t7) _Tp6& __t6, _Tp7& __t7)
{ {
return make_tuple(ref(__t0), ref(__t1), ref(__t2), ref(__t3), return make_tuple(ref(__t0), ref(__t1), ref(__t2), ref(__t3), ref(__t4),
ref(__t4), ref(__t5), ref(__t6), ref(__t7)); ref(__t5), ref(__t6), ref(__t7));
}; };
template<typename _T0, typename _T1, typename _T2, typename _T3, template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3,
typename _T4, typename _T5, typename _T6, typename _T7, typename _Tp4, typename _Tp5, typename _Tp6, typename _Tp7,
typename _T8> typename _Tp8>
tuple<_T0&, _T1&, _T2&, _T3&, _T4&, _T5&, _T6&, _T7&, _T8&> tuple<_Tp0&, _Tp1&, _Tp2&, _Tp3&, _Tp4&, _Tp5&, _Tp6&, _Tp7&, _Tp8&>
tie(_T0& __t0, _T1& __t1, _T2& __t2, _T3& __t3, _T4& __t4, tie(_Tp0& __t0, _Tp1& __t1, _Tp2& __t2, _Tp3& __t3, _Tp4& __t4, _Tp5& __t5,
_T5& __t5, _T6& __t6, _T7& __t7, _T8& __t8) _Tp6& __t6, _Tp7& __t7, _Tp8& __t8)
{ {
return make_tuple(ref(__t0), ref(__t1), ref(__t2), ref(__t3), return make_tuple(ref(__t0), ref(__t1), ref(__t2), ref(__t3), ref(__t4),
ref(__t4), ref(__t5), ref(__t6), ref(__t7), ref(__t8)); ref(__t5), ref(__t6), ref(__t7), ref(__t8));
}; };
template<typename _T0, typename _T1, typename _T2, typename _T3, template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3,
typename _T4, typename _T5, typename _T6, typename _T7, typename _Tp4, typename _Tp5, typename _Tp6, typename _Tp7,
typename _T8, typename _T9> typename _Tp8, typename _Tp9>
tuple<_T0&, _T1&, _T2&, _T3&, _T4&, _T5&, _T6&, _T7&, _T8&, _T9&> tuple<_Tp0&, _Tp1&, _Tp2&, _Tp3&, _Tp4&, _Tp5&, _Tp6&, _Tp7&, _Tp8&,
tie(_T0& __t0, _T1& __t1, _T2& __t2, _T3& __t3, _T4& __t4, _Tp9&>
_T5& __t5, _T6& __t6, _T7& __t7, _T8& __t8, _T9& __t9) tie(_Tp0& __t0, _Tp1& __t1, _Tp2& __t2, _Tp3& __t3, _Tp4& __t4, _Tp5& __t5,
_Tp6& __t6, _Tp7& __t7, _Tp8& __t8, _Tp9& __t9)
{ {
return make_tuple(ref(__t0), ref(__t1), ref(__t2), ref(__t3), return make_tuple(ref(__t0), ref(__t1), ref(__t2), ref(__t3), ref(__t4),
ref(__t4), ref(__t5), ref(__t6), ref(__t7), ref(__t8), ref(__t5), ref(__t6), ref(__t7), ref(__t8),
ref(__t9)); ref(__t9));
}; };
// Various functions which give std::pair a tuple-like interface. // Various functions which give std::pair a tuple-like interface.
template<class _T1, class _T2> template<class _Tp1, class _Tp2>
struct tuple_size<std::pair<_T1, _T2> > struct tuple_size<std::pair<_Tp1, _Tp2> >
{ static const int value = 2; }; { static const int value = 2; };
template<class _T1, class _T2> template<class _Tp1, class _Tp2>
struct tuple_element<0, std::pair<_T1, _T2> > struct tuple_element<0, std::pair<_Tp1, _Tp2> >
{ typedef _T1 type; }; { typedef _Tp1 type; };
template<class _T1, class _T2> template<class _Tp1, class _Tp2>
struct tuple_element<1, std::pair<_T1, _T2> > struct tuple_element<1, std::pair<_Tp1, _Tp2> >
{ typedef _T2 type; }; { typedef _Tp2 type; };
template<int _I,class _T1,class _T2> template<int _I, class _Tp1, class _Tp2>
typename tuple_element<_I, tuple<_T1, _T2> >::type typename tuple_element<_I, tuple<_Tp1, _Tp2> >::type
get(pair<_T1, _T2>& __in) get(pair<_Tp1, _Tp2>& __in)
{ return get<_I>(tie(__in.first, __in.second)); } { return get<_I>(tie(__in.first, __in.second)); }
template<int _I,class _T1,class _T2> template<int _I, class _Tp1, class _Tp2>
typename tuple_element<_I, tuple<_T1, _T2> >::type typename tuple_element<_I, tuple<_Tp1, _Tp2> >::type
get(const pair<_T1, _T2>& __in) get(const pair<_Tp1, _Tp2>& __in)
{ return get<_I>(tie(__in.first, __in.second)); } { return get<_I>(tie(__in.first, __in.second)); }
} }
} }
#endif #endif
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment