Because of the way const_iterator is created by a typedef inside the std::map class dependent on the as yet undecided type T when your code is parsed the new C++11 standard says you need to refer to it as
typename map< T, A >::const_iterator ci = v.begin();
in other words 'the type that is named by looking up const_iterator in std::map< T, A >
templates are fun as long as you're not in a hurry.