是否有理由将运算符“”放入std :: literals :: string_literals?

Pap*_*ter 5 c++ string-literals user-defined-literals c++14

我很惊讶地发现该代码未编译(假设我们使用的是C ++ 14编译器):

std::cout << "hello world!\n"s;
Run Code Online (Sandbox Code Playgroud)

ideone显示的错误如下

找不到字符串文字运算符“ operator””

幸运的是,使用以下using语句修复起来非常简单:

using namespace std::literals::string_literals;
std::cout << "hello world!\n"s; // Compiles!
Run Code Online (Sandbox Code Playgroud)

我想知道是否将标准字符串用户定义的文字放在不同于其std::string本身的名称空间中的原因是什么?我一直在思考,但我不知道原因。

无法与operator""sfrom 冲突,std::chrono因为它们使用不同的类型:

auto ten_seconds = 10s; // ten seconds
auto some_string = "some string"s; // some string
Run Code Online (Sandbox Code Playgroud)

我在想,在resason可能是不会发生冲突与我的用户定义的文字,但该标准说的是我必须用preceed他们'_'下划线

警告:保留不带'_'的文字运算符后缀以供将来标准化

因此,我很惊讶,没有人知道将字符串文字运算符放入std::literals::string_literals?中的原因。

谢谢。