In the actual C++ standard, creating collections satisfying following rules is hard if not impossible:
It looks like the three conditions I've enumerated in my post are possible to obtain by using Boost Pointer Container Library.