な、なんでじゃーーーー!!

同じソース、同じ 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

*1:VS2003

*2:なんか日本語がおかしい気が…^^;