msvc2010 で boost::for_each を使用するとコンパイルエラーになる

と、いうのを Twitter で見かけたので試してみましたが、コンパイルエラーになりました。
どうやら から #include が削除されているのが原因みたい。

[ソース]

#include <boost/range/algorithm/for_each.hpp>
#include <iostream>

int
main(){
    int v[] = {1, 2, 3, 4, 5};

    boost::for_each(v, [](int n){
        std::cout << n << std::endl;
    });

    return 0;
}

[エラー]

main.cpp
D:\boost\boost_1_50_0\boost/range/algorithm/for_each.hpp(34) : error C2143: 構文エラー : ',' が '<' の前にありません。
D:\boost\boost_1_50_0\boost/range/algorithm/for_each.hpp(34) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
D:\boost\boost_1_50_0\boost/range/algorithm/for_each.hpp(52) : error C2143: 構文エラー : ',' が '<' の前にありません。
D:\boost\boost_1_50_0\boost/range/algorithm/for_each.hpp(52) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
D:\boost\boost_1_50_0\boost/range/algorithm/for_each.hpp(58) : error C2995: 'UnaryFunction boost::range::for_each_detail::for_each_impl(Iterator,Iterator,UnaryFunction,int)' : 関数テンプレートは既に定義されています
        D:\boost\boost_1_50_0\boost/range/algorithm/for_each.hpp(33) : 'boost::range::for_each_detail::for_each_impl' の宣言を確認してください。


エラーになるのは msvc2010 Boost 1.50.0 を使用した場合です。
gcc や clang では問題ありません。

[回避方法]

の前に を include する。

#include <boost/utility/enable_if.hpp>
#include <boost/range/algorithm/for_each.hpp>
#include <iostream>

int
main(){
    int v[] = {1, 2, 3, 4, 5};

    boost::for_each(v, [](int n){
        std::cout << n << std::endl;
    });

    return 0;
}

[boost]

  • ver 1.50.0