BOOST_FOREACHはつかったことがないんだけども、
ループ変数の定義の中にコンマが含まれていると、マクロの引数の区切りのコンマと間違えられてエラーになるということがあるらしい。
Pitfallsにあるtypedefする方法と外部で定義する方法以外にこんなのはどうか。
#include <map> #include <boost/foreach.hpp> #include <iostream> int main() { std::map<int, int> m; m[1]=1; m[2]=4; m[3]=9; #if 0 BOOST_FOREACH(std::map<int, int>::value_type const& iter, m) { std::cout<<iter.second<<std::endl; } #endif #define THRU(X,...) X,__VA_ARGS__ BOOST_FOREACH(THRU(std::map<int, int>::value_type const& iter), m) { std::cout<<iter.second<<std::endl; } BOOST_FOREACH(auto iter, m) { std::cout<<iter.second<<std::endl; } return 0; }