boost::phoenix with VS2008

boost::phoenix with VS2008

本文关键字:VS2008 with phoenix boost      更新时间:2023-10-16

使用boost::phoenix:

的简单示例
#include <vector>
#include <algorithm>
#include <boost/phoenix.hpp>
namespace ph = boost::phoenix;
namespace place = boost::phoenix::placeholders;
struct A
{
    int val_;
    explicit A(int i) : val_(i) {}
    int foo() { return val_;}
};
int main()
{
    std::vector<A> coll;
    coll.push_back(A(2));
    coll.push_back(A(4));
    coll.push_back(A(5));
    coll.push_back(A(7));
    std::vector<A>::const_iterator cit;
    cit = std::find_if(coll.begin(), coll.end(), ph::bind(&A::foo, place::_1) % 2 == 1);
    int val = (*cit).val_;
    return 0;
}

它可以编译,但是在VS2008的输出中有一些警告:

c:boost_1_47_0boostphoenixbinddetailmember_variable.hpp(54):警告C4180:限定符应用于函数类型没有意义;忽略了

来源:1)代码不正确2)又是MS问题。3) boost::凤凰图书馆做得不好吗?

看起来Boost开发人员决定他们不打算解决这个问题,也许是因为它被确定为编译器部分的错误。这里有一个链接:

https://svn.boost.org/trac/boost/ticket/1097

我认为这是一般的boost::bind(),但我打赌这可能不会被修复。那张罚单里有个变通办法。您可以尝试一下(它只是禁用警告)。