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 N
th element in the tuple type T
.
+gives the type of the N
th 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)