boost::spirit: не компилится пример из туториала. Почему?
От: push  
Дата: 03.07.14 11:33
Оценка:
Разбираюсь с boost::spirit. Остановился на этой странице: http://www.boost.org/doc/libs/1_55_0/libs/spirit/doc/html/spirit/qi/tutorials/mini_xml___asts_.html.
Пытаюсь скомпилить первый пример, а именно вот этот: http://www.boost.org/doc/libs/1_55_0/libs/spirit/example/qi/mini_xml1.cpp
На строке грамматики:

template <typename Iterator>
    struct mini_xml_grammar : qi::grammar<Iterator, mini_xml(), ascii::space_type>
    {
        mini_xml_grammar() : mini_xml_grammar::base_type(xml)
        {

          ...............................

            xml =
                    start_tag                   [at_c<0>(_val) = _1]                 // <-- вот тут
                >>  *node                       [push_back(at_c<1>(_val), _1)]
                >>  end_tag(at_c<0>(_val))
            ;
        }


Он не компилится по причине:

1>------ Build started: Project: BoostSpirit, Configuration: Debug Win32 ------
1> QiBases.cpp
1>с:\dev\learning\boostspirit\src\boostspiritlearning\qibases.cpp(778): error C2678: binary '=' : no operator found which takes a left-hand operand of type 'const boost::spirit::attribute<N>' (or there is no acceptable conversion)
1> with
1> [
1> N=0
1> ]
1> с:\libs\boost_1_51_0\boost\spirit\home\support\context.hpp(195): could be 'boost::spirit::attribute<N> &boost::spirit::attribute<N>::operator =(const boost::spirit::attribute<N> &)'
1> with
1> [
1> N=0
1> ]
1> while trying to match the argument list '(const boost::spirit::attribute<N>, const boost::spirit::_1_type)'
1> with
1> [
1> N=0
1> ]
1> с:\dev\learning\boostspirit\src\boostspiritlearning\qibases.cpp(749) : while compiling class template member function 'clientN::mini_xml_grammar<Iterator>::mini_xml_grammar(void)'
1> with
1> [
1> Iterator=std::_String_const_iterator<char,std::char_traits<char>,std::allocator<char>>
1> ]
1> с:\dev\learning\boostspirit\src\boostspiritlearning\qibases.cpp(799) : see reference to class template instantiation 'clientN::mini_xml_grammar<Iterator>' being compiled
1> with
1> [
1> Iterator=std::_String_const_iterator<char,std::char_traits<char>,std::allocator<char>>
1> ]
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========


Почему не компилится? Что не так с атрибутом? Вроде по логике всё правильно.
Как поправить пример, чтобы он собирался?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.