如何在模板类中声明友元用户定义字面量运算符?

6
以下代码在使用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; }

这段代码存在什么问题?或者是编译器的bug吗?

1
Clang接受它,我会说这是GCC编译器的错误。 - Daniel Frey
1
行为在 g++4.10 20140613 中仍然相同。 - dyp
1
刚刚添加了一个 bug。谢谢大家。 - emsr
1个回答

3

还是编译器的错误?

这段代码是正确的,因为操作符函数的签名被标准明确允许 - 请参见§13.5.8/3。因此这是GCC的一个Bug。


这是一个bug。谢谢。g++接受非模板类的文字操作符友元,但不接受模板类。clang++可以接受这个。已记录为[PR C++/61648] (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61648)。 - emsr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接