>>500
標準だけではどうしようもないから、そうするしかないと思う。

もしBoostを使ってよければこんなこともできる。
#include <map>
#include <iostream>
#include <functional>
#include <algorithm>
#include <boost/bind.hpp>
#include <boost/iterator/transform_iterator.hpp>
struct Value {
    void MemFunc() { std::cout << "call\n"; }
};
int main() {
    typedef std::map<int, Value> hoge_map;
    hoge_map m;
    m.insert(hoge_map::value_type());
    std::for_each(
        boost::make_transform_iterator(m.begin(), boost::bind(&hoge_map::value_type::second, _1)),
        boost::make_transform_iterator(m.end(), boost::bind(&hoge_map::value_type::second, _1)),
        std::mem_fun_ref(&Value::MemFunc));
}
transform_iteratorは、*演算子での参照時、指定した関数オブジェクトを適用するというもの。
ここでは、bindでpairからValueの方を取り出す関数オブジェクトを指定しているので、
このtransform_iteratorは、*で参照するとValue型のオブジェクトが取り出せるようになっている。