The standard only requires that moved-from standard library types are in a 'valid but unspecified state', not that any moved-from container is empty. When the container is using a POCMA allocator, asserting that the moved-from container is empty is reasonable because the target container needs to take ownership of the memory buffers allocated from the source container's allocator. However, when the allocator is non-POCMA, the destination container must not take over any buffers, and effectively must copy the contents of the source container.
In the MSVC++ implementation, in this non-POCMA case, we do not clear() the source container, so that subsequent operations can reuse memory if the container is not immediately destroyed.