diff --git a/include/boost/tuple/detail/tuple_basic.hpp b/include/boost/tuple/detail/tuple_basic.hpp index d81554c..779e4dd 100644 --- a/include/boost/tuple/detail/tuple_basic.hpp +++ b/include/boost/tuple/detail/tuple_basic.hpp @@ -45,8 +45,8 @@ namespace tuples { } // end detail // - cons forward declaration ----------------------------------------------- -template -struct cons; +template struct cons; + // - tuple forward declaration ----------------------------------------------- template < @@ -214,20 +214,32 @@ struct cons { head_type head; tail_type tail; - typename tuple_access_traits::non_const_type get_head() { return head; } - typename tuple_access_traits::non_const_type get_tail() { return tail; } + typename tuple_access_traits::non_const_type + get_head() { return head; } + + typename tuple_access_traits::non_const_type + get_tail() { return tail; } + + typename tuple_access_traits::const_type + get_head() const { return head; } + + typename tuple_access_traits::const_type + get_tail() const { return tail; } + + cons(typename tuple_access_traits::parameter_type h, + const tail_type& t) + : head (h), tail(t) {} - typename tuple_access_traits::const_type get_head() const { return head; } - typename tuple_access_traits::const_type get_tail() const { return tail; } - template cons( T1& t1, T2& t2, T3& t3, T4& t4, T5& t5, T6& t6, T7& t7, T8& t8, T9& t9, T10& t10 ) - : head (t1) , tail (t2, t3, t4, t5, t6, t7, t8, t9, t10, detail::tuples::cnull_type()) {} + : head (t1), + tail (t2, t3, t4, t5, t6, t7, t8, t9, t10, detail::tuples::cnull_type()) + {} - template - cons( const cons& u ) : head(u.head), tail(u.tail) {} + template + cons( const cons& u ) : head(u.head), tail(u.tail) {} template cons& operator=( const cons& u ) { @@ -272,22 +284,32 @@ struct cons { head_type head; - typename tuple_access_traits::non_const_type get_head() { return head; } + typename tuple_access_traits::non_const_type + get_head() { return head; } + null_type get_tail() { return null_type(); } - typename tuple_access_traits::const_type get_head() const { return head; } + typename tuple_access_traits::const_type + get_head() const { return head; } + const null_type get_tail() const { return null_type(); } - + + cons(typename tuple_access_traits::parameter_type h, + const null_type& = null_type()) + : head (h) {} + template - cons( T1& t1, const null_type&, const null_type&, const null_type&, const null_type&, - const null_type&, const null_type&, const null_type&, const null_type&, const null_type&) + cons(T1& t1, const null_type&, const null_type&, const null_type&, + const null_type&, const null_type&, const null_type&, + const null_type&, const null_type&, const null_type&) : head (t1) {} template cons( const cons& u ) : head(u.head) {} template - cons& operator=(const cons& u ) { head = u.head; return *this; } + cons& operator=(const cons& u ) + { head = u.head; return *this; } // must define assignment operator explicitely, implicit version // is illformed if HT is a reference