gcc/libstdc++-v3/include/tr1/tuple

1459 lines
47 KiB
C++

// class template tuple -*- C++ -*-
// Copyright (C) 2004, 2005 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
// terms of the GNU General Public License as published by the
// Free Software Foundation; either version 2, or (at your option)
// any later version.
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License along
// with this library; see the file COPYING. If not, write to the Free
// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
// USA.
// As a special exception, you may use this file as part of a free software
// library without restriction. Specifically, if other files instantiate
// templates or use macros or inline functions from this file, or you compile
// this file and link it with other files to produce an executable, this
// file does not by itself cause the resulting executable to be covered by
// the GNU General Public License. This exception does not however
// invalidate any other reasons why the executable file might be covered by
// the GNU General Public License.
/** @file
* This is a TR1 C++ Library header.
*/
// Chris Jefferson <chris@bubblescope.net>
// This header is automatically generated: see maketuple.c for details.
#ifndef _TUPLE
#define _TUPLE 1
#include <tr1/utility>
#include <tr1/functional>
namespace std
{
namespace tr1
{
// An implementation specific class which is used in the tuple class
// when the tuple is not maximum possible size.
struct _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 _Tp>
struct tuple_element;
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; };
/// @brief class tuple_element
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.
template<typename _Tp>
struct tuple_size;
template<>
struct tuple_size<tuple<_NullClass, _NullClass, _NullClass, _NullClass,
_NullClass, _NullClass, _NullClass, _NullClass,
_NullClass, _NullClass> >
{ static const int value = 0; };
template< typename _Tp0>
struct tuple_size<tuple< _Tp0, _NullClass, _NullClass, _NullClass,
_NullClass, _NullClass, _NullClass, _NullClass,
_NullClass, _NullClass> >
{ static const int value = 1; };
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 _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 _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 _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 _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 _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 _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 _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; };
/// @brief class tuple_size
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 _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 _Tp>
struct __add_ref
{ 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>
{
public:
tuple()
{ }
tuple(const tuple& __in)
{ }
tuple& operator=(const tuple& __in)
{ return *this; }
};
template< typename _Tp0>
class tuple< _Tp0, _NullClass, _NullClass, _NullClass, _NullClass,
_NullClass, _NullClass, _NullClass, _NullClass, _NullClass>
{
_Tp0 _M_t0;
public:
tuple()
{ }
explicit tuple( typename __add_c_ref<_Tp0>::type __in0):
_M_t0(__in0)
{ }
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 _Tp0, typename _Tp1>
class tuple<_Tp0, _Tp1, _NullClass, _NullClass, _NullClass, _NullClass,
_NullClass, _NullClass, _NullClass, _NullClass>
{
_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 _Tp0, typename _Tp1, typename _Tp2>
class tuple<_Tp0, _Tp1, _Tp2, _NullClass, _NullClass, _NullClass,
_NullClass, _NullClass, _NullClass, _NullClass>
{
_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 _Tp0, typename _Tp1, typename _Tp2, typename _Tp3>
class tuple<_Tp0, _Tp1, _Tp2, _Tp3, _NullClass, _NullClass, _NullClass,
_NullClass, _NullClass, _NullClass>
{
_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 _Tp0, typename _Tp1, typename _Tp2, typename _Tp3,
typename _Tp4>
class tuple<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _NullClass, _NullClass,
_NullClass, _NullClass, _NullClass>
{
_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 _Tp0, typename _Tp1, typename _Tp2, typename _Tp3,
typename _Tp4, typename _Tp5>
class tuple<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5, _NullClass, _NullClass,
_NullClass, _NullClass>
{
_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 _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>
{
_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 _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>
{
_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 _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>
{
_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;
};
/// @brief Template class tuple
template<typename _Tp0, typename _Tp1, typename _Tp2, typename _Tp3,
typename _Tp4, typename _Tp5, typename _Tp6, typename _Tp7,
typename _Tp8, typename _Tp9>
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 _Tp>
struct __get_helper;
template<typename _Tp>
struct __get_helper<0, _Tp>
{
static typename __add_ref<typename tuple_element<0, _Tp>::type>::type
get_value(_Tp& __in)
{ return __in._M_t0; }
static typename __add_c_ref<typename tuple_element<0, _Tp>::type>::type
get_value(const _Tp& __in)
{ return __in._M_t0; }
};
template<typename _Tp>
struct __get_helper<1, _Tp>
{
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>
{
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>
{
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>
{
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>
{
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>
{
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>
{
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>
{
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>
{
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 _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 _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 _Tp, typename _Up>
struct __tuple_compare;
template<int __i, int __j, typename _Tp, typename _Up>
struct __tuple_compare<0, __i, __j, _Tp, _Up>
{
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 __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);
}
};
template<int __i, typename _Tp, typename _Up>
struct __tuple_compare<0, __i, __i, _Tp, _Up>
{
static bool __eq(const _Tp&, const _Up&)
{ return true; }
static bool __less(const _Tp&, const _Up&)
{ return false; }
};
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<_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<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5, _Tp6, _Tp7, _Tp8,
_Tp9> _Tp;
typedef tuple<_Up0, _Up1, _Up2, _Up3, _Up4, _Up5, _Up6, _Up7, _Up8,
_Up9> _Up;
return __tuple_compare<tuple_size<_Tp>::value -
tuple_size<_Tp>::value, 0,
tuple_size<_Tp>::value, _Tp, _Up>::__eq(__t, __u);
}
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<_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<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5, _Tp6, _Tp7, _Tp8,
_Tp9> _Tp;
typedef tuple<_Up0, _Up1, _Up2, _Up3, _Up4, _Up5, _Up6, _Up7, _Up8,
_Up9> _Up;
return __tuple_compare<tuple_size<_Tp>::value -
tuple_size<_Tp>::value, 0,
tuple_size<_Tp>::value, _Tp, _Up>::__less(__t, __u);
}
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<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5, _Tp6, _Tp7, _Tp8, _Tp9>& __t,
const tuple<_Up0, _Up1, _Up2, _Up3, _Up4, _Up5, _Up6, _Up7, _Up8, _Up9>& __u)
{
return !(__t == __u);
}
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<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5, _Tp6, _Tp7, _Tp8, _Tp9>& __t,
const tuple<_Up0, _Up1, _Up2, _Up3, _Up4, _Up5, _Up6, _Up7, _Up8, _Up9>& __u)
{
return __u < __t;
}
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<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5, _Tp6, _Tp7, _Tp8, _Tp9>& __t,
const tuple<_Up0, _Up1, _Up2, _Up3, _Up4, _Up5, _Up6, _Up7, _Up8, _Up9>& __u)
{
return !(__u < __t);
}
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<_Tp0, _Tp1, _Tp2, _Tp3, _Tp4, _Tp5, _Tp6, _Tp7, _Tp8, _Tp9>& __t,
const tuple<_Up0, _Up1, _Up2, _Up3, _Up4, _Up5, _Up6, _Up7, _Up8, _Up9>& __u)
{
return !(__t < __u);
}
// Helper which adds a reference to a type when given a reference_wrapper
template<typename _Tp>
struct __strip_reference_wrapper
{
typedef _Tp __type;
};
template<typename _Tp>
struct __strip_reference_wrapper<reference_wrapper<_Tp> >
{
typedef _Tp& __type;
};
template<typename _Tp>
struct __strip_reference_wrapper<const reference_wrapper<_Tp> >
{
typedef _Tp& __type;
};
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<_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<>(); }
template< typename _Tp0>
typename __stripped_tuple_type< _Tp0>::__type
make_tuple( _Tp0 __t0)
{
return typename __stripped_tuple_type< _Tp0>::
__type( __t0);
}
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 _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 _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 _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 _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
struct swallow_assign
{
template<class T>
swallow_assign&
operator=(const T&)
{ return *this; }
};
// TODO: Put this in some kind of shared file.
namespace
{
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));
};
template<typename _Tp0, typename _Tp1>
tuple<_Tp0&, _Tp1&>
tie(_Tp0& __t0, _Tp1& __t1)
{
return make_tuple(ref(__t0), ref(__t1));
};
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 _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 _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 _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));
};
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));
};
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));
};
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));
};
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));
};
}
}
#endif