template<class mapT, class K, class V>
void f(mapT& m, const K& k, const V& v)
{
pair<mapT::iterator, bool> p = m.insert(make_pair(k, v));
}
MSVC accepts this code with no errors or warnings. What does the standard have to say about this? Are we allowed to (optional), not allowed to (forbidden), or required to (mandatory) qualify T::iterator with typename in the example above? I am particularly interested in C++03 rules although if anything has changed for 11 it would be nice to know. Thank you.