C++ 编译器可以规范化 Unicode 标识符吗?

May a C++ compiler normalize Unicode identifiers?

在 C++ 中,我们可以在标识符中使用多种 Unicode 字符。例如,您可以将变量命名为 résumé.

那些带重音的 e 可以用不同的方式表示:作为预组合字符或作为带有组合重音字符的普通 e。许多应用程序 normalize 这样的字符串使得看似相同的字符串实际上匹配。

查看 C++ 标准,我没有看到任何要求编译器规范化标识符的内容,因此变量 résumé 可能不同于变量 résumé。 (在我的测试中,似乎 MSVC 和 clang 都没有规范化标识符。)

是否有任何东西禁止 编译器选择范式?如果不是,那么 phase of translation 应该在什么时候进行标准化?

[明确一点:我说的是标识符,而不是字符串文字。]

我认为允许编译器在翻译阶段 1 中执行此规范化:

Physical source file characters are mapped, in an implementation-defined manner, to the basic source character set (introducing new-line characters for end-of-line indicators) if necessary. The set of physical source file characters accepted is implementation-defined. Any source file character not in the basic source character set (5.3) is replaced by the universal-character-name that designates that character. An implementation may use any internal encoding, so long as an actual extended character encountered in the source file, and the same extended character expressed in the source file as a universal-character-name (e.g., using the \uXXXX notation), are handled equivalently except where this replacement is reverted (5.4) in a raw string literal.

由于源文件字符到基本源字符集和通用字符名称的映射是实现定义的,实现可以选择转换表示预组合或分解的小写字母 e-with-acute 的任何字节序列- 强调相同的通用字符名称,但必须记录此选择。