]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
2007-11-08 Paolo Carlini <pcarlini@suse.de>
authorpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 8 Nov 2007 14:40:33 +0000 (14:40 +0000)
committerpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 8 Nov 2007 14:40:33 +0000 (14:40 +0000)
* include/std/type_traits (__decay_selector<_Up, false, false>):
Change according to DR 705.
* include/bits/stl_pair.h (make_pair(_T1&&, _T2&&)): Change
according to DR 706.
* include/tr1_impl/tuple: Tweak.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@130001 138bc75d-0d04-0410-961f-82ee72b054a4

libstdc++-v3/ChangeLog
libstdc++-v3/include/bits/stl_pair.h
libstdc++-v3/include/std/type_traits
libstdc++-v3/include/tr1_impl/tuple
libstdc++-v3/testsuite/20_util/decay/requirements/typedefs.cc

index 282323c0d965cc2e75fd2024d8d44cef3b874d21..0dc8222b7cfe85945da9f76db154817f9e9886e7 100644 (file)
@@ -1,3 +1,11 @@
+2007-11-08  Paolo Carlini  <pcarlini@suse.de>
+
+       * include/std/type_traits (__decay_selector<_Up, false, false>):
+       Change according to DR 705.
+       * include/bits/stl_pair.h (make_pair(_T1&&, _T2&&)): Change
+       according to DR 706.
+       * include/tr1_impl/tuple: Tweak.
+
 2007-11-08  Paolo Carlini  <pcarlini@suse.de>
 
        * include/debug/vector (push_back, emplace): Fix signature typo.
index 7163b62205f7851ac26ebea8eb9d7076e3d5cd5a..66230261077c5e0010466cabfa9212953ee06970 100644 (file)
@@ -211,14 +211,44 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
     make_pair(_T1 __x, _T2 __y)
     { return pair<_T1, _T2>(__x, __y); }
 #else
+  template<typename _Tp>
+    class reference_wrapper;
+
+  // Helper which adds a reference to a type when given a reference_wrapper
+  template<typename _Tp>
+    struct __strip_reference_wrapper
+    {
+      typedef _Tp __type;
+    };
+
+  template<typename _Tp>
+    struct __strip_reference_wrapper<reference_wrapper<_Tp> >
+    {
+      typedef _Tp& __type;
+    };
+
+  template<typename _Tp>
+    struct __strip_reference_wrapper<const reference_wrapper<_Tp> >
+    {
+      typedef _Tp& __type;
+    };
+
+  template<typename _Tp>
+    struct __decay_and_strip
+    {
+      typedef typename __strip_reference_wrapper<
+       typename decay<_Tp>::type>::__type __type;
+    };
+
+  // NB: DR 706.
   template<class _T1, class _T2>
-    inline pair<typename std::decay<_T1>::type,
-               typename std::decay<_T2>::type>
+    inline pair<typename __decay_and_strip<_T1>::__type,
+               typename __decay_and_strip<_T2>::__type>
     make_pair(_T1&& __x, _T2&& __y)
     {
-      return pair<typename std::decay<_T1>::type,
-                 typename std::decay<_T2>::type>(std::forward<_T1>(__x),
-                                                 std::forward<_T2>(__y));
+      return pair<typename __decay_and_strip<_T1>::__type,
+                 typename __decay_and_strip<_T2>::__type>
+       (std::forward<_T1>(__x), std::forward<_T2>(__y));
     }
 #endif
 
index 33442ba5a31ec93f53b0f777309f89b2b6e60af5..38c92abf6e81fa14859d1e5b44dd9b9dfc35516f 100644 (file)
@@ -308,21 +308,21 @@ namespace std
           bool _IsFunction = is_function<_Up>::value> 
     struct __decay_selector;
 
+  // NB: DR 705.
   template<typename _Up> 
     struct __decay_selector<_Up, false, false>
-    { typedef _Up __type; };
+    { typedef typename remove_cv<_Up>::type __type; };
 
   template<typename _Up> 
     struct __decay_selector<_Up, true, false>
     { typedef typename remove_extent<_Up>::type* __type; };
 
-
   template<typename _Up> 
     struct __decay_selector<_Up, false, true>
     { typedef typename add_pointer<_Up>::type __type; };
 
   template<typename _Tp> 
-  struct decay 
+    struct decay 
     { 
     private:
       typedef typename remove_reference<_Tp>::type __remove_type;
index 52017d617c1e59852e0e26ff1dd4aa66ed0db6c8..e71bd4174c2b57d8e55599b63a5f5d2289ef1f73 100644 (file)
@@ -39,9 +39,6 @@ namespace std
 {
 _GLIBCXX_BEGIN_NAMESPACE_TR1
 
-  template<typename _Tp>
-    class reference_wrapper;
-
   // Adds a const reference to a non-reference type.
   template<typename _Tp>
     struct __add_c_ref
@@ -375,6 +372,10 @@ _GLIBCXX_BEGIN_NAMESPACE_TR1
               const tuple<_UElements...>& __u)
     { return !(__t < __u); }
 
+#ifdef _GLIBCXX_INCLUDE_AS_TR1
+  template<typename _Tp>
+    class reference_wrapper;
+
   // Helper which adds a reference to a type when given a reference_wrapper
   template<typename _Tp>
     struct __strip_reference_wrapper
@@ -393,6 +394,7 @@ _GLIBCXX_BEGIN_NAMESPACE_TR1
     {
       typedef _Tp& __type;
     };
+#endif
 
   template<typename... _Elements>
     inline tuple<typename __strip_reference_wrapper<_Elements>::__type...>
index 162ddd2ff42da70e01e55f9f4c83876438c4a5ce..30b98d518e0822662aafbc58286d0c96fc37d62a 100644 (file)
@@ -34,8 +34,9 @@ void test01()
   typedef decay<bool>::type            test1_type;
   VERIFY( (is_same<test1_type, bool>::value) );
 
+  // NB: DR 705.
   typedef decay<const int>::type       test2_type;
-  VERIFY( (is_same<test2_type, const int>::value) );
+  VERIFY( (is_same<test2_type, int>::value) );
 
   typedef decay<int[4]>::type          test3_type;
   VERIFY( (is_same<test3_type, std::remove_extent<int[4]>::type*>::value) );