Created on 2010-08-25.00:00:00 last changed 167 months ago
Proposed resolution:
Resolved by N3241
[ Resolution proposed in ballot comment ]
State as a general requirement that moved-from objects can be destroyed and can be the destination of an assignment. Any other use is undefined behavior.
Addresses US-85
20.2.1 Table 34 "MoveConstructible requirements" says "Note: rv remains a valid object. Its state is unspecified". Some components give stronger guarantees. For example, moved-from shared_ptrs are guaranteed empty (20.9.11.2.1/25). In general, what the standard really should say (preferably as a global blanket statement) is that moved-from objects can be destroyed and can be the destination of an assignment. Anything else is radioactive. For example, containers can be "emptier than empty". This needs to be explicit and required generally.
Note: The last time that one of us mentioned "emptier than empty" (i.e. containers missing sentinel nodes, etc.) the objection was that containers can store sentinel nodes inside themselves in order to avoid dynamically allocating them. This is unacceptable because
(a) it forces existing implementations (i.e. Dinkumware's, Microsoft's, IBM's, etc.) to change for no good reason (i.e. permitting more operations on moved-from objects), and
(b) it invalidates end-iterators when swapping containers. (The Working Paper currently permits end-iterator invalidation, which we consider to be wrong, but that's a separate argument. In any event, mandating end-iterator invalidation is very different from permitting it.)
History | |||
---|---|---|---|
Date | User | Action | Args |
2011-03-22 08:05:22 | admin | set | status: open -> nad |
2011-02-25 15:54:31 | admin | set | messages: + msg5547 |
2010-10-24 22:33:31 | admin | set | messages: + msg5078 |
2010-08-25 00:00:00 | admin | create |