如何在模板类中声明朋友用户定义的文字运算符?

dzi*_*top 6 c++ g++ language-lawyer user-defined-literals c++11

目前还不清楚为什么下面的代码不能用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
Run Code Online (Sandbox Code Playgroud)

如果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; }
Run Code Online (Sandbox Code Playgroud)

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

Col*_*mbo 3

\n

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

\n
\n\n

此代码是正确的,因为标准明确允许运算符函数的签名 - 请参阅 \xc2\xa713.5.8/3。\n所以这是一个 GCC-Bug。

\n