#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
};
}
错误消息是:
错误:没有匹配的文字运算符可以调用&#39;运算符&#34;&#34; s&#39;同 类型&#39; unsigned long long&#39;或者&#39; const char *&#39;,没有 匹配文字运算符模板 std :: chrono :: seconds d = 0s;
我的问题是:
我不想在use namespace std;
中namespace Y
;那么,我应该如何在std::operator""s
中看到namespace Y
?
答案 0 :(得分:4)
如果您想拥有所有计时文字,那么您可以使用
using namespace std::chrono_literals;
如果您只想operator""s
,那么您可以使用
using std::chrono_literals::operator""s;
请注意,至少在coliru gcc发出上述行的警告但是clang没有。对我来说应该没有警告。我在Should a using command issue a warning when using a reserved identifier?
询问了有关此问题的跟进问题答案 1 :(得分:1)
tl; dr:使用
using namespace std::string_literals
这些运算符在命名空间
std::literals::string_literals
中声明,其中literals
和string_literals
都是内联命名空间。可以使用using namespace std::literals
,using namespace std::string_literals
和using namespace std::literals::string_literals
来访问这些运算符。
来源:https://en.cppreference.com/w/cpp/string/basic_string/operator%22%22s