diff options
author | Paolo Carlini <pcarlini@suse.de> | 2007-11-08 14:40:33 +0000 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2007-11-08 14:40:33 +0000 |
commit | ce796131e113b8a07e03c50c0d922fc8e4d2776e (patch) | |
tree | 3d993480f8340ba75c118ac958d59d749b4e01b2 /libstdc++-v3 | |
parent | 71733172a45e638feaed625231589440b56256e3 (diff) | |
download | gcc-ce796131e113b8a07e03c50c0d922fc8e4d2776e.zip gcc-ce796131e113b8a07e03c50c0d922fc8e4d2776e.tar.gz gcc-ce796131e113b8a07e03c50c0d922fc8e4d2776e.tar.bz2 |
type_traits (__decay_selector<_Up, [...]): Change according to DR 705.
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.
From-SVN: r130001
Diffstat (limited to 'libstdc++-v3')
-rw-r--r-- | libstdc++-v3/ChangeLog | 8 | ||||
-rw-r--r-- | libstdc++-v3/include/bits/stl_pair.h | 40 | ||||
-rw-r--r-- | libstdc++-v3/include/std/type_traits | 6 | ||||
-rw-r--r-- | libstdc++-v3/include/tr1_impl/tuple | 8 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/20_util/decay/requirements/typedefs.cc | 3 |
5 files changed, 53 insertions, 12 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 282323c..0dc8222 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,5 +1,13 @@ 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. 2007-11-08 Paolo Carlini <pcarlini@suse.de> diff --git a/libstdc++-v3/include/bits/stl_pair.h b/libstdc++-v3/include/bits/stl_pair.h index 7163b62..6623026 100644 --- a/libstdc++-v3/include/bits/stl_pair.h +++ b/libstdc++-v3/include/bits/stl_pair.h @@ -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 diff --git a/libstdc++-v3/include/std/type_traits b/libstdc++-v3/include/std/type_traits index 33442ba..38c92ab 100644 --- a/libstdc++-v3/include/std/type_traits +++ b/libstdc++-v3/include/std/type_traits @@ -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; diff --git a/libstdc++-v3/include/tr1_impl/tuple b/libstdc++-v3/include/tr1_impl/tuple index 52017d6..e71bd41 100644 --- a/libstdc++-v3/include/tr1_impl/tuple +++ b/libstdc++-v3/include/tr1_impl/tuple @@ -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...> diff --git a/libstdc++-v3/testsuite/20_util/decay/requirements/typedefs.cc b/libstdc++-v3/testsuite/20_util/decay/requirements/typedefs.cc index 162ddd2..30b98d5 100644 --- a/libstdc++-v3/testsuite/20_util/decay/requirements/typedefs.cc +++ b/libstdc++-v3/testsuite/20_util/decay/requirements/typedefs.cc @@ -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) ); |