This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug libstdc++/55043] [4.7 Regression] issue with nesting unordered_map containing unique_ptr into vector
- From: "redi at gcc dot gnu.org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Wed, 16 Jan 2013 10:25:57 +0000
- Subject: [Bug libstdc++/55043] [4.7 Regression] issue with nesting unordered_map containing unique_ptr into vector
- Auto-submitted: auto-generated
- References: <bug-55043-4@http.gcc.gnu.org/bugzilla/>
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55043
--- Comment #26 from Jonathan Wakely <redi at gcc dot gnu.org> 2013-01-16 10:25:57 UTC ---
(In reply to comment #24)
> That really feels like a hack.
It is a hack, to work around a throwing move ctor that I don't have time to
fix.
> Anyone using boost::is_copy_constructible or
> whatever personal trick to detect copyable types will still be impacted.
Impacted in what way? They'll get the same result as they did previously.
This changes std::is_copy_constructible to be more accurate and makes
__move_if_noexcept work for the unordered containers. How does that affect
boost::is_copy_constructible?
It gives the wrong result for unordered_containers of non-copyable types, but
already did, and it's not my responsibility to fix everyone else's traits :-)
> Did
> your idea in comment #15 not work?
I don't think that would be conforming and would be a huge amount of work to
replace every constructor in vector and forward_list (and every other container
as they are updated to be allocator-aware) with a template constructor. I'm
not going to work on that solution, and I won't approve patches to do that
without a lot of persuasion.
I still do want to use SFINAE to remove allocator_traits<A>::construct(args)
from participating in overload resolution when A().construct(args) is not valid
and is_constructible<A::value_type, args> is false, which I hope is conforming,
and would allow a better solution similar to comment 17, by deleting the
unordered_xxx copy ctor.
I'll revisit the patch tonight.