title: Why does std::allocator require propagate_on_container_move_assignment to be true?
body: <p>According to current Standard (20.7.9), <code>std::allocator</code> has a member <code>propagate_on_container_move_assignment</code> which is set to <code>true_type</code>:</p>
  
  <blockquote>
    <p>template  class allocator<br>
    {<br>
      public:<br>
        typedef size_t size_type;<br>
        typedef ptrdiff_t difference_type;<br>
        typedef T* pointer;<br>
        typedef const T* const_pointer;<br>
        typedef T&amp; reference;<br>
        typedef const T&amp; const_reference;<br>
        typedef T value_type;<br>
        template  struct rebind { typedef allocator other; };<br>
        <strong>typedef true_type propagate_on_container_move_assignment;</strong><br>
        <strong>typedef true_type is_always_equal;</strong><br>
        [...]</p>
  </blockquote>
  
  <p><code>std::allocator</code> has no data members and always compared as equal with any other <code>std::allocator</code>. Is there any reason to move those default allocators on move assignment?</p>