According to current Standard (20.7.9), std::allocator has a member propagate_on_container_move_assignment which is set to true_type:
template class allocator
{
public:
typedef size_t size_type;
typedef ptrdiff_t difference_type;
typedef T* pointer;
typedef const T* const_pointer;
typedef T& reference;
typedef const T& const_reference;
typedef T value_type;
template struct rebind { typedef allocator other; };
typedef true_type propagate_on_container_move_assignment;
typedef true_type is_always_equal;
[...]
std::allocator has no data members and always compared as equal with any other std::allocator. Is there any reason to move those default allocators on move assignment?
is_always_equalwas added post-C++14.