2008-02-18 [長年日記]

[C++] Windows CEのデフォルトの呼び出し規約はstdcall

Windows CE向けにコンパイラオプションを指定せずにコンパイルすると呼び出し規約がstdcallになります*1。そのことを忘れていて、

std::vector<VARIANT> l;
...
std::for_each(l.begin(),l.end(),
    boost::bind(&::VariantClear, boost::bind(&boost::addressof<VARIANT>, _1)));

のようなコードをコンパイルするために、BOOST_BIND_ENABLE_STDCALLを定義したら、Windows CE向けにコンパイルできなくなってちょっと焦りました。

ところで、boost::addressofのようにトリッキーなことをしなくていいので、単に&を取ってくれる関数アダプタはboostにはないのでしょうか。こんなやつです。

template<typename T> T* addressof(T t) { return &t; }

*1  可変長引数を取る関数は自動的にcdeclになるようです

[]

トップ «前の日記(2008-01-31) 最新 次の日記(2008-03-01)»