This compiles:
int* p1;
const int* p2;
p2 = p1;
This does not:
vector v1;
vector v2;
v2 = v1;
Dangerous, unless you know the types are absolutely compatible:
v2 = reinterpret_cast
Most STL implementations do use a specialization were all vectors of pointers share the same underlying implementation. This is since (void *) is typically the same size as (int *) or any other pointer type.