boostorg/spirit_x4

`char_(from, to)` and `char_("set")` should reject invalid code units

开放

#45 创建于 2025年9月23日

 (0 条评论) (0 个反应) (0 位负责人)C++ (3 个派生)auto 404
bughelp wantedtests needed

仓库指标

星标
 (37 个星标)
PR 合并指标
 (30 天内没有已合并 PR)

描述

This issue is not just about the implementation quality, it is actually about the validity of the design.

There are currently multiple layers of misfeature:

  1. char_('Z', 'A') -- should be rejected
  2. char_(from, to) with non-single code unit param -- should be rejected
  3. char_("Z-A") -- should be rejected
  4. char_("あ") -- should be rejected, while char_(U'あ') should be maintained
  5. char_("abcあdef") -- should be rejected, while char_(U"abcあdef") should be maintained

The real problem is that we can fix x4::unicode but can't do anything about x4::standard and x4::standard_wide.

Non-unicode variants operate on the execution character set, and moreover, our implementation currently uses <cctype>, which utilizes the C locale. So they don't have well-defined meaning for "character ranges" or "character sets".

Note that I used the term "code units", which is the Unicode terminology, merely for explanation, and C locales may or may not be Unicode in practice. Even if some C locale happens to be Unicode, the case like (5.) cannot be resolved for x4::standard because multi-code-unit character like u8"あ" is not representable by the character parser; i.e., (char)u8'あ' is invalid even when char is UTF-8.

贡献者指南