Невозможно феникс:: связать ци::_val с повышением 1,53 (регресс?)

Приведенный ниже код, использующий boost::spirit, используется для работы с boost 1.44 и boost 1.49:

qi::string("a_token")
[
    boost::phoenix::bind(&node_t::some_func, *qi::_val, true)
]

Я обновил boost до версии 1.53, но теперь этот код больше не компилируется. G ++ жалуется на

error: pointer to member type 'void (node_t::)(bool)' incompatible with object type 'boost::error_cant_deduce_type'

Я не могу понять, как это исправить. Следующий код компилируется:

qi::string("a_token")
[
    boost::phoenix::bind(&node_t::some_func, (node_t*)0, true)
]

Так что я думаю, проблема в qi::val_... Изменился ли интерфейс API boost:: spirit или я пропустил включаемый файл?

Я использую g++4.7, с --std= C++0x.

Здесь я попробовал небольшой тестовый пример, чтобы воспроизвести проблему. Сообщение об ошибке не то же самое (но оно все еще большое!), Но, опять же, проблема с оператором разыменования.

#include <boost/spirit/include/qi.hpp>
#include <boost/spirit/include/phoenix_operator.hpp>
#include <boost/spirit/include/phoenix_bind.hpp>
#include <boost/shared_ptr.hpp>


struct node_t
{
    void foo(bool){}
};


int main()
{
    namespace qi = boost::spirit::qi;

    boost::spirit::qi::rule
    <
        std::string::const_iterator,
        boost::shared_ptr<node_t>(),
        boost::spirit::ascii::space_type
    > rule;

    rule = qi::string("true")
        [boost::phoenix::bind(&node_t::foo, *qi::_val, true)];
}

1 ответ

Решение

Этот ответ сделан из полезных комментариев выше (спасибо llonesmiz).

Изменения, сделанные в boost::shared_ptr влияет на старую версию boost::pheonix при попытке использовать оператор разыменования * над boost::shared_ptr,

Перед включением boost::spirit, #define BOOST_SPIRIT_USE_PHOENIX_V3 1 можно добавить к источнику.

Также некоторые включают в себя такие как #include <boost/spirit/home/phoenix/ ... > должны быть удалены, потому что это будет конфликтовать с spirit v3, Вместо этого включите файлы, такие как #include <boost/spirit/include/phoenix.hpp>,

Другие вопросы по тегам