如何使 [std::运算符 " " s] 在命名空间中可见?
How to make [std::operator""s] visible in a namespace?
#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
};
}
错误消息是:
错误:没有匹配的文本运算符来调用"运算符"s" 类型为"无符号长长"或"常量字符*"的参数,并且没有 匹配文本运算符模板 标准::时间::秒 d = 0s;
我的问题是:
我不想use namespace std;
namespace Y
;那么,我应该如何使std::operator""s
在namespace Y
中可见?
如果你想拥有所有的时间文字,那么你可以使用
using namespace std::chrono_literals;
如果你只是想要operator""s
那么你可以使用
using std::chrono_literals::operator""s;
请注意,至少在 coliru gcc 上会发出上述行的警告,但 clang 没有。 对我来说,不应该有任何警告。 我已经在 using 命令在使用保留标识符时发出警告吗?
tl;dr: use
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
相关文章:
- 命名空间中具有.h和.cpp文件的类
- 从父命名空间重载类型
- 在命名空间中定义函数还是限定函数
- 如何使 std::sort 在 std::swap 和我的命名空间的模板化交换之间没有名称冲突?
- 在命名空间中声明变量,在 main 中定义它,使其对所有其他文件可见
- C++使用其他命名空间中的符号,而不使它们可从外部访问
- 在命名空间内的 lambda 中使用时未找到运算符重载
- 与自定义命名空间一起使用时实现 std::error_category、名称解析问题
- 有没有办法转发声明命名空间或只是提前使其可见
- 如何使客户端无法访问命名空间的函数
- 如何使函数模板仅适用于特定命名空间中的类型
- C++:使类及其某些数据成员仅在命名空间中可用
- 如何使 clang 格式将所有详细信息命名空间缩进一个
- 如何在将未命名的命名空间与 MSVC 配合使用时获取可重现的生成
- 如何使 [std::运算符 " " s] 在命名空间中可见?
- 为什么在语句"std::cout << std::endl;"中使用时需要命名空间限定,给定依赖于参数的查找?
- 是否有办法配置clang-format使嵌套的命名空间声明保持在同一行
- 匿名命名空间如何避免使全局静态变量
- 使方法成为嵌套命名空间中的好友
- 在c++中使命名空间私有