Boost :: Феникс с VS2008 - PullRequest
       7

Boost :: Феникс с VS2008

0 голосов
/ 10 октября 2011

Простой пример с использованием 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_0 \ boost \ phoenix \ bind \detail \ member_variable.hpp (54): предупреждение C4180: квалификатор, примененный к типу функции, не имеет значения;игнорируется

Откуда это взялось: 1) некорректность в коде 2) снова проблемы с MS.3) библиотека boost :: phoenix не справляется?

1 Ответ

1 голос
/ 10 октября 2011

Похоже, разработчики Boost решили, что не собираются обходить эту проблему, возможно, поскольку это было определено как ошибка со стороны компилятора. Вот ссылка:

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

Я думаю, что это для общего boost :: bind (), но я бы поспорил, что это, вероятно, не будет исправлено. В этом билете предлагается обходной путь. Вы можете попробовать это (просто отключает предупреждение).

...