用户定义的文字,没有下划线

时间:2015-03-12 18:16:08

标签: c++ c++11 c++14 user-defined-literals

根据cppreference,可以使用

定义文字
CSomeClass operator ""s(const char* literal, size_t size);

现在阅读完段落之后,我认为也应该可以定义

CSomeClass operator ""r(const char* literal, size_t size);

(请注意r ud-suffix而不是s

重载s只会发出clang警告

warning: user-defined literal suffixes not starting with '_' are reserved [-Wuser-defined-literals]

我在用-std=c++14编译时无法理解。重载r会给出

error: invalid suffix on literal; C++11 requires a space between literal and identifier [-Wreserved-user-defined-literal]
warning: user-defined literal suffixes not starting with '_' are reserved; no literal will invoke this operator [-Wuser-defined-literals]

对我来说似乎更不负责任。

为什么clang会发出这些警告/错误,如何使r ud-suffix有效。

1 个答案:

答案 0 :(得分:9)

用户定义的文字必须以下划线_开头:不以下划线开头的后缀保留给标准库提供的文字运算符。