Please consider the following scenario:
map(T,S*) & GetMap(); //Forward decleration map(T, S*) T2pS = GetMap(); for(map(T, S*)::iterator it = T2pS.begin()
See this:
for (i = v.begin(); i != v.end(); ) { //... if (erase_required) { i = v.erase(i); } else { ++i; } }