Я думаю, что это дублирует How to write a boost::spirit::qi parser to parse an integer range from 0 to std::numeric_limits<int>::max()?, а также вопрос, который я помню, просматривая список рассылки.
Поскольку это, по-видимому, не задокументировано, вы протестировали?
Или это требование не имеет никакого отношения к диапазону парсера?
Я ожидаю, что это будет последний. Я ожидаю, что тип атрибута говорит об атрибуте, а не синтаксическом анализаторе. Анализатор парсера, распространение атрибута присваивает атрибуту. Разделение проблем.
Распространение атрибута может выполнять любые неявные преобразования, которые будут иметь языки C++. Это на самом деле не отличается от использования unsigned
в scanf("%d")
или чтение без знака Int с помощью std::istream
: См How to read unsigned int variables from file correctly, using ifstream?
Я бы ожидать, что это все, чтобы быть правдой, потому что C++ объединяет в себе основные язык значения
- оплаты только за то, что вам нужно
- программист знает, что он делает.
Фактически, это корень проблемы: Spirit определяет qi::int_
, qi::uint_
и друзей. Если вы скопируете пользовательские комбинации, используя базовый шаблон qi::[u]int_parser<>
, вы сообщаете компилятору «Я знаю, что делаю».
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Все это не является авторитетным. Я даже не проверял код/документы. Я думаю, что это вопрос документации, который лучше задавать на mailing list
Как насчет этого бита из [docs] (http://www.boost.org/doc/libs/1_62_0/libs/spirit/doc/ HTML/дух/й/ссылка/цифровой/uint.html)? «Все числовые парсеры проверяют условия переполнения на основе типа T, с которым был создан соответствующий uint_parser <>. Если разобранное число переполняет этот тип, синтаксический анализ не выполняется. Обратите внимание, что проверка переполнения не основана на типе поставляемого атрибут, но зависит исключительно от параметра шаблона T. " То, как я читаю, это то, что T повлияет на диапазон, который он будет анализировать. Я читаю это неправильно? –