
2010/10/15 John Bytheway <jbytheway+boost@gmail.com>:
I presume that Scott only intended to suggest abandoning const-correctness in the implementation, not the interface. Thus the above assignment would still cause an error. Since type safety has already been abandoned by making all pointers void*, const-correctness doesn't seem much of an additional sacrifice.
I see the point. But I do not understand the advantage of using a single underlying type instead of two (which I presume was also Thorsten idea). Using always void* would not only require a lot of const_cast when returning data from the containers but also think that ptr_vector<T>::iterator must be of different type as ptr_vector<const T>::iterator, as: boost::ptr_vector<const int> v; v.push_back(new int); (*v.begin()) = 2; shall also be compiler error, as the container contains const elements. To sum up I think it is best to use the metafunction when instantiating the underlying type, as the implementation is simpler.