C++ 如何在名称空间中引用用户定义的文本运算符?

C++ 如何在名称空间中引用用户定义的文本运算符?,c++,c++11,user-defined-literals,C++,C++11,User Defined Literals,考虑以下几点: #include <iostream> namespace X { void operator ""_test(unsigned long long x) { std::cout << x; } } int main() { using namespace X; 10_test; // 10_X::test; /* doesn't work */ } 但是,当然不能像解析器认为的那样,X

考虑以下几点:

#include <iostream>

namespace X
{
    void operator ""_test(unsigned long long x)
    {
        std::cout << x;
    }
}

int main()
{
    using namespace X;
    10_test;
    // 10_X::test; /* doesn't work */
}
但是,当然不能像解析器认为的那样,
X
引用操作符的名称

X::operator ""_test(10)
工作正常,但很笨拙。

#包括
#include <iostream>

namespace X {
  inline namespace literals {
    void operator ""_test(unsigned long long x) {
      std::cout << x;
    }
  }
}

int main() {
  {
    using namespace X::literals;
    10_test;
  }
  {
    using X::operator""_test;
    10_test;
  }
}
名称空间X{ 内联命名空间文本{ 无效运算符“”\u测试(无符号长x){
std::cout如果必须显式限定UDL,它有什么意义?如果有什么意义,我希望它是
10 X::\u test
,因为下划线是文本名称的一部分。您是否正在使用X:“”_test;
可能吗?作为一项工作,可以将文本放在它们自己的文本名称空间中,然后您可以只包含该名称空间而不是整个名称空间。您还可以使用X::operator“”\u test@NathanOliver
使用X::“\u test
不会这样做。我认为
使用X::operator”_测试
就可以了。太好了,看起来是个不错的选择。
#include <iostream>

namespace X {
  inline namespace literals {
    void operator ""_test(unsigned long long x) {
      std::cout << x;
    }
  }
}

int main() {
  {
    using namespace X::literals;
    10_test;
  }
  {
    using X::operator""_test;
    10_test;
  }
}