using 命令在使用保留标识符时是否应发出警告?

Should a using command issue a warning when using a reserved identifier?

提问人:NathanOliver 提问时间:1/3/2017 最后编辑:Angew is no longer proud of SONathanOliver 更新时间:1/4/2017 访问量:854

问:

使用线路时

using std::literals::chrono_literals::operator""s;

在 G++ 6.3.0 中,编译器发出警告,指出:

警告:不以“_”开头的文字运算符后缀保留用于将来的标准化

using std::literals::chrono_literals::operator""s;

MSVS中也发出了类似的警告。但是,clang 3.8.0 没有发出这样的警告。

既然是由计时码库的标准定义的,这不应该发出警告吗,因为我们只是导入名称而不是定义一个?operator""s

C++ 语言律师 保留词 使用指令 用户定义的文字

评论

2赞 MSalters 1/3/2017
警告,除非它们是强制性诊断,否则总是有点主观。虽然我同意你的观点,但这只是让我们的共同意见。

答:

2赞 Columbo 1/3/2017 #1

可以说,措辞已经足够清楚了——[over.literal]/1

一些文字后缀标识符是 为未来的标准化保留;见17.6.4.3.5。literal-operator-id 使用此类文本后缀的声明 标识符格式不正确;无需诊断。

这可以解释为引用(UDL 运算符)声明,其“名称”是 literal-operator-id——这当然不包括您的情况,因为 literal-operator-id s 是不合格的。[reserved.names]/2 也是如此,其中“context”是用户定义的文字运算符的声明。

评论

0赞 T.C. 1/4/2017
通过此参数,没有声明“直接”包含文本运算符 ID。该非终端仅在两个位置使用(template-idunqualified-id)。
0赞 Columbo 1/4/2017
@T.C. 不,我的论点不是关于生产,而是关于等价。该声明不命名 literal-operator-id
0赞 T.C. 1/4/2017
好吧,是一个文字运算符 ID,所以我不确定我是否得到这个参数。operator""s
0赞 Columbo 1/4/2017
@T.C.文本运算符 ID 从不限定。
1赞 NathanOliver 8/23/2017
@Columbo 有什么更新吗?我正在考虑提供赏金,以引起更多关注。