为什么没有正确解析 bitand 以形成右值引用?

Why isn't bitand properly parsed to form an rvalue reference?

可以使用替代标记形成右值引用:

int and i = 0;  

也可以将物理源线拼接成逻辑源线后形成:

int &\
& i = 0;

那么为什么下面的程序编译不通过呢?

int main() {
    int &\
bitand i = 5;
}

根据标准,我不明白为什么不应该这样做。

[lex.digraph] In all respects of the language, each alternative token behaves the same, respectively, as its primary token, except for its spelling.

[lex.phases] Each instance of a backslash character (\) immediately followed by a new-line character is deleted, splicing physical source lines to form logical source lines. Only the last backslash on any physical source line shall be eligible for being part of such a splice.

我是否遗漏了其他信息,或者这是一个编译器错误?

反斜杠+换行序列是一个转移注意力的问题。这些东西在标记化阶段(分别是翻译的第二阶段和第三阶段)之前被删除。因此,我们可以专注于这些片段:

&&
&bitand

第一行有一个标记,&&。第二行有两个标记,&bitand。最后一个标记等同于 & 因此第二行的行为就好像它包含两个 & 标记一样。这与一个 && 令牌不同。后者由两个 & 个字符组成,而不是两个 & 个标记。