C++ 头单元导入语法

use*_*768 5 c++ language-lawyer c++20 c++-modules

在当前的 C++ 草案(2019 年 8 月)中,pp-import http://eel.is/c++draft/cpp.import#nt:pp-import的语法允许pp-tokensheader-nameheader-name-tokens.

该部分的当前版本是P1703的结果:“Recognizing Header Unit Imports Requires Full Preprocessing”。在此提案引起的变化之前,语法仍然允许预处理header-name或之后的标记标记header-name-tokens,但以 a 的形式pp-import-suffix。(第[cpp.module] P1103)。

在这种情况下允许额外的、未使用的预处理令牌背后的原因是什么?

谢谢你。

Mic*_*cer 5

他们在那里允许属性。

阶段 7(解析和语义分析)语法没有改变。导入时仍允许使用属性。以前,第 4 阶段(预处理器)语法试图限制更多允许作为导入的内容,以强制执行以下规则:

pp-import 仅在由翻译阶段 4 生成的标记序列直到导入标记形成导入序列时才被识别,并且导入标记不在另一个的 header-name-tokens 或 pp-import-suffix 内pp-进口。

新规则通过不允许每行超过一个导入来进一步限制它,因此不再需要此规则及其相关语法。