Fwd: Fix std::pair std::is_copy_assignable behavior
François Dumont
frs.dumont@gmail.com
Sat Apr 13 19:21:00 GMT 2013
Hider
Here is a patch already posted to libstdc++ mailing but I am
resending following libstdc++ maintainers advises to add gcc-patches
mailing list.
This patch proposal is to fix the behavior of std::pair regarding
the std::is_*_assignable meta programming functions.
As announced it is requiring a compiler patch to extend DR 1402
resolution to all defaulted methods.
2013-04-12 François Dumont <fdumont@gcc.gnu.org>
* call.c (joust): Extend DR 1402 to all defaulted methods.
This modification is mandatory so that pair& operator=(const pair&)
can be defaulted whereas leaving gcc consider the other operator= in
some situations like std::pair<int&, int>. This way, with usage of
std::enable_if on the template operator=, we can control when p1= p2 is
a valid expression resulting in a correct behavior of
std::is_copy_assignable.
For the moment I preferred to add a dg-require-normal-mode option
in the single test that fail to compile because of the compiler
modification.
Does DR 1402 resolution generalization need a Standard committee
validation first ?
2013-04-13 François Dumont <fdumont@gcc.gnu.org>
* include/bits/stl_pair.h (operator=(const pair&)): Defaulted.
(operator=(pair&&)): Likewise.
(template<> operator=(const pair&)): Add noexcept
qualification. Enable if is_assignable<T&, const U&> true for both
parameters.
(template<> operator=(pair<>&&)): Add noexcept
qualification. Enable if is_assignable<T&, U&&> true for both
parameters.
* testsuite/23_containers/unordered_set/55043.cc: Add
dg-require-normal-mode.
* testsuite/20_util/pair/is_move_assignable.cc: New.
* testsuite/20_util/pair/is_copy_assignable.cc: Likewise.
* testsuite/20_util/pair/is_assignable.cc: Likewise.
* testsuite/20_util/pair/is_nothrow_move_assignable.cc: Likewise.
* testsuite/20_util/pair/assign_neg.cc: Likewise.
* testsuite/20_util/pair/is_nothrow_copy_assignable.cc: Likewise.
* testsuite/20_util/pair/assign.cc: Likewise.
François
-------------- next part --------------
A non-text attachment was scrubbed...
Name: call.c.patch
Type: text/x-patch
Size: 1460 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/libstdc++/attachments/20130413/b9f88497/attachment.bin>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: pair.patch
Type: text/x-patch
Size: 19879 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/libstdc++/attachments/20130413/b9f88497/attachment-0001.bin>
More information about the Libstdc++
mailing list