This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug libstdc++/77334] New: Cannot move assign std::map with non-copyable and non-movable mapped_type
- From: "inadgob at yahoo dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Mon, 22 Aug 2016 23:33:49 +0000
- Subject: [Bug libstdc++/77334] New: Cannot move assign std::map with non-copyable and non-movable mapped_type
- Auto-submitted: auto-generated
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77334
Bug ID: 77334
Summary: Cannot move assign std::map with non-copyable and
non-movable mapped_type
Product: gcc
Version: 6.1.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: libstdc++
Assignee: unassigned at gcc dot gnu.org
Reporter: inadgob at yahoo dot com
Target Milestone: ---
Consider the following code:
#include <map>
struct A
{
A(A&&) = delete;
};
int main()
{
std::map<int, A> m1, m2;
m2 = std::move(m1);
}
The move assignment is rejected; diagnostics here:
http://melpon.org/wandbox/permlink/s3MafVYFzQrUMN4F.
According to the allocator-aware container requirements table in
[container.requirements.general], there should be no special requirements on
value_type in this case, so the assignment should work.
This is due to the use of an if statement instead of tag dispatching to check
the allocator traits in the implementation of _Rb_tree's move assignment
operator.
The issue seems to have appeared in version 4.9.0.
The example that prompted this bug report and more details are available here:
http://stackoverflow.com/q/39040609/4326278.