Приведенный ниже код предназначен для синтаксического анализа строки "key = val; .." в std :: map, и он не может быть скомпилирован с ошибкой:
Ошибка C2146: синтаксическая ошибка: отсутствует '> 'перед идентификатором' value_type '
Ошибка C2039:' value_type ': не является членом' std :: pair, std :: allocator, std :: basic_string, std :: allocator >> 'c: \ git \risk-engine-core_tcp \ stage \ boost-1.66.0-barclays-1 \ include \ boost \ spirit \ home \ support \ container.hpp
Не нравится последний параметр, "содержание"(std :: map), переданный в качестве контейнера.
Boost версия 1.66
namespace qi = boost::spirit::qi;
std::map<std::string,std::string> contents;
std::string::iterator first = str.begin();
std::string::iterator last = str.end();
const bool result = qi::phrase_parse(first,last,
*( *(qi::char_-"=") >> qi::lit("=") >> *(qi::char_-";") >> -qi::lit(";") ),
ascii::space, contents);
Глядя на документы повышения и переполнения стека, я не вижу никаких проблем с вышеупомянутымкод.