I have been trying to use Boost.Container to make a map<copyable_but_not_moveable, moveable_but_not_copyable>.

Unfortunately I have been unable to do this because the value_type of boost::container::map is std::pair, which does not support move semantics (in C++03). This causes problems for the moveable_but_not_copyable type. It means that, for example:

myMap[copyable_but_not_moveable()];

does not compile. This behaviour is fully supported in C++11 mode, and I see no reason why a custom C++03 pair class would be unable to use the Boost.Move emulation to achieve the same effect.