C++ `对用户定义的文本运算符使用`声明

C++ `对用户定义的文本运算符使用`声明,c++,namespaces,operator-keyword,using,user-defined-literals,C++,Namespaces,Operator Keyword,Using,User Defined Literals,是否可以使用文本运算符的声明,运算符“” 例如: #包括 名称空间MyNamespace { constexpr std::chrono::hours运算符“”\u hr(无符号长n){ 返回std::chrono::hours{n}; } //…命名空间中的其他内容。。。 } 使用MyNamespace::运算符“”;//不编译! int main() { 自动foo=37_小时; } 我的工作是将这些操作符放在它们自己的嵌套名称空间中,称为literals,这允许使用名称空间MyNames

是否可以使用文本运算符的声明,
运算符“”

例如:

#包括
名称空间MyNamespace
{
constexpr std::chrono::hours运算符“”\u hr(无符号长n){
返回std::chrono::hours{n};
}
//…命名空间中的其他内容。。。
}
使用MyNamespace::运算符“”;//不编译!
int main()
{
自动foo=37_小时;
}
我的工作是将这些操作符放在它们自己的嵌套名称空间中,称为
literals
,这允许
使用名称空间MyNamespace::literals
,但这似乎有点不雅观,我不明白为什么
using
指令不能用于
操作符
函数,就像它可以用于命名空间中的任何其他函数或类型一样

using MyNamespace::operator""_hr;
//                           ^^^

语法参考:


使用MyNamespace::operator“”\u hr@PiotrSkotnicki这就是答案,我的朋友。(即使回答正确!)因此,
用户定义的字符串文字
是对应于
“\u hr
?@KyleStrand是的,
用户定义的字符串文字
字符串文字标识符
相同,分别是
\u hr
using MyNamespace::operator""_hr;
//                           ^^^
using-declaration:
   using typename (opt) nested-name-specifier unqualified-id ;
   using :: unqualified-id ;

unqualified-id:
   identifier
   operator-function-id
   conversion-function-id
   literal-operator-id
   ~ class-name
   ~ decltype-specifier
   template-id

literal-operator-id:
   operator string-literal identifier
   operator user-defined-string-literal