This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug libstdc++/55043] [4.7 Regression] issue with nesting unordered_map containing unique_ptr into vector


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.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]