`using`声明用于用户定义的文字运算符

Kyl*_*and 6 c++ namespaces using operator-keyword user-defined-literals

是否可以using为文字运算符声明operator ""

例如,

#include <chrono>

namespace MyNamespace
{
  constexpr std::chrono::hours operator "" _hr(unsigned long long n){
    return std::chrono::hours{n};
  }

  // ... other stuff in the namespace ...
}

using MyNamespace::operator"";    // DOES NOT COMPILE!

int main()
{
  auto foo = 37_hr;
}
Run Code Online (Sandbox Code Playgroud)

我的解决方法是将这些运算符放在它们自己的嵌套命名空间中literals,这允许using namespace MyNamespace::literals;,但这似乎有点不优雅,我不明白为什么using指令不能以operator相同的方式用于函数命名空间中的任何其他函数或类型.

Pio*_*cki 6

using MyNamespace::operator""_hr;
//                           ^^^
Run Code Online (Sandbox Code Playgroud)

DEMO

语法参考:

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
Run Code Online (Sandbox Code Playgroud)