x3::standard_wide::bool_ parser does not work with standard_wide string
drocheam opened this issue · 1 comments
drocheam commented
It seems the bool parser is not working with wchar_t although being included in the x3::standard_wide namespace.
Minimal Example:
#include <string>
#include <boost/spirit/home/x3.hpp>
int main()
{
namespace x3 = boost::spirit::x3;
std::wstring test = L"true";
bool res = 0;
x3::phrase_parse(test.begin(), test.end(), x3::standard_wide::bool_, x3::standard_wide::space, res);
return 0;
}
Compiled With:
g++ -I -lboost main.cpp
On Manjaro Linux 21.2 and boost 1.76
Error (condensed):
/usr/include/boost/spirit/home/x3/string/detail/string_parse.hpp:24:38: error: no match for call to ‘(const boost::spirit::x3::case_compare<boost::spirit::char_encoding::standard_wide>) (char&, wchar_t&)’
24 | if (i == last || (compare(ch, *i) != 0))
| ~~~~~~~^~~~~~~~
Kojoley commented
Thanks for the bug report.
There was a PR targeting the issue in case_compare
#655 but it has an issue.
Maybe a better way to resolve this is to convert the char
string in the default bool policy via case_compare
encoding somehow
spirit/include/boost/spirit/home/x3/numeric/bool_policies.hpp
Lines 20 to 45 in ac63f8e