msvc2010 で boost::for_each を使用するとコンパイルエラーになる
と、いうのを Twitter で見かけたので試してみましたが、コンパイルエラーになりました。
どうやら
[ソース]
#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 <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