目前还不清楚为什么以下代码无法使用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; }
这段代码有什么问题?或者它是编译器错误?
答案 0 :(得分:3)
或者它是编译器错误吗?
此代码是正确的,因为标准明确允许运算符函数的签名 - 参见§13.5.8/ 3。 所以这是一个GCC-Bug。