diff options
author | bkoz <bkoz@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-10-28 21:18:56 +0000 |
---|---|---|
committer | bkoz <bkoz@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-10-28 21:18:56 +0000 |
commit | c85df9ac2ac1f38a34922276d563641e40eb41fa (patch) | |
tree | 27490ab3566606ab86bedaf2fbf54b85c8c9f197 | |
parent | 8a2df6f8bf15595048c1b26660e2169bec58e8d8 (diff) | |
download | gcc-c85df9ac2ac1f38a34922276d563641e40eb41fa.tar.gz |
2004-10-28 Chris Jefferson <chris@bubblescope.net>
PR libstdc++/18159
* include/tr1/tuple: Fix, change formatting.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@89782 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | libstdc++-v3/ChangeLog | 5 | ||||
-rw-r--r-- | libstdc++-v3/include/tr1/tuple | 2626 |
2 files changed, 1337 insertions, 1294 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 561c3670dc6..81f88ffda31 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,8 @@ +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> * include/ext/mt_allocator.h (__common_pool_policy): Add template diff --git a/libstdc++-v3/include/tr1/tuple b/libstdc++-v3/include/tr1/tuple index d17135ad153..272edc3cb91 100644 --- a/libstdc++-v3/include/tr1/tuple +++ b/libstdc++-v3/include/tr1/tuple @@ -36,1372 +36,1399 @@ namespace tr1 struct _NullClass { }; // Foward definition of the tuple class - template<typename _T0 = _NullClass, typename _T1 = _NullClass, - typename _T2 = _NullClass, typename _T3 = _NullClass, - typename _T4 = _NullClass, typename _T5 = _NullClass, - typename _T6 = _NullClass, typename _T7 = _NullClass, - typename _T8 = _NullClass, typename _T9 = _NullClass> + template<typename _Tp0 = _NullClass, typename _Tp1 = _NullClass, + typename _Tp2 = _NullClass, typename _Tp3 = _NullClass, + typename _Tp4 = _NullClass, typename _Tp5 = _NullClass, + typename _Tp6 = _NullClass, typename _Tp7 = _NullClass, + typename _Tp8 = _NullClass, typename _Tp9 = _NullClass> class tuple; // 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; - template<typename _T0, typename _T1, typename _T2, typename _T3, - typename _T4, typename _T5, typename _T6, typename _T7, - typename _T8, typename _T9> - struct tuple_element<0, tuple<_T0, _T1, _T2, _T3, _T4, _T5, _T6, - _T7, _T8, _T9> > - { typedef _T0 type; }; - - template<typename _T0, typename _T1, typename _T2, typename _T3, - typename _T4, typename _T5, typename _T6, typename _T7, - typename _T8, typename _T9> - struct tuple_element<1, tuple<_T0, _T1, _T2, _T3, _T4, _T5, _T6, - _T7, _T8, _T9> > - { typedef _T1 type; }; - - template<typename _T0, typename _T1, typename _T2, typename _T3, - typename _T4, typename _T5, typename _T6, typename _T7, - typename _T8, typename _T9> - struct tuple_element<2, tuple<_T0, _T1, _T2, _T3, _T4, _T5, _T6, - _T7, _T8, _T9> > - { typedef _T2 type; }; - - template<typename _T0, typename _T1, typename _T2, typename _T3, - typename _T4, typename _T5, typename _T6, typename _T7, - typename _T8, typename _T9> - struct tuple_element<3, tuple<_T0, _T1, _T2, _T3, _T4, _T5, _T6, - _T7, _T8, _T9> > - { typedef _T3 type; }; - - template<typename _T0, typename _T1, typename _T2, typename _T3, - typename _T4, typename _T5, typename _T6, typename _T7, - typename _T8, typename _T9> - struct tuple_element<4, tuple<_T0, _T1, _T2, _T3, _T4, _T5, _T6, - _T7, _T8, _T9> > - { typedef _T4 type; }; - - template<typename _T0, typename _T1, typename _T2, typename _T3, - typename _T4, typename _T5, typename _T6, typename _T7, - typename _T8, typename _T9> - struct tuple_element<5, tuple<_T0, _T1, _T2, _T3, _T4, _T5, _T6, - _T7, _T8, _T9> > - { typedef _T5 type; }; - - template<typename _T0, typename _T1, typename _T2, typename _T3, - typename _T4, typename _T5, typename _T6, typename _T7, - typename _T8, typename _T9> - struct tuple_element<6, tuple<_T0, _T1, _T2, _T3, _T4, _T5, _T6, - _T7, _T8, _T9> > - { typedef _T6 type; }; - - template<typename _T0, typename _T1, typename _T2, typename _T3, - typename _T4, typename _T5, typename _T6, typename _T7, - typename _T8, typename _T9> - struct tuple_element<7, tuple<_T0, _T1, _T2, _T3, _T4, _T5, _T6, - _T7, _T8, _T9> > - { typedef _T7 type; }; - - template<typename _T0, typename _T1, typename _T2, typename _T3, - typename _T4, typename _T5, typename _T6, typename _T7, - typename _T8, typename _T9> - struct tuple_element<8, tuple<_T0, _T1, _T2, _T3, _T4, _T5, _T6, - _T7, _T8, _T9> > - { typedef _T8 type; }; - - template<typename _T0, typename _T1, typename _T2, typename _T3, - typename _T4, typename _T5, typename _T6, typename _T7, - typename _T8, typename _T9> - struct tuple_element<9, tuple<_T0, _T1, _T2, _T3, _T4, _T5, _T6, - _T7, _T8, _T9> > - { typedef _T9 type; }; - + template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3, + typename _Tp4, typename _Tp5, typename _Tp6, typename _Tp7, + typename _Tp8, typename _Tp9> + struct tuple_element<0, tuple<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5, _Tp6, + _Tp7, _Tp8, _Tp9> > + { typedef _Tp0 type; }; + + template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3, + typename _Tp4, typename _Tp5, typename _Tp6, typename _Tp7, + typename _Tp8, typename _Tp9> + struct tuple_element<1, tuple<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5, _Tp6, + _Tp7, _Tp8, _Tp9> > + { typedef _Tp1 type; }; + + template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3, + typename _Tp4, typename _Tp5, typename _Tp6, typename _Tp7, + typename _Tp8, typename _Tp9> + struct tuple_element<2, tuple<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5, _Tp6, + _Tp7, _Tp8, _Tp9> > + { typedef _Tp2 type; }; + + template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3, + typename _Tp4, typename _Tp5, typename _Tp6, typename _Tp7, + typename _Tp8, typename _Tp9> + struct tuple_element<3, tuple<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5, _Tp6, + _Tp7, _Tp8, _Tp9> > + { typedef _Tp3 type; }; + + template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3, + typename _Tp4, typename _Tp5, typename _Tp6, typename _Tp7, + typename _Tp8, typename _Tp9> + struct tuple_element<4, tuple<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5, _Tp6, + _Tp7, _Tp8, _Tp9> > + { typedef _Tp4 type; }; + + template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3, + typename _Tp4, typename _Tp5, typename _Tp6, typename _Tp7, + typename _Tp8, typename _Tp9> + struct tuple_element<5, tuple<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5, _Tp6, + _Tp7, _Tp8, _Tp9> > + { typedef _Tp5 type; }; + + template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3, + typename _Tp4, typename _Tp5, typename _Tp6, typename _Tp7, + typename _Tp8, typename _Tp9> + struct tuple_element<6, tuple<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5, _Tp6, + _Tp7, _Tp8, _Tp9> > + { typedef _Tp6 type; }; + + template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3, + typename _Tp4, typename _Tp5, typename _Tp6, typename _Tp7, + typename _Tp8, typename _Tp9> + struct tuple_element<7, tuple<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5, _Tp6, + _Tp7, _Tp8, _Tp9> > + { typedef _Tp7 type; }; + + template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3, + typename _Tp4, typename _Tp5, typename _Tp6, typename _Tp7, + typename _Tp8, typename _Tp9> + struct tuple_element<8, tuple<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5, _Tp6, + _Tp7, _Tp8, _Tp9> > + { typedef _Tp8 type; }; + + template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3, + typename _Tp4, typename _Tp5, typename _Tp6, typename _Tp7, + typename _Tp8, typename _Tp9> + struct tuple_element<9, tuple<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5, _Tp6, + _Tp7, _Tp8, _Tp9> > + { typedef _Tp9 type; }; + // Finds the size of a given tuple type. - // NB: Can't this be done via value->type conversions in the generic - // tuple class, say with an enum? - template<typename _T> + template<typename _Tp> struct tuple_size; template<> - struct tuple_size<tuple<_NullClass, _NullClass, _NullClass, _NullClass, - _NullClass, _NullClass, _NullClass, _NullClass, + struct tuple_size<tuple<_NullClass, _NullClass, _NullClass, _NullClass, + _NullClass, _NullClass, _NullClass, _NullClass, _NullClass, _NullClass> > { static const int value = 0; }; - - template<typename _T0> - struct tuple_size<tuple<_T0, _NullClass, _NullClass, _NullClass, - _NullClass, _NullClass, _NullClass, _NullClass, + + template< typename _Tp0> + struct tuple_size<tuple< _Tp0, _NullClass, _NullClass, _NullClass, + _NullClass, _NullClass, _NullClass, _NullClass, _NullClass, _NullClass> > { static const int value = 1; }; - - template<typename _T0, typename _T1> - struct tuple_size<tuple<_T0, _T1, _NullClass, _NullClass, _NullClass, - _NullClass, _NullClass, _NullClass, _NullClass, + + template<typename _Tp0, typename _Tp1> + struct tuple_size<tuple<_Tp0, _Tp1, _NullClass, _NullClass, _NullClass, + _NullClass, _NullClass, _NullClass, _NullClass, _NullClass> > { static const int value = 2; }; - - template<typename _T0, typename _T1, typename _T2> - struct tuple_size<tuple<_T0, _T1, _T2, _NullClass, _NullClass, - _NullClass, _NullClass, _NullClass, _NullClass, + + template<typename _Tp0, typename _Tp1, typename _Tp2> + struct tuple_size<tuple<_Tp0, _Tp1, _Tp2, _NullClass, _NullClass, + _NullClass, _NullClass, _NullClass, _NullClass, _NullClass> > { static const int value = 3; }; - - template<typename _T0, typename _T1, typename _T2, typename _T3> - struct tuple_size<tuple<_T0, _T1, _T2, _T3, _NullClass, _NullClass, + + template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3> + struct tuple_size<tuple<_Tp0, _Tp1, _Tp2, _Tp3, _NullClass, _NullClass, _NullClass, _NullClass, _NullClass, _NullClass> > { static const int value = 4; }; - - template<typename _T0, typename _T1, typename _T2, typename _T3, - typename _T4> - struct tuple_size<tuple<_T0, _T1, _T2, _T3, _T4, _NullClass, + + template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3, + typename _Tp4> + struct tuple_size<tuple<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _NullClass, _NullClass, _NullClass, _NullClass, _NullClass> > { static const int value = 5; }; - - template<typename _T0, typename _T1, typename _T2, typename _T3, - typename _T4, typename _T5> - struct tuple_size<tuple<_T0, _T1, _T2, _T3, _T4, _T5, _NullClass, + + template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3, + typename _Tp4, typename _Tp5> + struct tuple_size<tuple<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5, _NullClass, _NullClass, _NullClass, _NullClass> > { static const int value = 6; }; - - template<typename _T0, typename _T1, typename _T2, typename _T3, - typename _T4, typename _T5, typename _T6> - struct tuple_size<tuple<_T0, _T1, _T2, _T3, _T4, _T5, _T6, + + template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3, + typename _Tp4, typename _Tp5, typename _Tp6> + struct tuple_size<tuple<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5, _Tp6, _NullClass, _NullClass, _NullClass> > { static const int value = 7; }; - - template<typename _T0, typename _T1, typename _T2, typename _T3, - typename _T4, typename _T5, typename _T6, typename _T7> - struct tuple_size<tuple<_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, + + template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3, + typename _Tp4, typename _Tp5, typename _Tp6, typename _Tp7> + struct tuple_size<tuple<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5, _Tp6, _Tp7, _NullClass, _NullClass> > { static const int value = 8; }; - - template<typename _T0, typename _T1, typename _T2, typename _T3, - typename _T4, typename _T5, typename _T6, typename _T7, - typename _T8> - struct tuple_size<tuple<_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, - _T8, _NullClass> > + + template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3, + typename _Tp4, typename _Tp5, typename _Tp6, typename _Tp7, + typename _Tp8> + struct tuple_size<tuple<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5, _Tp6, _Tp7, + _Tp8, _NullClass> > { static const int value = 9; }; - - template<typename _T0, typename _T1, typename _T2, typename _T3, - typename _T4, typename _T5, typename _T6, typename _T7, - typename _T8, typename _T9> - struct tuple_size<tuple<_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> + struct tuple_size<tuple<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5, _Tp6, _Tp7, + _Tp8, _Tp9> > { static const int value = 10; }; - + // Adds a const reference to a non-reference type. - template<typename _T> - struct __add_const_ref - { typedef const _T& type; }; - - template<typename _T> - struct __add_const_ref<_T&> - { typedef _T& type; }; - + template<typename _Tp> + struct __add_c_ref + { typedef const _Tp& type; }; + + template<typename _Tp> + struct __add_c_ref<_Tp&> + { typedef _Tp& type; }; + // Adds a reference to a non-reference type. - template<typename _T> + template<typename _Tp> struct __add_ref - { typedef _T& type; }; - - template<typename _T> - struct __add_ref<_T&> - { typedef _T& type; }; - + { typedef _Tp& type; }; + + template<typename _Tp> + struct __add_ref<_Tp&> + { typedef _Tp& type; }; + // The empty tuple. template<> - class tuple<_NullClass, _NullClass, _NullClass, _NullClass, _NullClass, - _NullClass, _NullClass, _NullClass, _NullClass, _NullClass> + class tuple<_NullClass, _NullClass, _NullClass, _NullClass, _NullClass, + _NullClass, _NullClass, _NullClass, _NullClass, _NullClass> { public: tuple() { } - + tuple(const tuple& __in) { } - + tuple& operator=(const tuple& __in) { return *this; } }; - - template<typename _T0> - class tuple<_T0, _NullClass, _NullClass, _NullClass, _NullClass, - _NullClass, _NullClass, _NullClass, _NullClass, _NullClass> + + template< typename _Tp0> + class tuple< _Tp0, _NullClass, _NullClass, _NullClass, _NullClass, + _NullClass, _NullClass, _NullClass, _NullClass, _NullClass> { - _T0 __t0; + _Tp0 _M_t0; public: tuple() { } - - explicit tuple(typename __add_const_ref<_T0>::type __in0): - __t0(__in0) + + explicit tuple( typename __add_c_ref<_Tp0>::type __in0): + _M_t0(__in0) { } - - tuple(const tuple& __in): - __t0(__in.__t0) - { } - template <typename _U0> - tuple(const tuple<_U0>& __in): - __t0(__in.__t0) - { } - - tuple& operator=(const tuple& __in) - { - __t0=__in.__t0; - return *this; - } - - template <typename _U0> - tuple& - operator=(const tuple<_U0>& __in) - { - __t0=__in.__t0; - return *this; - } - template<int __i, typename _U> - friend class __get_helper; - template<typename, typename, typename, typename, typename, typename, - typename, typename, typename, typename> - friend class tuple; + + tuple(const tuple& __in): + _M_t0(__in._M_t0) + { } + + template< typename _Up0> + tuple(const tuple< _Up0>& __in): + _M_t0(__in._M_t0) + { } + + tuple& + operator=(const tuple& __in) + { + _M_t0=__in._M_t0; + return *this; + } + + template< typename _Up0> + tuple& + operator=(const tuple< _Up0>& __in) + { + _M_t0=__in._M_t0; + 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> - class tuple<_T0, _T1, _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) + + template<typename _Tp0, typename _Tp1> + class tuple<_Tp0, _Tp1, _NullClass, _NullClass, _NullClass, _NullClass, + _NullClass, _NullClass, _NullClass, _NullClass> { - __t0=__in.__t0; - __t1=__in.__t1; - return *this; - } - template<int __i, typename _U> - friend class __get_helper; - template<typename, typename, typename, typename, typename, typename, - typename, typename, typename, typename> - friend class tuple; + _Tp0 _M_t0; + _Tp1 _M_t1; + + public: + tuple() + { } + + explicit tuple(typename __add_c_ref<_Tp0>::type __in0, + 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> - class tuple<_T0, _T1, _T2, _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) + + template<typename _Tp0, typename _Tp1, typename _Tp2> + class tuple<_Tp0, _Tp1, _Tp2, _NullClass, _NullClass, _NullClass, + _NullClass, _NullClass, _NullClass, _NullClass> { - __t0=__in.__t0; - __t1=__in.__t1; - __t2=__in.__t2; - return *this; - } - template<int __i, typename _U> - friend class __get_helper; - template<typename, typename, typename, typename, typename, typename, - typename, typename, typename, typename> - friend class tuple; + _Tp0 _M_t0; + _Tp1 _M_t1; + _Tp2 _M_t2; + + public: + tuple() + { } + + explicit tuple(typename __add_c_ref<_Tp0>::type __in0, + 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> - class tuple<_T0, _T1, _T2, _T3, _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) + + template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3> + class tuple<_Tp0, _Tp1, _Tp2, _Tp3, _NullClass, _NullClass, _NullClass, + _NullClass, _NullClass, _NullClass> { - __t0=__in.__t0; - __t1=__in.__t1; - __t2=__in.__t2; - __t3=__in.__t3; - return *this; - } - template<int __i, typename _U> - friend class __get_helper; - template<typename, typename, typename, typename, typename, typename, - typename, typename, typename, typename> - friend class tuple; + _Tp0 _M_t0; + _Tp1 _M_t1; + _Tp2 _M_t2; + _Tp3 _M_t3; + + public: + tuple() + { } + + explicit tuple(typename __add_c_ref<_Tp0>::type __in0, + 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, - typename _T4> - class tuple<_T0, _T1, _T2, _T3, _T4, _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) + + template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3, + typename _Tp4> + class tuple<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _NullClass, _NullClass, + _NullClass, _NullClass, _NullClass> { - __t0=__in.__t0; - __t1=__in.__t1; - __t2=__in.__t2; - __t3=__in.__t3; - __t4=__in.__t4; - return *this; - } - template<int __i, typename _U> - friend class __get_helper; - template<typename, typename, typename, typename, typename, typename, - typename, typename, typename, typename> - friend class tuple; + _Tp0 _M_t0; + _Tp1 _M_t1; + _Tp2 _M_t2; + _Tp3 _M_t3; + _Tp4 _M_t4; + + public: + tuple() + { } + + explicit tuple(typename __add_c_ref<_Tp0>::type __in0, + 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, - typename _T4, typename _T5> - class tuple<_T0, _T1, _T2, _T3, _T4, _T5, _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) + + template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3, + typename _Tp4, typename _Tp5> + class tuple<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5, _NullClass, _NullClass, + _NullClass, _NullClass> { - __t0=__in.__t0; - __t1=__in.__t1; - __t2=__in.__t2; - __t3=__in.__t3; - __t4=__in.__t4; - __t5=__in.__t5; - return *this; - } - template<int __i, typename _U> - friend class __get_helper; - template<typename, typename, typename, typename, typename, typename, - typename, typename, typename, typename> - friend class tuple; + _Tp0 _M_t0; + _Tp1 _M_t1; + _Tp2 _M_t2; + _Tp3 _M_t3; + _Tp4 _M_t4; + _Tp5 _M_t5; + + public: + tuple() + { } + + explicit tuple(typename __add_c_ref<_Tp0>::type __in0, + 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, - typename _T4, typename _T5, typename _T6> - class tuple<_T0, _T1, _T2, _T3, _T4, _T5, _T6, _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) + + template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3, + typename _Tp4, typename _Tp5, typename _Tp6> + class tuple<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5, _Tp6, _NullClass, + _NullClass, _NullClass> { - __t0=__in.__t0; - __t1=__in.__t1; - __t2=__in.__t2; - __t3=__in.__t3; - __t4=__in.__t4; - __t5=__in.__t5; - __t6=__in.__t6; - return *this; - } - template<int __i, typename _U> - friend class __get_helper; - template<typename, typename, typename, typename, typename, typename, - typename, typename, typename, typename> - friend class tuple; + _Tp0 _M_t0; + _Tp1 _M_t1; + _Tp2 _M_t2; + _Tp3 _M_t3; + _Tp4 _M_t4; + _Tp5 _M_t5; + _Tp6 _M_t6; + + public: + tuple() + { } + + explicit tuple(typename __add_c_ref<_Tp0>::type __in0, + 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, - typename _T4, typename _T5, typename _T6, typename _T7> - class tuple<_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _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) + + template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3, + typename _Tp4, typename _Tp5, typename _Tp6, typename _Tp7> + class tuple<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5, _Tp6, _Tp7, _NullClass, + _NullClass> { - __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<int __i, typename _U> - friend class __get_helper; - template<typename, typename, typename, typename, typename, typename, - typename, typename, typename, typename> - friend class tuple; + _Tp0 _M_t0; + _Tp1 _M_t1; + _Tp2 _M_t2; + _Tp3 _M_t3; + _Tp4 _M_t4; + _Tp5 _M_t5; + _Tp6 _M_t6; + _Tp7 _M_t7; + + public: + tuple() + { } + + explicit tuple(typename __add_c_ref<_Tp0>::type __in0, + 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, - typename _T4, typename _T5, typename _T6, typename _T7, - typename _T8> - class tuple<_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, - _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) + + template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3, + typename _Tp4, typename _Tp5, typename _Tp6, typename _Tp7, + typename _Tp8> + class tuple<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5, _Tp6, _Tp7, _Tp8, + _NullClass> { - __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<int __i, typename _U> - friend class __get_helper; - template<typename, typename, typename, typename, typename, typename, - typename, typename, typename, typename> - friend class tuple; + _Tp0 _M_t0; + _Tp1 _M_t1; + _Tp2 _M_t2; + _Tp3 _M_t3; + _Tp4 _M_t4; + _Tp5 _M_t5; + _Tp6 _M_t6; + _Tp7 _M_t7; + _Tp8 _M_t8; + + public: + tuple() + { } + + explicit tuple(typename __add_c_ref<_Tp0>::type __in0, + 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, - typename _T4, typename _T5, typename _T6, typename _T7, - typename _T8, typename _T9> - 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) + + template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3, + typename _Tp4, typename _Tp5, typename _Tp6, typename _Tp7, + typename _Tp8, typename _Tp9> + class tuple { - __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<int __i, typename _U> - friend class __get_helper; - template<typename, typename, typename, typename, typename, typename, - typename, typename, typename, typename> - friend class tuple; + _Tp0 _M_t0; + _Tp1 _M_t1; + _Tp2 _M_t2; + _Tp3 _M_t3; + _Tp4 _M_t4; + _Tp5 _M_t5; + _Tp6 _M_t6; + _Tp7 _M_t7; + _Tp8 _M_t8; + _Tp9 _M_t9; + + public: + tuple() + { } + + explicit tuple(typename __add_c_ref<_Tp0>::type __in0, + 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 - template<int __i, typename _T> + template<int __i, typename _Tp> struct __get_helper; - template<typename _T> - struct __get_helper<0, _T> + template<typename _Tp> + struct __get_helper<0, _Tp> { - static typename __add_ref<typename tuple_element<0, _T>::type>::type - get_value(_T& __in) - { return __in.__t0; } + static typename __add_ref<typename tuple_element<0, _Tp>::type>::type + get_value(_Tp& __in) + { return __in._M_t0; } - static typename __add_const_ref<typename tuple_element<0, _T>::type>::type - get_value(const _T& __in) - { return __in.__t0; } + static typename __add_c_ref<typename tuple_element<0, _Tp>::type>::type + get_value(const _Tp& __in) + { return __in._M_t0; } }; - - template<typename _T> - struct __get_helper<1, _T> - { - 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) + + template<typename _Tp> + struct __get_helper<1, _Tp> { - return __in.__t5; - } - }; - - template<typename _T> - struct __get_helper<6, _T> - { - static typename __add_ref<typename tuple_element<6, _T>::type>::type - get_value(_T& __in) + static typename __add_ref<typename tuple_element<1, _Tp>::type>::type + get_value(_Tp& __in) + { return __in._M_t1; } + + static typename __add_c_ref<typename tuple_element<1, _Tp>::type>::type + get_value(const _Tp& __in) + { return __in._M_t1; } + }; + + template<typename _Tp> + struct __get_helper<2, _Tp> { - return __in.__t6; - } - static typename __add_const_ref<typename tuple_element<6, _T>::type>::type - get_value(const _T& __in) + static typename __add_ref<typename tuple_element<2, _Tp>::type>::type + get_value(_Tp& __in) + { return __in._M_t2; } + + 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; - } - }; - - template<typename _T> - struct __get_helper<7, _T> - { - static typename __add_ref<typename tuple_element<7, _T>::type>::type - get_value(_T& __in) + static typename __add_ref<typename tuple_element<3, _Tp>::type>::type + get_value(_Tp& __in) + { return __in._M_t3; } + + static typename __add_c_ref<typename tuple_element<3, _Tp>::type>::type + get_value(const _Tp& __in) + { return __in._M_t3; } + }; + + template<typename _Tp> + struct __get_helper<4, _Tp> { - return __in.__t7; - } - static typename __add_const_ref<typename tuple_element<7, _T>::type>::type - get_value(const _T& __in) + static typename __add_ref<typename tuple_element<4, _Tp>::type>::type + get_value(_Tp& __in) + { return __in._M_t4; } + + 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; - } - }; - - template<typename _T> - struct __get_helper<8, _T> - { - static typename __add_ref<typename tuple_element<8, _T>::type>::type - get_value(_T& __in) + static typename __add_ref<typename tuple_element<5, _Tp>::type>::type + get_value(_Tp& __in) + { return __in._M_t5; } + + static typename __add_c_ref<typename tuple_element<5, _Tp>::type>::type + get_value(const _Tp& __in) + { return __in._M_t5; } + }; + + template<typename _Tp> + struct __get_helper<6, _Tp> { - return __in.__t8; - } - static typename __add_const_ref<typename tuple_element<8, _T>::type>::type - get_value(const _T& __in) + static typename __add_ref<typename tuple_element<6, _Tp>::type>::type + get_value(_Tp& __in) + { return __in._M_t6; } + + 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; - } - }; - - template<typename _T> - struct __get_helper<9, _T> - { - static typename __add_ref<typename tuple_element<9, _T>::type>::type - get_value(_T& __in) + static typename __add_ref<typename tuple_element<7, _Tp>::type>::type + get_value(_Tp& __in) + { return __in._M_t7; } + + static typename __add_c_ref<typename tuple_element<7, _Tp>::type>::type + get_value(const _Tp& __in) + { return __in._M_t7; } + }; + + template<typename _Tp> + struct __get_helper<8, _Tp> { - return __in.__t9; - } - static typename __add_const_ref<typename tuple_element<9, _T>::type>::type - get_value(const _T& __in) + static typename __add_ref<typename tuple_element<8, _Tp>::type>::type + get_value(_Tp& __in) + { return __in._M_t8; } + + 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. * Any const or non-const ref elements are returned with their original type */ - template<int __i, typename _T0, typename _T1, typename _T2, typename _T3, - typename _T4, typename _T5, typename _T6, typename _T7, - typename _T8, typename _T9> - typename __add_ref<typename tuple_element<__i,tuple<_T0, _T1, _T2, _T3, - _T4, _T5, _T6, _T7, _T8, _T9> >::type>::type - get(tuple<_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9>& __t) - { - return __get_helper<__i,tuple<_T0, _T1, _T2, _T3, _T4, _T5, _T6, - _T7, _T8, _T9> >::get_value(__t); - } + template<int __i, typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3, + typename _Tp4, typename _Tp5, typename _Tp6, typename _Tp7, + typename _Tp8, typename _Tp9> + typename __add_ref<typename tuple_element<__i, tuple<_Tp0, _Tp1, _Tp2, + _Tp3, _Tp4, _Tp5, + _Tp6, _Tp7, _Tp8, + _Tp9> >::type>::type + get(tuple<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5, _Tp6, _Tp7, _Tp8, + _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. * Any const or non-const ref elements are returned with their original type */ - template<int __i, typename _T0, typename _T1, typename _T2, typename _T3, - typename _T4, typename _T5, typename _T6, typename _T7, - typename _T8, typename _T9> - typename __add_const_ref<typename tuple_element<__i,tuple<_T0, _T1, _T2, - _T3, _T4, _T5, _T6, _T7, _T8, _T9> >::type>::type - get(const tuple<_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9 - >& __t) - { - return __get_helper<__i,tuple<_T0, _T1, _T2, _T3, _T4, _T5, _T6, - _T7, _T8, _T9> >::get_value(__t); - } + template<int __i, typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3, + typename _Tp4, typename _Tp5, typename _Tp6, typename _Tp7, + typename _Tp8, typename _Tp9> + typename __add_c_ref<typename tuple_element<__i, tuple<_Tp0, _Tp1, _Tp2, + _Tp3, _Tp4, _Tp5, + _Tp6, _Tp7, _Tp8, + _Tp9> >::type>::type + get(const tuple<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5, _Tp6, _Tp7, _Tp8, + _Tp9>& __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 - template<int __check_equal_size, int __i, int __j, typename _T, typename _U> - struct __tuple_compare; + template<int __check_equal_size, int __i, int __j, typename _Tp, typename _Up> + struct __tuple_compare; - template<int __i, int __j, typename _T, typename _U> - struct __tuple_compare<0, __i, __j, _T, _U> - { - 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) + template<int __i, int __j, typename _Tp, typename _Up> + struct __tuple_compare<0, __i, __j, _Tp, _Up> { - return (get<__i>(__t) >= get<__i>(__u)) && (!(get<__i>(__u)>=get<__i>(__t)) || - __tuple_compare<0, __i+1, __j, _T, _U>::__geq(__t, __u) ); - } - }; - - template<int __i, typename _T, typename _U> - struct __tuple_compare<0, __i, __i, _T, _U> - { - static bool __eq(const _T&, const _U&) - { - return true; - } - static bool __neq(const _T&, const _U&) - { - return false; - } - static bool __leq(const _T&, const _U&) - { - return true; - } - static bool __geq(const _T&, const _U&) - { - return true; - } - static bool __less(const _T&, const _U&) - { - return false; - } - static bool __greater(const _T&, const _U&) + static bool __eq(const _Tp& __t, const _Up& __u) + { + return get<__i>(__t) == get<__i>(__u) && + __tuple_compare<0, __i+1, __j, _Tp, _Up>::__eq(__t, __u); + } + static bool __neq(const _Tp& __t, const _Up& __u) + { + return get<__i>(__t) != get<__i>(__u) || + __tuple_compare<0, __i+1, __j, _Tp, _Up>::__neq(__t, __u); + } + static bool __less(const _Tp& __t, const _Up& __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); + } + static bool __greater(const _Tp& __t, const _Up& __u) + { + return (get<__i>(__t) > get<__i>(__u)) || !(get<__i>(__u) > get<__i>(__t)) && + __tuple_compare<0, __i+1, __j, _Tp, _Up>::__greater(__t, __u); + } + static bool __leq(const _Tp& __t, const _Up& __u) + { + 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 __geq(const _Tp& __t, const _Up& __u) + { + return (get<__i>(__t) >= get<__i>(__u)) && (!(get<__i>(__u)>=get<__i>(__t)) || + __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, - typename _T4, typename _T5, typename _T6, typename _T7, - typename _T8, typename _T9, typename _U0, typename _U1, - typename _U2, typename _U3, typename _U4, typename _U5, - typename _U6, typename _U7, typename _U8, typename _U9> + template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3, + typename _Tp4, typename _Tp5, typename _Tp6, typename _Tp7, + typename _Tp8, typename _Tp9, typename _Up0, typename _Up1, + typename _Up2, typename _Up3, typename _Up4, typename _Up5, + typename _Up6, typename _Up7, typename _Up8, typename _Up9> bool - operator==(const tuple<_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, - _T9>& __t, const tuple<_U0, _U1, _U2, _U3, _U4, _U5, _U6, - _U7, _U8, _U9>& __u) + operator==(const tuple<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5, _Tp6, _Tp7, _Tp8, _Tp9>& __t, + const tuple<_Up0, _Up1, _Up2, _Up3, _Up4, _Up5, _Up6, _Up7, _Up8, _Up9>& __u) { - typedef tuple<_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9 - > __T_tuple; - typedef tuple<_U0, _U1, _U2, _U3, _U4, _U5, _U6, _U7, _U8, _U9 - > __U_tuple; - return __tuple_compare<tuple_size<__T_tuple>::value - - tuple_size<__U_tuple>::value, 0, - tuple_size<__T_tuple>::value, __T_tuple, __U_tuple>::__eq(__t, __u); + typedef tuple<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5, _Tp6, _Tp7, _Tp8, + _Tp9> __t_tuple; + typedef tuple<_Up0, _Up1, _Up2, _Up3, _Up4, _Up5, _Up6, _Up7, _Up8, + _Up9> __u_tuple; + return __tuple_compare<tuple_size<__t_tuple>::value - + tuple_size<__u_tuple>::value, 0, + tuple_size<__t_tuple>::value, __t_tuple, __u_tuple>::__eq(__t, __u); } - template<typename _T0, typename _T1, typename _T2, typename _T3, - typename _T4, typename _T5, typename _T6, typename _T7, - typename _T8, typename _T9, typename _U0, typename _U1, - typename _U2, typename _U3, typename _U4, typename _U5, - typename _U6, typename _U7, typename _U8, typename _U9> + template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3, + typename _Tp4, typename _Tp5, typename _Tp6, typename _Tp7, + typename _Tp8, typename _Tp9, typename _Up0, typename _Up1, + typename _Up2, typename _Up3, typename _Up4, typename _Up5, + typename _Up6, typename _Up7, typename _Up8, typename _Up9> bool - operator!=(const tuple<_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, - _T9>& __t, const tuple<_U0, _U1, _U2, _U3, _U4, _U5, _U6, - _U7, _U8, _U9>& __u) + operator!=(const tuple<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5, _Tp6, _Tp7, _Tp8, _Tp9>& __t, + const tuple<_Up0, _Up1, _Up2, _Up3, _Up4, _Up5, _Up6, _Up7, _Up8, _Up9>& __u) { - typedef tuple<_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9 - > __T_tuple; - typedef tuple<_U0, _U1, _U2, _U3, _U4, _U5, _U6, _U7, _U8, _U9 - > __U_tuple; - return __tuple_compare<tuple_size<__T_tuple>::value - - tuple_size<__U_tuple>::value, 0, - tuple_size<__T_tuple>::value, __T_tuple, __U_tuple>::__neq(__t, __u); + typedef tuple<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5, _Tp6, _Tp7, _Tp8, + _Tp9> __t_tuple; + typedef tuple<_Up0, _Up1, _Up2, _Up3, _Up4, _Up5, _Up6, _Up7, _Up8, + _Up9> __u_tuple; + return __tuple_compare<tuple_size<__t_tuple>::value - + tuple_size<__u_tuple>::value, 0, + tuple_size<__t_tuple>::value, __t_tuple, __u_tuple>::__neq(__t, __u); } - template<typename _T0, typename _T1, typename _T2, typename _T3, - typename _T4, typename _T5, typename _T6, typename _T7, - typename _T8, typename _T9, typename _U0, typename _U1, - typename _U2, typename _U3, typename _U4, typename _U5, - typename _U6, typename _U7, typename _U8, typename _U9> + template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3, + typename _Tp4, typename _Tp5, typename _Tp6, typename _Tp7, + typename _Tp8, typename _Tp9, typename _Up0, typename _Up1, + typename _Up2, typename _Up3, typename _Up4, typename _Up5, + typename _Up6, typename _Up7, typename _Up8, typename _Up9> bool - operator<(const tuple<_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, - _T9>& __t, const tuple<_U0, _U1, _U2, _U3, _U4, _U5, _U6, - _U7, _U8, _U9>& __u) + operator<(const tuple<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5, _Tp6, _Tp7, _Tp8, _Tp9>& __t, + const tuple<_Up0, _Up1, _Up2, _Up3, _Up4, _Up5, _Up6, _Up7, _Up8, _Up9>& __u) { - typedef tuple<_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9 - > __T_tuple; - typedef tuple<_U0, _U1, _U2, _U3, _U4, _U5, _U6, _U7, _U8, _U9 - > __U_tuple; - return __tuple_compare<tuple_size<__T_tuple>::value - - tuple_size<__U_tuple>::value, 0, - tuple_size<__T_tuple>::value, __T_tuple, __U_tuple>::__less(__t, __u); + typedef tuple<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5, _Tp6, _Tp7, _Tp8, + _Tp9> __t_tuple; + typedef tuple<_Up0, _Up1, _Up2, _Up3, _Up4, _Up5, _Up6, _Up7, _Up8, + _Up9> __u_tuple; + return __tuple_compare<tuple_size<__t_tuple>::value - + tuple_size<__u_tuple>::value, 0, + tuple_size<__t_tuple>::value, __t_tuple, __u_tuple>::__less(__t, __u); } - template<typename _T0, typename _T1, typename _T2, typename _T3, - typename _T4, typename _T5, typename _T6, typename _T7, - typename _T8, typename _T9, typename _U0, typename _U1, - typename _U2, typename _U3, typename _U4, typename _U5, - typename _U6, typename _U7, typename _U8, typename _U9> + template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3, + typename _Tp4, typename _Tp5, typename _Tp6, typename _Tp7, + typename _Tp8, typename _Tp9, typename _Up0, typename _Up1, + typename _Up2, typename _Up3, typename _Up4, typename _Up5, + typename _Up6, typename _Up7, typename _Up8, typename _Up9> bool - operator>(const tuple<_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, - _T9>& __t, const tuple<_U0, _U1, _U2, _U3, _U4, _U5, _U6, - _U7, _U8, _U9>& __u) + operator>(const tuple<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5, _Tp6, _Tp7, _Tp8, _Tp9>& __t, + const tuple<_Up0, _Up1, _Up2, _Up3, _Up4, _Up5, _Up6, _Up7, _Up8, _Up9>& __u) { - typedef tuple<_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9 - > __T_tuple; - typedef tuple<_U0, _U1, _U2, _U3, _U4, _U5, _U6, _U7, _U8, _U9 - > __U_tuple; - return __tuple_compare<tuple_size<__T_tuple>::value - - tuple_size<__U_tuple>::value, 0, - tuple_size<__T_tuple>::value, __T_tuple, __U_tuple>::__greater(__t, __u); + typedef tuple<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5, _Tp6, _Tp7, _Tp8, + _Tp9> __t_tuple; + typedef tuple<_Up0, _Up1, _Up2, _Up3, _Up4, _Up5, _Up6, _Up7, _Up8, + _Up9> __u_tuple; + return __tuple_compare<tuple_size<__t_tuple>::value - + tuple_size<__u_tuple>::value, 0, + tuple_size<__t_tuple>::value, __t_tuple, __u_tuple>::__greater(__t, __u); } - template<typename _T0, typename _T1, typename _T2, typename _T3, - typename _T4, typename _T5, typename _T6, typename _T7, - typename _T8, typename _T9, typename _U0, typename _U1, - typename _U2, typename _U3, typename _U4, typename _U5, - typename _U6, typename _U7, typename _U8, typename _U9> + template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3, + typename _Tp4, typename _Tp5, typename _Tp6, typename _Tp7, + typename _Tp8, typename _Tp9, typename _Up0, typename _Up1, + typename _Up2, typename _Up3, typename _Up4, typename _Up5, + typename _Up6, typename _Up7, typename _Up8, typename _Up9> bool - operator<=(const tuple<_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, - _T9>& __t, const tuple<_U0, _U1, _U2, _U3, _U4, _U5, _U6, - _U7, _U8, _U9>& __u) + operator<=(const tuple<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5, _Tp6, _Tp7, _Tp8, _Tp9>& __t, + const tuple<_Up0, _Up1, _Up2, _Up3, _Up4, _Up5, _Up6, _Up7, _Up8, _Up9>& __u) { - typedef tuple<_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9 - > __T_tuple; - typedef tuple<_U0, _U1, _U2, _U3, _U4, _U5, _U6, _U7, _U8, _U9 - > __U_tuple; - return __tuple_compare<tuple_size<__T_tuple>::value - - tuple_size<__U_tuple>::value, 0, - tuple_size<__T_tuple>::value, __T_tuple, __U_tuple>::__leq(__t, __u); + typedef tuple<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5, _Tp6, _Tp7, _Tp8, + _Tp9> __t_tuple; + typedef tuple<_Up0, _Up1, _Up2, _Up3, _Up4, _Up5, _Up6, _Up7, _Up8, + _Up9> __u_tuple; + return __tuple_compare<tuple_size<__t_tuple>::value - + tuple_size<__u_tuple>::value, 0, + tuple_size<__t_tuple>::value, __t_tuple, __u_tuple>::__leq(__t, __u); } - template<typename _T0, typename _T1, typename _T2, typename _T3, - typename _T4, typename _T5, typename _T6, typename _T7, - typename _T8, typename _T9, typename _U0, typename _U1, - typename _U2, typename _U3, typename _U4, typename _U5, - typename _U6, typename _U7, typename _U8, typename _U9> + template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3, + typename _Tp4, typename _Tp5, typename _Tp6, typename _Tp7, + typename _Tp8, typename _Tp9, typename _Up0, typename _Up1, + typename _Up2, typename _Up3, typename _Up4, typename _Up5, + typename _Up6, typename _Up7, typename _Up8, typename _Up9> bool - operator>=(const tuple<_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, - _T9>& __t, const tuple<_U0, _U1, _U2, _U3, _U4, _U5, _U6, - _U7, _U8, _U9>& __u) + operator>=(const tuple<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5, _Tp6, _Tp7, _Tp8, _Tp9>& __t, + const tuple<_Up0, _Up1, _Up2, _Up3, _Up4, _Up5, _Up6, _Up7, _Up8, _Up9>& __u) { - typedef tuple<_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9 - > __T_tuple; - typedef tuple<_U0, _U1, _U2, _U3, _U4, _U5, _U6, _U7, _U8, _U9 - > __U_tuple; - return __tuple_compare<tuple_size<__T_tuple>::value - - tuple_size<__U_tuple>::value, 0, - tuple_size<__T_tuple>::value, __T_tuple, __U_tuple>::__geq(__t, __u); + typedef tuple<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5, _Tp6, _Tp7, _Tp8, + _Tp9> __t_tuple; + typedef tuple<_Up0, _Up1, _Up2, _Up3, _Up4, _Up5, _Up6, _Up7, _Up8, + _Up9> __u_tuple; + return __tuple_compare<tuple_size<__t_tuple>::value - + tuple_size<__u_tuple>::value, 0, + tuple_size<__t_tuple>::value, __t_tuple, __u_tuple>::__geq(__t, __u); } // Provides a way to annotate that a reference to // an object should be passed. - template<typename _T> - class reference_wrapper - { - _T& __data; - - public: - typedef _T type; - - explicit reference_wrapper(_T& __indata): __data(__indata) - { } - - operator _T&() const - { return this->get(); } - - _T& - get() const - { return __data; } - }; + template<typename _Tp> + class reference_wrapper + { + _Tp& _M_data; + public: + typedef _Tp type; + explicit reference_wrapper(_Tp& __indata): _M_data(__indata) + { } + + operator _Tp& () const + { + return this->get(); + } + + _Tp& + get() const + { + return _M_data; + } + }; // Denotes a reference should be taken to a variable. - template<typename _T> - reference_wrapper<_T> - ref(_T& __t) - { return reference_wrapper<_T>(__t); } + template<typename _Tp> + reference_wrapper<_Tp> + ref(_Tp& __t) + { + return reference_wrapper<_Tp>(__t); + } // Denotes a const reference should be taken to a variable. - template<typename _T> - reference_wrapper<_T const> - cref(const _T& __t) - { return reference_wrapper<_T const>(__t); } + template<typename _Tp> + reference_wrapper<_Tp const> + cref(const _Tp& __t) + { + return reference_wrapper<_Tp const>(__t); + } // Helper which adds a reference to a type when given a reference_wrapper - template<typename _T> + template<typename _Tp> struct __strip_reference_wrapper - { typedef _T __type; }; + { + typedef _Tp __type; + }; - template<typename _T> - struct __strip_reference_wrapper<reference_wrapper<_T> > - { typedef _T& __type; }; + template<typename _Tp> + struct __strip_reference_wrapper<reference_wrapper<_Tp> > + { + typedef _Tp& __type; + }; - template<typename _T> - struct __strip_reference_wrapper<const reference_wrapper<_T> > - { typedef _T& __type; }; + template<typename _Tp> + struct __strip_reference_wrapper<const reference_wrapper<_Tp> > + { + typedef _Tp& __type; + }; - template<typename _T0 = _NullClass, typename _T1 = _NullClass, - typename _T2 = _NullClass, typename _T3 = _NullClass, - typename _T4 = _NullClass, typename _T5 = _NullClass, - typename _T6 = _NullClass, typename _T7 = _NullClass, - typename _T8 = _NullClass, typename _T9 = _NullClass> + template<typename _Tp0 = _NullClass, typename _Tp1 = _NullClass, + typename _Tp2 = _NullClass, typename _Tp3 = _NullClass, + typename _Tp4 = _NullClass, typename _Tp5 = _NullClass, + typename _Tp6 = _NullClass, typename _Tp7 = _NullClass, + typename _Tp8 = _NullClass, typename _Tp9 = _NullClass> struct __stripped_tuple_type { - typedef tuple<typename __strip_reference_wrapper<_T0>::__type, - typename __strip_reference_wrapper<_T1>::__type, - typename __strip_reference_wrapper<_T2>::__type, - typename __strip_reference_wrapper<_T3>::__type, - typename __strip_reference_wrapper<_T4>::__type, - typename __strip_reference_wrapper<_T5>::__type, - typename __strip_reference_wrapper<_T6>::__type, - typename __strip_reference_wrapper<_T7>::__type, - typename __strip_reference_wrapper<_T8>::__type, - typename __strip_reference_wrapper<_T9>::__type> __type; + typedef tuple<typename __strip_reference_wrapper<_Tp0>::__type, + typename __strip_reference_wrapper<_Tp1>::__type, + typename __strip_reference_wrapper<_Tp2>::__type, + typename __strip_reference_wrapper<_Tp3>::__type, + typename __strip_reference_wrapper<_Tp4>::__type, + typename __strip_reference_wrapper<_Tp5>::__type, + typename __strip_reference_wrapper<_Tp6>::__type, + typename __strip_reference_wrapper<_Tp7>::__type, + typename __strip_reference_wrapper<_Tp8>::__type, + typename __strip_reference_wrapper<_Tp9>::__type> __type; }; tuple<> make_tuple() - { - return tuple<>(); - }; + { return tuple<>(); } - template<typename _T0> - typename __stripped_tuple_type<_T0>::__type - make_tuple(_T0 __t0) - { - return typename __stripped_tuple_type<_T0>::__type(__t0);}; + template< typename _Tp0> + typename __stripped_tuple_type< _Tp0>::__type + make_tuple( _Tp0 __t0) + { + return typename __stripped_tuple_type< _Tp0>:: + __type( __t0); + } - template<typename _T0, typename _T1> - typename __stripped_tuple_type<_T0, _T1>::__type - make_tuple(_T0 __t0, _T1 __t1) - { - return typename __stripped_tuple_type<_T0, _T1>::__type(__t0, __t1);}; + template<typename _Tp0, typename _Tp1> + typename __stripped_tuple_type<_Tp0, _Tp1>::__type + make_tuple(_Tp0 __t0, _Tp1 __t1) + { + return typename __stripped_tuple_type<_Tp0, _Tp1>:: + __type(__t0, __t1); + } - template<typename _T0, typename _T1, typename _T2> - typename __stripped_tuple_type<_T0, _T1, _T2>::__type - make_tuple(_T0 __t0, _T1 __t1, _T2 __t2) - { - return typename __stripped_tuple_type<_T0, _T1, _T2>::__type(__t0, __t1, __t2);}; + template<typename _Tp0, typename _Tp1, typename _Tp2> + typename __stripped_tuple_type<_Tp0, _Tp1, _Tp2>::__type + make_tuple(_Tp0 __t0, _Tp1 __t1, _Tp2 __t2) + { + return typename __stripped_tuple_type<_Tp0, _Tp1, _Tp2>:: + __type(__t0, __t1, __t2); + } - template<typename _T0, typename _T1, typename _T2, typename _T3> - typename __stripped_tuple_type<_T0, _T1, _T2, _T3>::__type - make_tuple(_T0 __t0, _T1 __t1, _T2 __t2, _T3 __t3) - { - return typename __stripped_tuple_type<_T0, _T1, _T2, _T3>::__type(__t0, __t1, __t2, __t3);}; + template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3> + typename __stripped_tuple_type<_Tp0, _Tp1, _Tp2, _Tp3>::__type + make_tuple(_Tp0 __t0, _Tp1 __t1, _Tp2 __t2, _Tp3 __t3) + { + return typename __stripped_tuple_type<_Tp0, _Tp1, _Tp2, _Tp3>:: + __type(__t0, __t1, __t2, __t3); + } - template<typename _T0, typename _T1, typename _T2, typename _T3, - typename _T4> - typename __stripped_tuple_type<_T0, _T1, _T2, _T3, _T4>::__type - make_tuple(_T0 __t0, _T1 __t1, _T2 __t2, _T3 __t3, _T4 __t4) - { - return typename __stripped_tuple_type<_T0, _T1, _T2, _T3, _T4>::__type(__t0, __t1, __t2, __t3, __t4);}; + template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3, + typename _Tp4> + typename __stripped_tuple_type<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4>::__type + make_tuple(_Tp0 __t0, _Tp1 __t1, _Tp2 __t2, _Tp3 __t3, _Tp4 __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, - typename _T4, typename _T5> - typename __stripped_tuple_type<_T0, _T1, _T2, _T3, _T4, _T5>::__type - make_tuple(_T0 __t0, _T1 __t1, _T2 __t2, _T3 __t3, _T4 __t4, - _T5 __t5) - { - return typename __stripped_tuple_type<_T0, _T1, _T2, _T3, _T4, _T5 - >::__type(__t0, __t1, __t2, __t3, __t4, __t5);}; - - template<typename _T0, typename _T1, typename _T2, typename _T3, - typename _T4, typename _T5, typename _T6> - typename __stripped_tuple_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) - { - return typename __stripped_tuple_type<_T0, _T1, _T2, _T3, _T4, _T5, - _T6>::__type(__t0, __t1, __t2, __t3, __t4, __t5, __t6);}; - - template<typename _T0, typename _T1, typename _T2, typename _T3, - typename _T4, typename _T5, typename _T6, typename _T7> - typename __stripped_tuple_type<_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7 - >::__type - make_tuple(_T0 __t0, _T1 __t1, _T2 __t2, _T3 __t3, _T4 __t4, - _T5 __t5, _T6 __t6, _T7 __t7) - { - return typename __stripped_tuple_type<_T0, _T1, _T2, _T3, _T4, _T5, - _T6, _T7>::__type(__t0, __t1, __t2, __t3, __t4, __t5, __t6, __t7);}; - - template<typename _T0, typename _T1, typename _T2, typename _T3, - typename _T4, typename _T5, typename _T6, typename _T7, - typename _T8> - typename __stripped_tuple_type<_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, - _T8>::__type - make_tuple(_T0 __t0, _T1 __t1, _T2 __t2, _T3 __t3, _T4 __t4, - _T5 __t5, _T6 __t6, _T7 __t7, _T8 __t8) - { - return typename __stripped_tuple_type<_T0, _T1, _T2, _T3, _T4, _T5, - _T6, _T7, _T8>::__type(__t0, __t1, __t2, __t3, __t4, __t5, __t6, __t7, __t8);}; - - template<typename _T0, typename _T1, typename _T2, typename _T3, - typename _T4, typename _T5, typename _T6, typename _T7, - typename _T8, typename _T9> - typename __stripped_tuple_type<_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, - _T8, _T9>::__type - make_tuple(_T0 __t0, _T1 __t1, _T2 __t2, _T3 __t3, _T4 __t4, - _T5 __t5, _T6 __t6, _T7 __t7, _T8 __t8, _T9 __t9) - { - 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 __stripped_tuple_type<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, + _Tp5>::__type + make_tuple(_Tp0 __t0, _Tp1 __t1, _Tp2 __t2, _Tp3 __t3, _Tp4 __t4, + _Tp5 __t5) + { + return typename __stripped_tuple_type<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, + _Tp5>:: + __type(__t0, __t1, __t2, __t3, __t4, __t5); + } + + template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3, + typename _Tp4, typename _Tp5, typename _Tp6> + typename __stripped_tuple_type<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5, + _Tp6>::__type + make_tuple(_Tp0 __t0, _Tp1 __t1, _Tp2 __t2, _Tp3 __t3, _Tp4 __t4, + _Tp5 __t5, _Tp6 __t6) + { + return typename __stripped_tuple_type<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, + _Tp5, _Tp6>:: + __type(__t0, __t1, __t2, __t3, __t4, __t5, __t6); + } + + template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3, + typename _Tp4, typename _Tp5, typename _Tp6, typename _Tp7> + typename __stripped_tuple_type<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5, _Tp6, + _Tp7>::__type + make_tuple(_Tp0 __t0, _Tp1 __t1, _Tp2 __t2, _Tp3 __t3, _Tp4 __t4, + _Tp5 __t5, _Tp6 __t6, _Tp7 __t7) + { + return typename __stripped_tuple_type<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, + _Tp5, _Tp6, _Tp7>:: + __type(__t0, __t1, __t2, __t3, __t4, __t5, __t6, __t7); + } + + template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3, + typename _Tp4, typename _Tp5, typename _Tp6, typename _Tp7, + typename _Tp8> + typename __stripped_tuple_type<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5, _Tp6, + _Tp7, _Tp8>::__type + make_tuple(_Tp0 __t0, _Tp1 __t1, _Tp2 __t2, _Tp3 __t3, _Tp4 __t4, + _Tp5 __t5, _Tp6 __t6, _Tp7 __t7, _Tp8 __t8) + { + return typename __stripped_tuple_type<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, + _Tp5, _Tp6, _Tp7, _Tp8>:: + __type(__t0, __t1, __t2, __t3, __t4, __t5, __t6, __t7, __t8); + } + + 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 { template<class T> - swallow_assign& + swallow_assign& operator=(const T&) { return *this; } }; @@ -1412,113 +1439,124 @@ namespace tr1 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 _T0> - tuple<_T0&> - tie(_T0& __t0) - { return make_tuple(ref(__t0)); }; - - template<typename _T0, typename _T1> - tuple<_T0&, _T1&> - tie(_T0& __t0, _T1& __t1) - { return make_tuple(ref(__t0), ref(__t1)); }; + template<typename _Tp0, typename _Tp1> + tuple<_Tp0&, _Tp1&> + tie(_Tp0& __t0, _Tp1& __t1) + { + return make_tuple(ref(__t0), ref(__t1)); + }; - template<typename _T0, typename _T1, typename _T2> - tuple<_T0&, _T1&, _T2&> - tie(_T0& __t0, _T1& __t1, _T2& __t2) - { return make_tuple(ref(__t0), ref(__t1), ref(__t2)); }; + template<typename _Tp0, typename _Tp1, typename _Tp2> + tuple<_Tp0&, _Tp1&, _Tp2&> + tie(_Tp0& __t0, _Tp1& __t1, _Tp2& __t2) + { + return make_tuple(ref(__t0), ref(__t1), ref(__t2)); + }; - template<typename _T0, typename _T1, typename _T2, typename _T3> - tuple<_T0&, _T1&, _T2&, _T3&> - tie(_T0& __t0, _T1& __t1, _T2& __t2, _T3& __t3) - { return make_tuple(ref(__t0), ref(__t1), ref(__t2), ref(__t3)); }; + template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3> + tuple<_Tp0&, _Tp1&, _Tp2&, _Tp3&> + tie(_Tp0& __t0, _Tp1& __t1, _Tp2& __t2, _Tp3& __t3) + { + return make_tuple(ref(__t0), ref(__t1), ref(__t2), ref(__t3)); + }; - template<typename _T0, typename _T1, typename _T2, typename _T3, - typename _T4> - tuple<_T0&, _T1&, _T2&, _T3&, _T4&> - tie(_T0& __t0, _T1& __t1, _T2& __t2, _T3& __t3, _T4& __t4) - { - return make_tuple(ref(__t0), ref(__t1), ref(__t2), ref(__t3), ref(__t4)); + template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3, + typename _Tp4> + tuple<_Tp0&, _Tp1&, _Tp2&, _Tp3&, _Tp4&> + tie(_Tp0& __t0, _Tp1& __t1, _Tp2& __t2, _Tp3& __t3, _Tp4& __t4) + { + return make_tuple(ref(__t0), ref(__t1), ref(__t2), ref(__t3), + ref(__t4)); }; - template<typename _T0, typename _T1, typename _T2, typename _T3, - typename _T4, typename _T5> - tuple<_T0&, _T1&, _T2&, _T3&, _T4&, _T5&> - tie(_T0& __t0, _T1& __t1, _T2& __t2, _T3& __t3, _T4& __t4, _T5& __t5) + template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3, + typename _Tp4, typename _Tp5> + tuple<_Tp0&, _Tp1&, _Tp2&, _Tp3&, _Tp4&, _Tp5&> + tie(_Tp0& __t0, _Tp1& __t1, _Tp2& __t2, _Tp3& __t3, _Tp4& __t4, + _Tp5& __t5) { - return make_tuple(ref(__t0), ref(__t1), ref(__t2), ref(__t3), - ref(__t4), ref(__t5)); + return make_tuple(ref(__t0), ref(__t1), ref(__t2), ref(__t3), ref(__t4), + ref(__t5)); }; - template<typename _T0, typename _T1, typename _T2, typename _T3, - typename _T4, typename _T5, typename _T6> - tuple<_T0&, _T1&, _T2&, _T3&, _T4&, _T5&, _T6&> - tie(_T0& __t0, _T1& __t1, _T2& __t2, _T3& __t3, _T4& __t4, - _T5& __t5, _T6& __t6) + template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3, + typename _Tp4, typename _Tp5, typename _Tp6> + tuple<_Tp0&, _Tp1&, _Tp2&, _Tp3&, _Tp4&, _Tp5&, _Tp6&> + tie(_Tp0& __t0, _Tp1& __t1, _Tp2& __t2, _Tp3& __t3, _Tp4& __t4, _Tp5& __t5, + _Tp6& __t6) { - return make_tuple(ref(__t0), ref(__t1), ref(__t2), ref(__t3), - ref(__t4), ref(__t5), ref(__t6)); + return make_tuple(ref(__t0), ref(__t1), ref(__t2), ref(__t3), ref(__t4), + ref(__t5), ref(__t6)); }; - template<typename _T0, typename _T1, typename _T2, typename _T3, - typename _T4, typename _T5, typename _T6, typename _T7> - tuple<_T0&, _T1&, _T2&, _T3&, _T4&, _T5&, _T6&, _T7&> - tie(_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> + tuple<_Tp0&, _Tp1&, _Tp2&, _Tp3&, _Tp4&, _Tp5&, _Tp6&, _Tp7&> + tie(_Tp0& __t0, _Tp1& __t1, _Tp2& __t2, _Tp3& __t3, _Tp4& __t4, _Tp5& __t5, + _Tp6& __t6, _Tp7& __t7) { - return make_tuple(ref(__t0), ref(__t1), ref(__t2), ref(__t3), - ref(__t4), ref(__t5), ref(__t6), ref(__t7)); + return make_tuple(ref(__t0), ref(__t1), ref(__t2), ref(__t3), ref(__t4), + ref(__t5), ref(__t6), ref(__t7)); }; - template<typename _T0, typename _T1, typename _T2, typename _T3, - typename _T4, typename _T5, typename _T6, typename _T7, - typename _T8> - tuple<_T0&, _T1&, _T2&, _T3&, _T4&, _T5&, _T6&, _T7&, _T8&> - tie(_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, + typename _Tp4, typename _Tp5, typename _Tp6, typename _Tp7, + typename _Tp8> + tuple<_Tp0&, _Tp1&, _Tp2&, _Tp3&, _Tp4&, _Tp5&, _Tp6&, _Tp7&, _Tp8&> + tie(_Tp0& __t0, _Tp1& __t1, _Tp2& __t2, _Tp3& __t3, _Tp4& __t4, _Tp5& __t5, + _Tp6& __t6, _Tp7& __t7, _Tp8& __t8) { - return make_tuple(ref(__t0), ref(__t1), ref(__t2), ref(__t3), - ref(__t4), ref(__t5), ref(__t6), ref(__t7), ref(__t8)); + return make_tuple(ref(__t0), ref(__t1), ref(__t2), ref(__t3), ref(__t4), + ref(__t5), ref(__t6), ref(__t7), ref(__t8)); }; - template<typename _T0, typename _T1, typename _T2, typename _T3, - typename _T4, typename _T5, typename _T6, typename _T7, - typename _T8, typename _T9> - tuple<_T0&, _T1&, _T2&, _T3&, _T4&, _T5&, _T6&, _T7&, _T8&, _T9&> - tie(_T0& __t0, _T1& __t1, _T2& __t2, _T3& __t3, _T4& __t4, - _T5& __t5, _T6& __t6, _T7& __t7, _T8& __t8, _T9& __t9) + template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3, + typename _Tp4, typename _Tp5, typename _Tp6, typename _Tp7, + typename _Tp8, typename _Tp9> + tuple<_Tp0&, _Tp1&, _Tp2&, _Tp3&, _Tp4&, _Tp5&, _Tp6&, _Tp7&, _Tp8&, + _Tp9&> + 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), - ref(__t4), ref(__t5), ref(__t6), ref(__t7), ref(__t8), - ref(__t9)); + return make_tuple(ref(__t0), ref(__t1), ref(__t2), ref(__t3), ref(__t4), + ref(__t5), ref(__t6), ref(__t7), ref(__t8), + ref(__t9)); }; // Various functions which give std::pair a tuple-like interface. - template<class _T1, class _T2> - struct tuple_size<std::pair<_T1, _T2> > + template<class _Tp1, class _Tp2> + struct tuple_size<std::pair<_Tp1, _Tp2> > { static const int value = 2; }; - template<class _T1, class _T2> - struct tuple_element<0, std::pair<_T1, _T2> > - { typedef _T1 type; }; + template<class _Tp1, class _Tp2> + struct tuple_element<0, std::pair<_Tp1, _Tp2> > + { typedef _Tp1 type; }; - template<class _T1, class _T2> - struct tuple_element<1, std::pair<_T1, _T2> > - { typedef _T2 type; }; + template<class _Tp1, class _Tp2> + struct tuple_element<1, std::pair<_Tp1, _Tp2> > + { typedef _Tp2 type; }; - template<int _I,class _T1,class _T2> - typename tuple_element<_I, tuple<_T1, _T2> >::type - get(pair<_T1, _T2>& __in) + template<int _I, class _Tp1, class _Tp2> + typename tuple_element<_I, tuple<_Tp1, _Tp2> >::type + get(pair<_Tp1, _Tp2>& __in) { return get<_I>(tie(__in.first, __in.second)); } - template<int _I,class _T1,class _T2> - typename tuple_element<_I, tuple<_T1, _T2> >::type - get(const pair<_T1, _T2>& __in) + template<int _I, class _Tp1, class _Tp2> + typename tuple_element<_I, tuple<_Tp1, _Tp2> >::type + get(const pair<_Tp1, _Tp2>& __in) { return get<_I>(tie(__in.first, __in.second)); } + } } #endif + |