I like to make my C++ member variables const if they should not be changed once the object is constructed, however, sometimes they need to be modified by STL.  For example, if I have a vector of my class with const members and I try to swap two elements in the vector, STL tries to use the default generated operator=() and fails because of the const member variables.
I feel like the operator=() is like a constructor in that the whole object is being created and thus would like some way to allow operator=() while still having my const member variables.
Is there anyway to do this in C++03? If not, what about in C++11, perhaps in-place construction is for this?
class Foo {
  const int _id;
  static int _generate_unique_id();
public:
  Foo()
    : _id(_generate_unique_id()) {
  }
};
vector<Foo> foo_vector;
// Fill foo_vector with several entries:
//   [...]
// Try to swap the first and second elements of the vector:
swap(*foo_vector.begin(), *(foo_vector.begin() + 1));
// The above fails to compile due to const member variable _id
// prohibits us from using the default assignment operator.