tuple (get(_Tuple_impl<>&, get(const _Tuple_impl<>&): Rename as __get_helper.
authorPaolo Carlini <pcarlini@suse.de>
Mon, 19 Mar 2007 16:58:54 +0000 (16:58 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Mon, 19 Mar 2007 16:58:54 +0000 (16:58 +0000)
2007-03-19  Paolo Carlini  <pcarlini@suse.de>

* include/tr1/tuple (get(_Tuple_impl<>&, get(const _Tuple_impl<>&):
Rename as __get_helper.
(get(tuple<>&, get(const tuple<>&)): Forward to the latter.

From-SVN: r123063

libstdc++-v3/ChangeLog
libstdc++-v3/include/tr1/tuple

index 300b720..a01ad67 100644 (file)
@@ -1,3 +1,9 @@
+2007-03-19  Paolo Carlini  <pcarlini@suse.de>
+
+       * include/tr1/tuple (get(_Tuple_impl<>&, get(const _Tuple_impl<>&):
+       Rename as __get_helper.
+       (get(tuple<>&, get(const tuple<>&)): Forward to the latter.
+
 2007-03-19  Benjamin Kosnik  <bkoz@redhat.com>
 
        * docs/doxygen/user.cfg.in: Update for new includes, macros.
index 4e1a2d4..7beef19 100644 (file)
@@ -269,22 +269,40 @@ _GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1)
   template<typename... _Elements>
     const int tuple_size<tuple<_Elements...> >::value;
 
-  // Returns a const reference to the ith element of a tuple.
-  // Any const or non-const ref elements are returned with their original type.
   template<int __i, typename _Head, typename... _Tail>
     inline typename __add_ref<_Head>::type
-    get(_Tuple_impl<__i, _Head, _Tail...>& __t)
+    __get_helper(_Tuple_impl<__i, _Head, _Tail...>& __t)
     {
       return __t._M_head;
     }
 
   template<int __i, typename _Head, typename... _Tail>
     inline typename __add_c_ref<_Head>::type
-    get(const _Tuple_impl<__i, _Head, _Tail...>& __t)
+    __get_helper(const _Tuple_impl<__i, _Head, _Tail...>& __t)
     {
       return __t._M_head;
     }
 
+  // Return a reference (const reference) to the ith element of a tuple.
+  // Any const or non-const ref elements are returned with their original type.
+  template<int __i, typename... _Elements>
+    inline typename __add_ref<
+                      typename tuple_element<__i, tuple<_Elements...> >::type
+                    >::type
+    get(tuple<_Elements...>& __t)
+    { 
+      return __get_helper<__i>(__t); 
+    }
+
+  template<int __i, typename... _Elements>
+    inline typename __add_c_ref<
+                      typename tuple_element<__i, tuple<_Elements...> >::type
+                    >::type
+    get(const tuple<_Elements...>& __t)
+    {
+      return __get_helper<__i>(__t);
+    }
+
   // This class helps construct the various comparison operations on tuples
   template<int __check_equal_size, int __i, int __j,
           typename _Tp, typename _Up>