From 1972959fda899a0ba93526d1a616e0ec381c4ce7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jaakko=20J=C3=A4rvi?= Date: Wed, 26 Feb 2003 23:10:55 +0000 Subject: [PATCH] element::type takes constness into consideration [SVN r17666] --- doc/tuple_advanced_interface.html | 4 +++- include/boost/tuple/detail/tuple_basic.hpp | 15 +++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/doc/tuple_advanced_interface.html b/doc/tuple_advanced_interface.html index 1b9df5a..a8cfc5c 100644 --- a/doc/tuple_advanced_interface.html +++ b/doc/tuple_advanced_interface.html @@ -20,7 +20,9 @@ Suppose T is a tuple type, and N is a constant integra
element<N, T>::type
-gives the type of the Nth element in the tuple type T. +gives the type of the Nth element in the tuple type T. If T is const, the resulting type is const qualified as well. +Note that the constness of T does not affect reference type +elements.

length<T>::value
diff --git a/include/boost/tuple/detail/tuple_basic.hpp b/include/boost/tuple/detail/tuple_basic.hpp index acc25b9..22478c6 100644 --- a/include/boost/tuple/detail/tuple_basic.hpp +++ b/include/boost/tuple/detail/tuple_basic.hpp @@ -153,6 +153,21 @@ struct element<0,T> typedef typename T::head_type type; }; +template +struct element +{ +private: + typedef typename T::tail_type Next; + typedef typename element::type unqualified_type; +public: + typedef typename boost::add_const::type type; +}; +template +struct element<0,const T> +{ + typedef typename boost::add_const::type type; +}; + // -get function templates ----------------------------------------------- // Usage: get(aTuple)