如何使 [std::operator""s] 在命名空间中可见?

xml*_*lmx 10 c++ visibility namespaces user-defined-literals c++11

#include <chrono>

namespace X
{
using namespace std;
struct A
{
    std::chrono::seconds d = 0s; // ok
};
}

namespace Y
{
struct B
{
    std::chrono::seconds d = 0s; // error
};
}
Run Code Online (Sandbox Code Playgroud)

错误信息是:

错误:没有匹配的文字运算符用于调用具有 'unsigned long long' 或 'const char *' 类型参数的 'operator""s',并且没有匹配的文字运算符模板 std::chrono::seconds d = 0s;

我的问题是:

我不想use namespace std;进去namespace Y;那么,我应该如何使其std::operator""s可见namespace Y

Nat*_*ica 12

如果你想拥有所有的计时文字,那么你可以使用

using namespace std::chrono_literals;
Run Code Online (Sandbox Code Playgroud)

如果你只是想要,operator""s那么你可以使用

using std::chrono_literals::operator""s;
Run Code Online (Sandbox Code Playgroud)

请注意,至少在coliru gcc 上对上述行发出警告,但 clang 没有。对我来说应该没有警告。我在使用保留标识符时应使用命令发出警告吗?