cme*_*eub 15 c++ user-defined-literals c++11
void operator"" test( const char* str, size_t sz )
{
std::cout<<str<<" world";
}
int main()
{
"hello"test;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在GCC 4.7中,这会生成"警告:未在'_'之前的文字运算符后缀保留用于将来的标准化[默认启用]"
我理解为什么会产生这个警告,但是GCC说"默认启用".
是否可以在不通过-w标志禁用所有警告的情况下禁用此警告?
在阅读了对该问题的几条评论之后,我回顾了C ++ 11标准(非最终草案N3337)。
当我说“我理解为什么会生成此警告”时,我错了。我认为该标准在技术上并不需要下划线,而只是一个建议(因此,警告而不是错误)。
但是正如Nicol Bolas提出的那样,在谈论用户定义的文字时,该标准使用以下语言:
“不以下划线开头的文字后缀标识符为将来的标准化保留。” usrlit.suffix
“一些文字后缀标识符保留用于将来的标准化;请参阅[usrlit.suffix]。其文字操作符标识使用此类文字后缀标识符的声明格式错误,不需要诊断。” 超文字
这类似于用于保留标识符和“替代表示”(例如“和”,“或”,“非”)的语言。我认为这很清楚,实际上这首先不是警告,而是错误。
这可能不是“是否可以禁用”问题的直接答案,但对我来说已经足够了。
| 归档时间: |
|
| 查看次数: |
1328 次 |
| 最近记录: |