36 #ifndef VIGRA_TUPLE_HXX 
   37 #define VIGRA_TUPLE_HXX 
  104 template <
class T1, 
class T2, 
class T3>
 
  106     typedef T1 first_type;
 
  107     typedef T2 second_type;
 
  108     typedef T3 third_type;
 
  114     triple(
const T1& a, 
const T2& b, 
const T3& c)
 
  115     : first(a), second(b), third(c) {}
 
  118 template <
class T1, 
class T2, 
class T3>
 
  119 triple<T1,T2,T3> make_triple( T1 t1, T2 t2, T3 t3 )
 
  120 { 
return triple<T1,T2,T3>( t1, t2, t3 ); }
 
  128 template <
class T1, 
class T2, 
class T3, 
class T4>
 
  130     typedef T1 first_type;
 
  131     typedef T2 second_type;
 
  132     typedef T3 third_type;
 
  133     typedef T4 fourth_type;
 
  140     tuple4(
const T1& a, 
const T2& b, 
const T3& c, 
const T4& d)
 
  141     : first(a), second(b), third(c), fourth(d) {}
 
  144 template <
class T1, 
class T2, 
class T3, 
class T4>
 
  145 tuple4<T1,T2,T3,T4> make_tuple4( T1 t1, T2 t2, T3 t3, T4 t4 )
 
  146 { 
return tuple4<T1,T2,T3,T4>( t1, t2, t3, t4 ); }
 
  154 template <
class T1, 
class T2, 
class T3, 
class T4, 
class T5>
 
  156     typedef T1 first_type;
 
  157     typedef T2 second_type;
 
  158     typedef T3 third_type;
 
  159     typedef T4 fourth_type;
 
  160     typedef T5 fifth_type;
 
  168     tuple5(
const T1& a, 
const T2& b, 
const T3& c, 
const T4& d, 
const T5& e)
 
  169     : first(a), second(b), third(c), fourth(d), fifth(e) {}
 
  172 template <
class T1, 
class T2, 
class T3, 
class T4, 
class T5>
 
  173 tuple5<T1,T2,T3,T4,T5> make_tuple5( T1 t1, T2 t2, T3 t3, T4 t4, T5 t5 )
 
  174 { 
return tuple5<T1,T2,T3,T4,T5>( t1, t2, t3, t4, t5 ); }