是否可以在用户定义的文字中禁用GCC警告缺少下划线?

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标志禁用所有警告的情况下禁用此警告?

cme*_*eub 5

在阅读了对该问题的几条评论之后,我回顾了C ++ 11标准(非最终草案N3337)。

当我说“我理解为什么会生成此警告”时,我错了。我认为该标准在技术上并不需要下划线,而只是一个建议(因此,警告而不是错误)。

但是正如Nicol Bolas提出的那样,在谈论用户定义的文字时,该标准使用以下语言:

“不以下划线开头的文字后缀标识符为将来的标准化保留。” usrlit.suffix

“一些文字后缀标识符保留用于将来的标准化;请参阅[usrlit.suffix]。其文字操作符标识使用此类文字后缀标识符的声明格式错误,不需要诊断。” 超文字

这类似于用于保留标识符和“替代表示”(例如“和”,“或”,“非”)的语言。我认为这很清楚,实际上这首先不是警告,而是错误。

这可能不是“是否可以禁用”问题的直接答案,但对我来说已经足够了。