Boost.Phoenix で、__stdcall 付き関数の評価

Boost.Phoenix の bind は、__stdcall 等が付いた関数に対応していないので、Boost.Bind でラップする必要があります。

[ソース]

#define BOOST_BIND_ENABLE_STDCALL
#include <boost/phoenix.hpp>
#include <boost/bind.hpp>
#include <iostream>

void
__stdcall
disp(int n){
    std::cout << n << std::endl;
}

int
main(){
    namespace phx = boost::phoenix;
    using phx::arg_names::arg1;
    using phx::local_names::_a;
    
    phx::let(_a = arg1)[
        // boost::bind でラップする
        phx::bind(boost::bind(&disp, _1), _a),
        phx::bind(boost::bind(&disp, _1), _a * _a)
    ](10);
    
    return 0;
}

[出力]

10
100

[boost]

  • ver 1.47.0