な、なんでじゃーーーー!!
同じソース、同じ boost のバージョン、同じ WTL のバージョン、同じコンパイラ*1 を利用しているにもかかわらず、研究室・サブマシンでビルドが通るコードが メインマシンで通らないとかマジ勘弁してください。 。・゚・(ノД`)・゚・。
いやほんま意味不明…。対処の仕方が全くわからない……。
つかね。
boost::lambda::bind(&::strlen, boost::lambda::_1);
↑このコードでビルドエラーが出てくる時点でなにか間違ってる。orz
で、面白いことに、同じソリューションにある別のプロジェクトで↑のコードをビルドしてみると普通に通ってみたり。
なんやろう…。細かい部分で何か違うのかしら〜……。
もしくは、CPUによってコンパイル方法が違うとか…? ……仮にそうだったとしても、こりゃ バグ の部類だろうし。 う〜ん…
どうすんべ…あーもう…
余談
一応、エラーが起きる環境を書いておこう…何か役に立つかもしれんし…。
- CPU : Athlon 1260MHz
- OS : Windows 20000
- コンパイラ : VS 2003
- boost : 1.33.1
- WTL : 7.5 030
- プリコンパイル済みヘッダーで boost::bind, boost::lambda::lambda, boost::lambda::bind の順番で #include
↓コンパイルエラー内容(一部)
CDLLEnumerator.cpp(39) : error C2780: 'const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<10,boost::lambda::function_action<10,Result>>,detail::bind_tuple_mapper<const Arg1,const Arg2,const Arg3,const Arg4,const Arg5,const Arg6,const Arg7,const Arg8,const Arg9,const Arg10>::type>> boost::lambda::bind(const Arg1 &,const Arg2 &,const Arg3 &,const Arg4 &,const Arg5 &,const Arg6 &,const Arg7 &,const Arg8 &,const Arg9 &,const Arg10 &)' : 10 引数が必要です - 2 が設定されます。 f:\CPP\lib\boost\boost\lambda\detail\bind_functions.hpp(1743) : 'boost::lambda::bind' の宣言を確認してください。 CDLLEnumerator.cpp(39) : error C2780: 'const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<Arity,Act>,detail::bind_tuple_mapper<const Arg1,const Arg2,const Arg3,const Arg4,const Arg5,const Arg6,const Arg7,const Arg8,const Arg9,const Arg10>::type>> boost::lambda::bind(const Arg1 &,const Arg2 &,const Arg3 &,const Arg4 &,const Arg5 &,const Arg6 &,const Arg7 &,const Arg8 &,const Arg9 &,const Arg10 &)' : 10 引数が必要です - 2 が設定されます。 with [ Arity=10, Act=boost::lambda::function_action<10> ] f:\CPP\lib\boost\boost\lambda\detail\bind_functions.hpp(1710) : 'boost::lambda::bind' の宣言を確認してください。 : : : CDLLEnumerator.cpp(39) : error C2783: 'const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<2,boost::lambda::function_action<2,Result>>,detail::bind_tuple_mapper<const Arg1,const Arg2>::type>> boost::lambda::bind(const Arg1 &,const Arg2 &)' : 'Result' 用のテンプレートの引数を減少できませんでした。 f:\CPP\lib\boost\boost\lambda\detail\bind_functions.hpp(232) : 'boost::lambda::bind' の宣言を確認してください。 CDLLEnumerator.cpp(39) : error C2893: 関数テンプレート 'const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<Arity,Act>,detail::bind_tuple_mapper<const Arg1,const Arg2>::type>> boost::lambda::bind(const Arg1 &,const Arg2 &)' の特定に失敗しました with [ Arity=2, Act=boost::lambda::function_action<2> ] 次のテンプレート引数で: 'std::deque<_Ty>::size_type (__thiscall std::deque<_Ty>::* )(void) const' with [ _Ty=tstring ] 'boost::lambda::placeholder2_type' CDLLEnumerator.cpp(39) : error C2784: 'const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<2,boost::lambda::function_action<2,Result>>,detail::bind_tuple_mapper<Result(__cdecl &)(Par1),const Arg2>::type>> boost::lambda::bind(Result (__cdecl &)(Par1),const Arg2 &)' : 'T1 (__cdecl &)(T2) 用のテンプレート引数を 'std::deque<_Ty>::size_type (__thiscall std::deque<_Ty>::* )(void) const' から減少できませんでした。 with [ _Ty=tstring ] f:\CPP\lib\boost\boost\lambda\detail\bind_functions.hpp(190) : 'boost::lambda::bind' の宣言を確認してください。 CDLLEnumerator.cpp(39) : error C2780: 'const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<1,boost::lambda::function_action<1,Result>>,detail::bind_tuple_mapper<const Arg1>::type>> boost::lambda::bind(const Arg1 &)' : 1 引数が必要です - 2 が設定されます。 f:\CPP\lib\boost\boost\lambda\detail\bind_functions.hpp(91) : 'boost::lambda::bind' の宣言を確認してください。 CDLLEnumerator.cpp(39) : error C2780: 'const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<Arity,Act>,detail::bind_tuple_mapper<const Arg1>::type>> boost::lambda::bind(const Arg1 &)' : 1 引数が必要です - 2 が設定されます。 with [ Arity=1, Act=boost::lambda::function_action<1> ] f:\CPP\lib\boost\boost\lambda\detail\bind_functions.hpp(71) : 'boost::lambda::bind' の宣言を確認してください。 CDLLEnumerator.cpp(39) : error C2780: 'const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<1,boost::lambda::function_action<1,Result>>,detail::bind_tuple_mapper<Result(__cdecl &)(void)>::type>> boost::lambda::bind(Result (__cdecl &)(void))' : 1 引数が必要です - 2 が設定されます。 f:\CPP\lib\boost\boost\lambda\detail\bind_functions.hpp(49) : 'boost::lambda::bind' の宣言を確認してください。 CDLLEnumerator.cpp(39) : error C2780: '_Ty std::accumulate(_InIt,_InIt,_Ty)' : 3 引数が必要です - 4 が設定されます。 numeric(14) : 'std::accumulate' の宣言を確認してください。
"特定に失敗しました" とか言われてもねぇ…^^;
ちなみに何やろうかとしてると、「dequeの配列」があり、各dequeの要素数を accumlatar を利用して合計値を算出しようと試みてます。*2