diff options
author | Paolo Carlini <paolo.carlini@oracle.com> | 2012-07-13 08:59:58 +0000 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2012-07-13 08:59:58 +0000 |
commit | 57cee56a1efe681eac1a5c427f4ffe1c6f4f77cd (patch) | |
tree | 98cbf83c315fe42c65c2ddcf8b73005612e9ba99 /libstdc++-v3 | |
parent | f0df84ab4a058d5ad3a75a37cb04816c49638aa8 (diff) | |
download | gcc-57cee56a1efe681eac1a5c427f4ffe1c6f4f77cd.zip gcc-57cee56a1efe681eac1a5c427f4ffe1c6f4f77cd.tar.gz gcc-57cee56a1efe681eac1a5c427f4ffe1c6f4f77cd.tar.bz2 |
re PR libstdc++/53657 ([C++11] pair(pair&&) move constructor is non-trivial)
2012-07-13 Paolo Carlini <paolo.carlini@oracle.com>
PR libstdc++/53657
* include/bits/stl_pair.h (pair<>::pair(pair&&)): Declare defaulted,
per C++11.
* include/bits/stl_map.h (map<>::insert(_Pair&&), map<>::insert
(const_iterator, _Pair&&)): Constrain with std::is_constructible,
per LWG2005.
* include/bits/stl_multimap.h (multimap<>::insert(_Pair&&),
multimap<>::insert(const_iterator, _Pair&&)): Likewise.
* include/bits/hashtable_policy.h (_Insert<>::insert(_Pair&&),
_Insert<>::insert(const_iterator, _Pair&&)): Likewise.
* include/debug/unordered_map: Adjust.
* include/debug/map.h: Likewise.
* include/debug/multimap.h: Likewise.
* include/profile/unordered_map: Likewise.
* include/profile/map.h: Likewise.
* include/profile/multimap.h: Likewise.
From-SVN: r189456
Diffstat (limited to 'libstdc++-v3')
-rw-r--r-- | libstdc++-v3/ChangeLog | 19 | ||||
-rw-r--r-- | libstdc++-v3/include/bits/hashtable_policy.h | 10 | ||||
-rw-r--r-- | libstdc++-v3/include/bits/stl_map.h | 10 | ||||
-rw-r--r-- | libstdc++-v3/include/bits/stl_multimap.h | 10 | ||||
-rw-r--r-- | libstdc++-v3/include/bits/stl_pair.h | 10 | ||||
-rw-r--r-- | libstdc++-v3/include/debug/map.h | 8 | ||||
-rw-r--r-- | libstdc++-v3/include/debug/multimap.h | 8 | ||||
-rw-r--r-- | libstdc++-v3/include/debug/unordered_map | 16 | ||||
-rw-r--r-- | libstdc++-v3/include/profile/map.h | 10 | ||||
-rw-r--r-- | libstdc++-v3/include/profile/multimap.h | 10 | ||||
-rw-r--r-- | libstdc++-v3/include/profile/unordered_map | 18 |
11 files changed, 71 insertions, 58 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 0eb76a6..a19f33c 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,22 @@ +2012-07-13 Paolo Carlini <paolo.carlini@oracle.com> + + PR libstdc++/53657 + * include/bits/stl_pair.h (pair<>::pair(pair&&)): Declare defaulted, + per C++11. + * include/bits/stl_map.h (map<>::insert(_Pair&&), map<>::insert + (const_iterator, _Pair&&)): Constrain with std::is_constructible, + per LWG2005. + * include/bits/stl_multimap.h (multimap<>::insert(_Pair&&), + multimap<>::insert(const_iterator, _Pair&&)): Likewise. + * include/bits/hashtable_policy.h (_Insert<>::insert(_Pair&&), + _Insert<>::insert(const_iterator, _Pair&&)): Likewise. + * include/debug/unordered_map: Adjust. + * include/debug/map.h: Likewise. + * include/debug/multimap.h: Likewise. + * include/profile/unordered_map: Likewise. + * include/profile/map.h: Likewise. + * include/profile/multimap.h: Likewise. + 2012-07-06 Paolo Carlini <paolo.carlini@oracle.com> PR libstdc++/53872 diff --git a/libstdc++-v3/include/bits/hashtable_policy.h b/libstdc++-v3/include/bits/hashtable_policy.h index 27badbc..c0a6df5 100644 --- a/libstdc++-v3/include/bits/hashtable_policy.h +++ b/libstdc++-v3/include/bits/hashtable_policy.h @@ -831,15 +831,15 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION using __base_type::insert; template<typename _Pair> - using __is_conv = std::is_convertible<_Pair, value_type>; + using __is_cons = std::is_constructible<value_type, _Pair&&>; template<typename _Pair> - using _IFconv = std::enable_if<__is_conv<_Pair>::value>; + using _IFcons = std::enable_if<__is_cons<_Pair>::value>; template<typename _Pair> - using _IFconvp = typename _IFconv<_Pair>::type; + using _IFconsp = typename _IFcons<_Pair>::type; - template<typename _Pair, typename = _IFconvp<_Pair>> + template<typename _Pair, typename = _IFconsp<_Pair>> __ireturn_type insert(_Pair&& __v) { @@ -847,7 +847,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION return __h._M_insert(std::forward<_Pair>(__v), __unique_keys()); } - template<typename _Pair, typename = _IFconvp<_Pair>> + template<typename _Pair, typename = _IFconsp<_Pair>> iterator insert(const_iterator, _Pair&& __v) { return __iconv_type()(insert(std::forward<_Pair>(__v))); } diff --git a/libstdc++-v3/include/bits/stl_map.h b/libstdc++-v3/include/bits/stl_map.h index 881f938..cfd478a 100644 --- a/libstdc++-v3/include/bits/stl_map.h +++ b/libstdc++-v3/include/bits/stl_map.h @@ -1,7 +1,7 @@ // Map implementation -*- C++ -*- // Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, -// 2011 Free Software Foundation, Inc. +// 2011, 2012 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the @@ -530,8 +530,8 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER #ifdef __GXX_EXPERIMENTAL_CXX0X__ template<typename _Pair, typename = typename - std::enable_if<std::is_convertible<_Pair, - value_type>::value>::type> + std::enable_if<std::is_constructible<value_type, + _Pair&&>::value>::type> std::pair<iterator, bool> insert(_Pair&& __x) { return _M_t._M_insert_unique(std::forward<_Pair>(__x)); } @@ -583,8 +583,8 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER #ifdef __GXX_EXPERIMENTAL_CXX0X__ template<typename _Pair, typename = typename - std::enable_if<std::is_convertible<_Pair, - value_type>::value>::type> + std::enable_if<std::is_constructible<value_type, + _Pair&&>::value>::type> iterator insert(const_iterator __position, _Pair&& __x) { return _M_t._M_insert_unique_(__position, diff --git a/libstdc++-v3/include/bits/stl_multimap.h b/libstdc++-v3/include/bits/stl_multimap.h index 6c92bcd..6fc4787 100644 --- a/libstdc++-v3/include/bits/stl_multimap.h +++ b/libstdc++-v3/include/bits/stl_multimap.h @@ -1,7 +1,7 @@ // Multimap implementation -*- C++ -*- // Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, -// 2011 Free Software Foundation, Inc. +// 2011, 2012 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the @@ -451,8 +451,8 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER #ifdef __GXX_EXPERIMENTAL_CXX0X__ template<typename _Pair, typename = typename - std::enable_if<std::is_convertible<_Pair, - value_type>::value>::type> + std::enable_if<std::is_constructible<value_type, + _Pair&&>::value>::type> iterator insert(_Pair&& __x) { return _M_t._M_insert_equal(std::forward<_Pair>(__x)); } @@ -488,8 +488,8 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER #ifdef __GXX_EXPERIMENTAL_CXX0X__ template<typename _Pair, typename = typename - std::enable_if<std::is_convertible<_Pair, - value_type>::value>::type> + std::enable_if<std::is_constructible<value_type, + _Pair&&>::value>::type> iterator insert(const_iterator __position, _Pair&& __x) { return _M_t._M_insert_equal_(__position, diff --git a/libstdc++-v3/include/bits/stl_pair.h b/libstdc++-v3/include/bits/stl_pair.h index 45a1c61..4ece92a 100644 --- a/libstdc++-v3/include/bits/stl_pair.h +++ b/libstdc++-v3/include/bits/stl_pair.h @@ -1,7 +1,7 @@ // Pair implementation -*- C++ -*- // Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, -// 2010, 2011 +// 2010, 2011, 2012 // Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free @@ -122,13 +122,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION : first(__p.first), second(__p.second) { } constexpr pair(const pair&) = default; - - // XXX Defaulted?!? Breaks std::map!!! - pair(pair&& __p) - noexcept(__and_<is_nothrow_move_constructible<_T1>, - is_nothrow_move_constructible<_T2>>::value) - : first(std::forward<first_type>(__p.first)), - second(std::forward<second_type>(__p.second)) { } + constexpr pair(pair&&) = default; // DR 811. template<class _U1, class = typename diff --git a/libstdc++-v3/include/debug/map.h b/libstdc++-v3/include/debug/map.h index 34b83a5..95871ac 100644 --- a/libstdc++-v3/include/debug/map.h +++ b/libstdc++-v3/include/debug/map.h @@ -213,8 +213,8 @@ namespace __debug #ifdef __GXX_EXPERIMENTAL_CXX0X__ template<typename _Pair, typename = typename - std::enable_if<std::is_convertible<_Pair, - value_type>::value>::type> + std::enable_if<std::is_constructible<value_type, + _Pair&&>::value>::type> std::pair<iterator, bool> insert(_Pair&& __x) { @@ -244,8 +244,8 @@ namespace __debug #ifdef __GXX_EXPERIMENTAL_CXX0X__ template<typename _Pair, typename = typename - std::enable_if<std::is_convertible<_Pair, - value_type>::value>::type> + std::enable_if<std::is_constructible<value_type, + _Pair&&>::value>::type> iterator insert(const_iterator __position, _Pair&& __x) { diff --git a/libstdc++-v3/include/debug/multimap.h b/libstdc++-v3/include/debug/multimap.h index 9157fa3..e1e09bc 100644 --- a/libstdc++-v3/include/debug/multimap.h +++ b/libstdc++-v3/include/debug/multimap.h @@ -201,8 +201,8 @@ namespace __debug #ifdef __GXX_EXPERIMENTAL_CXX0X__ template<typename _Pair, typename = typename - std::enable_if<std::is_convertible<_Pair, - value_type>::value>::type> + std::enable_if<std::is_constructible<value_type, + _Pair&&>::value>::type> iterator insert(_Pair&& __x) { return iterator(_Base::insert(std::forward<_Pair>(__x)), this); } @@ -227,8 +227,8 @@ namespace __debug #ifdef __GXX_EXPERIMENTAL_CXX0X__ template<typename _Pair, typename = typename - std::enable_if<std::is_convertible<_Pair, - value_type>::value>::type> + std::enable_if<std::is_constructible<value_type, + _Pair&&>::value>::type> iterator insert(const_iterator __position, _Pair&& __x) { diff --git a/libstdc++-v3/include/debug/unordered_map b/libstdc++-v3/include/debug/unordered_map index 222bccf..96cb148 100644 --- a/libstdc++-v3/include/debug/unordered_map +++ b/libstdc++-v3/include/debug/unordered_map @@ -248,8 +248,8 @@ namespace __debug } template<typename _Pair, typename = typename - std::enable_if<std::is_convertible<_Pair, - value_type>::value>::type> + std::enable_if<std::is_constructible<value_type, + _Pair&&>::value>::type> std::pair<iterator, bool> insert(_Pair&& __obj) { @@ -261,8 +261,8 @@ namespace __debug } template<typename _Pair, typename = typename - std::enable_if<std::is_convertible<_Pair, - value_type>::value>::type> + std::enable_if<std::is_constructible<value_type, + _Pair&&>::value>::type> iterator insert(const_iterator __hint, _Pair&& __obj) { @@ -663,8 +663,8 @@ namespace __debug } template<typename _Pair, typename = typename - std::enable_if<std::is_convertible<_Pair, - value_type>::value>::type> + std::enable_if<std::is_constructible<value_type, + _Pair&&>::value>::type> iterator insert(_Pair&& __obj) { @@ -675,8 +675,8 @@ namespace __debug } template<typename _Pair, typename = typename - std::enable_if<std::is_convertible<_Pair, - value_type>::value>::type> + std::enable_if<std::is_constructible<value_type, + _Pair&&>::value>::type> iterator insert(const_iterator __hint, _Pair&& __obj) { diff --git a/libstdc++-v3/include/profile/map.h b/libstdc++-v3/include/profile/map.h index 200da37..42c32aa 100644 --- a/libstdc++-v3/include/profile/map.h +++ b/libstdc++-v3/include/profile/map.h @@ -1,6 +1,6 @@ // Profiling map implementation -*- C++ -*- -// Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc. +// Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the @@ -248,8 +248,8 @@ namespace __profile #ifdef __GXX_EXPERIMENTAL_CXX0X__ template<typename _Pair, typename = typename - std::enable_if<std::is_convertible<_Pair, - value_type>::value>::type> + std::enable_if<std::is_constructible<value_type, + _Pair&&>::value>::type> std::pair<iterator, bool> insert(_Pair&& __x) { @@ -289,8 +289,8 @@ namespace __profile #ifdef __GXX_EXPERIMENTAL_CXX0X__ template<typename _Pair, typename = typename - std::enable_if<std::is_convertible<_Pair, - value_type>::value>::type> + std::enable_if<std::is_constructible<value_type, + _Pair&&>::value>::type> iterator insert(const_iterator __position, _Pair&& __x) { diff --git a/libstdc++-v3/include/profile/multimap.h b/libstdc++-v3/include/profile/multimap.h index b71be45..608d6b7 100644 --- a/libstdc++-v3/include/profile/multimap.h +++ b/libstdc++-v3/include/profile/multimap.h @@ -1,6 +1,6 @@ // Profiling multimap implementation -*- C++ -*- -// Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc. +// Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the @@ -186,8 +186,8 @@ namespace __profile #ifdef __GXX_EXPERIMENTAL_CXX0X__ template<typename _Pair, typename = typename - std::enable_if<std::is_convertible<_Pair, - value_type>::value>::type> + std::enable_if<std::is_constructible<value_type, + _Pair&&>::value>::type> iterator insert(_Pair&& __x) { return iterator(_Base::insert(std::forward<_Pair>(__x))); } @@ -209,8 +209,8 @@ namespace __profile #ifdef __GXX_EXPERIMENTAL_CXX0X__ template<typename _Pair, typename = typename - std::enable_if<std::is_convertible<_Pair, - value_type>::value>::type> + std::enable_if<std::is_constructible<value_type, + _Pair&&>::value>::type> iterator insert(const_iterator __position, _Pair&& __x) { return iterator(_Base::insert(__position, diff --git a/libstdc++-v3/include/profile/unordered_map b/libstdc++-v3/include/profile/unordered_map index 36f34e0..266e804 100644 --- a/libstdc++-v3/include/profile/unordered_map +++ b/libstdc++-v3/include/profile/unordered_map @@ -1,6 +1,6 @@ // Profiling unordered_map/unordered_multimap implementation -*- C++ -*- -// Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc. +// Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the @@ -214,8 +214,8 @@ namespace __profile } template<typename _Pair, typename = typename - std::enable_if<std::is_convertible<_Pair, - value_type>::value>::type> + std::enable_if<std::is_constructible<value_type, + _Pair&&>::value>::type> std::pair<iterator, bool> insert(_Pair&& __obj) { @@ -227,8 +227,8 @@ namespace __profile } template<typename _Pair, typename = typename - std::enable_if<std::is_convertible<_Pair, - value_type>::value>::type> + std::enable_if<std::is_constructible<value_type, + _Pair&&>::value>::type> iterator insert(const_iterator __iter, _Pair&& __v) { @@ -503,8 +503,8 @@ namespace __profile } template<typename _Pair, typename = typename - std::enable_if<std::is_convertible<_Pair, - value_type>::value>::type> + std::enable_if<std::is_constructible<value_type, + _Pair&&>::value>::type> iterator insert(_Pair&& __obj) { @@ -515,8 +515,8 @@ namespace __profile } template<typename _Pair, typename = typename - std::enable_if<std::is_convertible<_Pair, - value_type>::value>::type> + std::enable_if<std::is_constructible<value_type, + _Pair&&>::value>::type> iterator insert(const_iterator __iter, _Pair&& __v) { |