#define A(a) "str" ## a ## test
A(_)
根据17.6.4.3.5
C++11 标准
不以下划线开头的文字后缀标识符保留用于将来的标准化。
上面的代码应该产生"str"_test
一个有效的预处理令牌和它的类user-defined-string-literal
。
clang 3.0 在预处理器模式下运行时会产生错误-E
。
铿锵声给出:
pasting formed '"str"_', an invalid preprocessing token
A(_)
^
note: expanded from:
#define A(a) "str" ## a ## test
^
"str"_test
1 error generated.
我不明白是什么步骤使它决定结果不是无效的预处理令牌。
注意:我正在编写一个 c++11 预处理器。