У меня проблемы с синтаксическим анализом необязательного материала в деке надстройки в 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
);
}