Опционально в Boost Spirit x3 вызывает сбой компиляции - PullRequest
0 голосов
/ 08 апреля 2020

У меня проблемы с синтаксическим анализом необязательного материала в деке надстройки в std :: vector. У меня есть простой пример, где я пытаюсь проанализировать CSV-формат с необязательными комментариями (начинающимися с ';') и по какой-то причине необязательные комментарии вызывают проблемы. Если я omit их (и сделать Res в vector<vector<string>>, все работает нормально. Не уверен, что я делаю неправильно.

#include <boost/spirit/home/x3.hpp>
#include <string_view>
#include <cstring>
#include <iostream>

using It = std::string_view::iterator;
bool test(It first, It last) {


    using namespace boost::spirit::x3;
    using boost::fusion::deque;
    using std::string;
    using boost::optional;
    using std::vector;        

    vector<
        deque<
            vector<string>,optional<string>
        >
    > res;

    auto comment = ';' > lexeme[*~char_("\r\n")];
    auto new_line = *lit('\r') >> '\n';
    auto rest = -comment >> new_line;

    return phrase_parse(first, last,

        //  Begin grammar
        (
            *(((*~char_(",;\n")) % ',') > rest)
        )
        //  End grammar,
        , boost::spirit::x3::blank, res

    );
}
...