不清楚为什么下面的代码不编译,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; }这个代码有什么问题?或者是编译器的错误?
发布于 2014-06-28 15:56:19
或者是编译器的错误?
这个代码是正确的,因为标准明确地允许操作符函数的签名--参见§13.5.8/3。所以它是GCC-Bug。
https://stackoverflow.com/questions/24465229
复制相似问题