Opened 6 years ago

#8579 new Bugs

qi::as/qi::attr_cast<container_type> cannot be combined with some other parsers

Reported by: Vadim Guchenko <yhw@…> Owned by: Joel de Guzman
Milestone: To Be Determined Component: spirit
Version: Boost Development Trunk Severity: Problem
Keywords: Cc:

Description

The following code should compile, but it doesn't. If you remove ">> qi::eoi" part from the rule, it compiles. There may be other parsers in place of qi::eoi which don't expose any attribute (qi::lit, qi::eps) - the code won't compile either. qi::as<vector_type> is redundant in this particular example, but it can do the work in a real program.

#include <boost/spirit/include/qi.hpp>
#include <boost/spirit/include/qi_match.hpp>
#include <iostream>
#include <sstream>
#include <vector>

namespace qi = boost::spirit::qi;

int main() {
    typedef std::vector<int> vector_type;
    vector_type vector;

    std::istringstream is("11 22 33");
    is >> std::noskipws >> qi::match(qi::as<vector_type>()[qi::int_ % ' '] >> qi::eoi, vector);
//  is >> std::noskipws >> qi::match(qi::attr_cast<vector_type>(qi::int_ % ' ') >> qi::eoi, vector);
    assert(is);

    for (auto value : vector)
        std::cout << value << ' ';
}

Attachments (1)

spirit.qi.handles_container.patch (1.2 KB) - added by K-ballo <kaballo86@…> 6 years ago.
Tentative fix patch

Download all attachments as: .zip

Change History (1)

Changed 6 years ago by K-ballo <kaballo86@…>

Tentative fix patch

Note: See TracTickets for help on using tickets.