BOOST_FOREACH で std::map を使うとエラーが出る事がある

#include <map>
#include <boost/foreach.hpp>

void f()
{
  std::map<int, int> m;
  BOOST_FOREACH(std::map<int, int>::value_type const& iter, m)
  {
  }
  return 0;
}

これ VC8 でコンパイルが通りません……。エラーが大量に出るのですが、その前に BOOST_FOREACH の引数が多すぎると言う警告(C4002)が出るのでカンマがいけないのでしょうか。

#include <map>
#include <boost/foreach.hpp>

void f()
{
  typedef std::map<int, int> map_t;
  map_t m;
  BOOST_FOREACH(map_t::value_type const& iter, m)
  {
  }
}

上記のようにすると通ります。自分が何か間違えたのかとしばらく悩んでしまいました。