The only reason it would take a CIndex * to store and not a const CIndex * const is if it did in fact modify it.
You could do this:
std::vector< const Index *> m_vIndexes;
This tells me that the vector holds constant Index objects. And the compiler likes this as well and does not require you to cast away const later. You can still store const objects but you cannot modify what they point to and you cannot modify the objects via the vector.
So then you are passing pointer to a const object and storing the pointer in the const object vector.
This makes more sense to me. Now when you need to modify the objects later you will run into the same issue. Then you will probably have to const_cast to get it to work.