如何在模板类中声明好友用户定义的文字操作符

How to declare friend user-defined literal operator within template class?

本文关键字:用户 好友 定义 操作符 文字 声明      更新时间:2023-10-16

不清楚为什么下面的代码不能用GCC g++ 4.7编译,告诉以下内容:

$ g++ -std=c++11 -fPIC test.cpp 
test.cpp:11:45: error: ‘B operator"" _b(const char*, size_t)’ has invalid argument list

如果C类被声明为非模板类,那么它可以正常编译。

#include <cstddef>
struct B{};
B operator+(B, B) { return B(); }
B operator"" _b(const char *, size_t) { return B(); }
template<typename T>
class C
{
    friend B operator+(B, B);
    friend B operator"" _b(const char *, size_t);
};
int main() { return 0; }

这段代码有什么问题?或者这是一个编译器错误?

或者这是一个编译器错误?

这个代码是正确的,因为操作符函数的签名是标准明确允许的——见§13.5.8/3。