Re: Broken interaction between std::priority_queue and move-only
types
Seungbeom Kim wrote:
On 2012-05-20 21:19, Zoltan Juhasz wrote:
[snip]
for example:
value_type faulty_pop()
{
auto e = move_if_noexcept( internal_top() );
internal_pop();
return e;
}
does not provide strong exception guarantees, b/c when you return
'e', an exception might occur, and at that point you've changed the
container in an irreversible way.
Can't we enable that function only for value_types with a
non-throwing move constructor?
The pop( value_type& e ), on the other hand, does not suffer from
these kind of problems;
But then you need to default construct an object of value_type and
ask the top element to be move-assigned to it. It may not be always
possible or desirable to default construct such an object, just to
be overwritten later.
I agree. Paradoxically, a movable type without a default constructor
seems like a strange beast, because it presumably implements a "valid,
but resourceless" state for its objects to be left in after having
been moved from.
I would say that a type with a default constructor clearly advertises
that such a state exists and must be reckoned with.
- Wil
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]