diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 0eb76a653fc..a19f33c4882 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,22 @@ +2012-07-13 Paolo Carlini + + 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 PR libstdc++/53872 diff --git a/libstdc++-v3/include/bits/hashtable_policy.h b/libstdc++-v3/include/bits/hashtable_policy.h index 27badbcb104..c0a6df5db23 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 - using __is_conv = std::is_convertible<_Pair, value_type>; + using __is_cons = std::is_constructible; template - using _IFconv = std::enable_if<__is_conv<_Pair>::value>; + using _IFcons = std::enable_if<__is_cons<_Pair>::value>; template - using _IFconvp = typename _IFconv<_Pair>::type; + using _IFconsp = typename _IFcons<_Pair>::type; - template> + template> __ireturn_type insert(_Pair&& __v) { @@ -847,7 +847,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION return __h._M_insert(std::forward<_Pair>(__v), __unique_keys()); } - template> + template> 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 881f938063d..cfd478a3b92 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::value>::type> + std::enable_if::value>::type> std::pair 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::value>::type> + std::enable_if::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 6c92bcd198e..6fc47877454 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::value>::type> + std::enable_if::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::value>::type> + std::enable_if::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 45a1c61fea1..4ece92aac12 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<_T2>>::value) - : first(std::forward(__p.first)), - second(std::forward(__p.second)) { } + constexpr pair(pair&&) = default; // DR 811. template::value>::type> + std::enable_if::value>::type> std::pair insert(_Pair&& __x) { @@ -244,8 +244,8 @@ namespace __debug #ifdef __GXX_EXPERIMENTAL_CXX0X__ template::value>::type> + std::enable_if::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 9157fa3458a..e1e09bc07af 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::value>::type> + std::enable_if::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::value>::type> + std::enable_if::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 222bccf969f..96cb148ebb5 100644 --- a/libstdc++-v3/include/debug/unordered_map +++ b/libstdc++-v3/include/debug/unordered_map @@ -248,8 +248,8 @@ namespace __debug } template::value>::type> + std::enable_if::value>::type> std::pair insert(_Pair&& __obj) { @@ -261,8 +261,8 @@ namespace __debug } template::value>::type> + std::enable_if::value>::type> iterator insert(const_iterator __hint, _Pair&& __obj) { @@ -663,8 +663,8 @@ namespace __debug } template::value>::type> + std::enable_if::value>::type> iterator insert(_Pair&& __obj) { @@ -675,8 +675,8 @@ namespace __debug } template::value>::type> + std::enable_if::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 200da370d73..42c32aae4ce 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::value>::type> + std::enable_if::value>::type> std::pair insert(_Pair&& __x) { @@ -289,8 +289,8 @@ namespace __profile #ifdef __GXX_EXPERIMENTAL_CXX0X__ template::value>::type> + std::enable_if::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 b71be4570bd..608d6b76c68 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::value>::type> + std::enable_if::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::value>::type> + std::enable_if::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 36f34e0a105..266e804fe36 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::value>::type> + std::enable_if::value>::type> std::pair insert(_Pair&& __obj) { @@ -227,8 +227,8 @@ namespace __profile } template::value>::type> + std::enable_if::value>::type> iterator insert(const_iterator __iter, _Pair&& __v) { @@ -503,8 +503,8 @@ namespace __profile } template::value>::type> + std::enable_if::value>::type> iterator insert(_Pair&& __obj) { @@ -515,8 +515,8 @@ namespace __profile } template::value>::type> + std::enable_if::value>::type> iterator insert(const_iterator __iter, _Pair&& __v) {