32 #ifndef BOOST_TUPLE_BASIC_HPP
33 #define BOOST_TUPLE_BASIC_HPP
44 #if BOOST_GCC >= 40700
45 #pragma GCC diagnostic push
46 #pragma GCC diagnostic ignored "-Wunused-local-typedefs"
63 template <
bool If,
class Then,
class Else>
struct IF {
typedef Then
RET; };
65 template <
class Then,
class Else>
struct IF<false, Then, Else> {
72 template <
class HT,
class TT>
struct cons;
103 return next::call(tup).tail;
110 template<
class Tuple>
127 #ifndef BOOST_NO_CV_SPECIALIZATIONS
129 template<
int N,
class T>
133 apply<T>::type::head_type
type;
136 template<
int N,
class T>
143 #if BOOST_WORKAROUND(__BORLANDC__,<0x600)
149 #else // def BOOST_NO_CV_SPECIALIZATIONS
153 template<
int N,
class T,
bool IsConst>
157 apply<T>::type::head_type
type;
160 template<
int N,
class T>
161 struct element_impl<N,
T, true >
164 apply<T>::type::head_type unqualified_type;
165 typedef const unqualified_type
type;
171 template<
int N,
class T>
173 public detail::element_impl<N, T, ::boost::is_const<T>::value>
212 template<
int N,
class HT,
class TT>
218 apply<cons<HT, TT> > impl;
220 return const_cast<cons_element&
>(impl::call(c)).head;
226 template<
int N,
class HT,
class TT>
227 inline typename access_traits<
228 typename element<N, cons<HT, TT> >
::type
232 apply<cons<HT, TT> > impl;
233 return impl::call(c).head;
260 template <
class HT,
class TT>
296 template <
class T1,
class T2,
class T3,
class T4,
class T5,
297 class T6,
class T7,
class T8,
class T9,
class T10>
298 cons( T1& t1, T2& t2, T3& t3, T4& t4, T5& t5,
299 T6& t6, T7& t7, T8& t8, T9& t9, T10& t10 )
301 tail (t2, t3, t4, t5, t6, t7, t8, t9, t10, detail::
cnull())
304 template <
class T2,
class T3,
class T4,
class T5,
305 class T6,
class T7,
class T8,
class T9,
class T10>
307 T6& t6, T7& t7, T8& t8, T9& t9, T10& t10 )
309 tail (t2, t3, t4, t5, t6, t7, t8, t9, t10, detail::
cnull())
313 template <
class HT2,
class TT2>
316 template <
class HT2,
class TT2>
327 template <
class T1,
class T2>
330 head = u.first;
tail.head = u.second;
return *
this;
339 return boost::tuples::get<N>(*
this);
347 return boost::tuples::get<N>(*
this);
407 return boost::tuples::get<N>(*
this);
415 return boost::tuples::get<N>(*
this);
450 template <
class T0,
class T1,
class T2,
class T3,
class T4,
451 class T5,
class T6,
class T7,
class T8,
class T9>
471 template <
class T0,
class T1,
class T2,
class T3,
class T4,
472 class T5,
class T6,
class T7,
class T8,
class T9>
560 :
inherited(t0, t1, t2, t3, t4, t5, t6, t7, t8, detail::
cnull()) {}
572 :
inherited(t0, t1, t2, t3, t4, t5, t6, t7, t8, t9) {}
575 template<
class U1,
class U2>
578 template <
class U1,
class U2>
584 template <
class U1,
class U2>
587 this->head = k.first;
588 this->tail.head = k.second;
607 struct swallow_assign;
668 do_not_use_with_reference_type
error;
679 template<
class T,
int n>
685 typedef const volatile T (&
type)[n];
688 template<
class T,
int n>
690 typedef const volatile T (&
type)[n];
748 template<
class T0,
class T1>
755 template<
class T0,
class T1,
class T2>
759 return t(t0, t1, t2);
762 template<
class T0,
class T1,
class T2,
class T3>
764 make_tuple(
const T0& t0,
const T1& t1,
const T2& t2,
const T3& t3) {
766 return t(t0, t1, t2, t3);
769 template<
class T0,
class T1,
class T2,
class T3,
class T4>
771 make_tuple(
const T0& t0,
const T1& t1,
const T2& t2,
const T3& t3,
774 return t(t0, t1, t2, t3, t4);
777 template<
class T0,
class T1,
class T2,
class T3,
class T4,
class T5>
779 make_tuple(
const T0& t0,
const T1& t1,
const T2& t2,
const T3& t3,
780 const T4& t4,
const T5& t5) {
782 return t(t0, t1, t2, t3, t4, t5);
785 template<
class T0,
class T1,
class T2,
class T3,
class T4,
class T5,
class T6>
787 make_tuple(
const T0& t0,
const T1& t1,
const T2& t2,
const T3& t3,
788 const T4& t4,
const T5& t5,
const T6& t6) {
790 <T0, T1, T2, T3, T4, T5, T6>
::type t;
791 return t(t0, t1, t2, t3, t4, t5, t6);
794 template<
class T0,
class T1,
class T2,
class T3,
class T4,
class T5,
class T6,
797 make_tuple(
const T0& t0,
const T1& t1,
const T2& t2,
const T3& t3,
798 const T4& t4,
const T5& t5,
const T6& t6,
const T7& t7) {
800 <T0, T1, T2, T3, T4, T5, T6, T7>
::type t;
801 return t(t0, t1, t2, t3, t4, t5, t6, t7);
804 template<
class T0,
class T1,
class T2,
class T3,
class T4,
class T5,
class T6,
806 inline typename detail::make_tuple_mapper
807 <T0, T1, T2, T3, T4, T5, T6, T7, T8>
::type
808 make_tuple(
const T0& t0,
const T1& t1,
const T2& t2,
const T3& t3,
809 const T4& t4,
const T5& t5,
const T6& t6,
const T7& t7,
812 <T0, T1, T2, T3, T4, T5, T6, T7, T8>
::type t;
813 return t(t0, t1, t2, t3, t4, t5, t6, t7, t8);
816 template<
class T0,
class T1,
class T2,
class T3,
class T4,
class T5,
class T6,
817 class T7,
class T8,
class T9>
818 inline typename detail::make_tuple_mapper
819 <T0, T1, T2, T3, T4, T5, T6, T7, T8, T9>
::type
820 make_tuple(
const T0& t0,
const T1& t1,
const T2& t2,
const T3& t3,
821 const T4& t4,
const T5& t5,
const T6& t6,
const T7& t7,
822 const T8& t8,
const T9& t9) {
824 <T0, T1, T2, T3, T4, T5, T6, T7, T8, T9>
::type t;
825 return t(t0, t1, t2, t3, t4, t5, t6, t7, t8, t9);
846 class T0 = void,
class T1 = void,
class T2 = void,
847 class T3 = void,
class T4 = void,
class T5 = void,
848 class T6 = void,
class T7 = void,
class T8 = void,
875 template<
class T0,
class T1>
882 template<
class T0,
class T1,
class T2>
884 tie(T0& t0, T1& t1, T2& t2) {
886 return t(t0, t1, t2);
889 template<
class T0,
class T1,
class T2,
class T3>
891 tie(T0& t0, T1& t1, T2& t2, T3& t3) {
893 return t(t0, t1, t2, t3);
896 template<
class T0,
class T1,
class T2,
class T3,
class T4>
898 tie(T0& t0, T1& t1, T2& t2, T3& t3,
901 return t(t0, t1, t2, t3, t4);
904 template<
class T0,
class T1,
class T2,
class T3,
class T4,
class T5>
906 tie(T0& t0, T1& t1, T2& t2, T3& t3,
909 return t(t0, t1, t2, t3, t4, t5);
912 template<
class T0,
class T1,
class T2,
class T3,
class T4,
class T5,
class T6>
914 tie(T0& t0, T1& t1, T2& t2, T3& t3,
915 T4& t4, T5& t5, T6& t6) {
917 <T0, T1, T2, T3, T4, T5, T6>
::type t;
918 return t(t0, t1, t2, t3, t4, t5, t6);
921 template<
class T0,
class T1,
class T2,
class T3,
class T4,
class T5,
class T6,
924 tie(T0& t0, T1& t1, T2& t2, T3& t3,
925 T4& t4, T5& t5, T6& t6, T7& t7) {
927 <T0, T1, T2, T3, T4, T5, T6, T7>
::type t;
928 return t(t0, t1, t2, t3, t4, t5, t6, t7);
931 template<
class T0,
class T1,
class T2,
class T3,
class T4,
class T5,
class T6,
933 inline typename detail::tie_mapper
934 <T0, T1, T2, T3, T4, T5, T6, T7, T8>
::type
935 tie(T0& t0, T1& t1, T2& t2, T3& t3,
936 T4& t4, T5& t5, T6& t6, T7& t7,
939 <T0, T1, T2, T3, T4, T5, T6, T7, T8>
::type t;
940 return t(t0, t1, t2, t3, t4, t5, t6, t7, t8);
943 template<
class T0,
class T1,
class T2,
class T3,
class T4,
class T5,
class T6,
944 class T7,
class T8,
class T9>
945 inline typename detail::tie_mapper
946 <T0, T1, T2, T3, T4, T5, T6, T7, T8, T9>
::type
947 tie(T0& t0, T1& t1, T2& t2, T3& t3,
948 T4& t4, T5& t5, T6& t6, T7& t7,
951 <T0, T1, T2, T3, T4, T5, T6, T7, T8, T9>
::type t;
952 return t(t0, t1, t2, t3, t4, t5, t6, t7, t8, t9);
955 template <
class T0,
class T1,
class T2,
class T3,
class T4,
956 class T5,
class T6,
class T7,
class T8,
class T9>
957 void swap(
tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9>& lhs,
964 template<
class HH,
class TT>
969 template <
class T0,
class T1,
class T2,
class T3,
class T4,
970 class T5,
class T6,
class T7,
class T8,
class T9>
971 inline void swap(
tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9>& lhs,
974 typedef typename tuple_type::inherited base;
982 #if BOOST_GCC >= 40700
983 #pragma GCC diagnostic pop
987 #endif // BOOST_TUPLE_BASIC_HPP