我正在尝试创建一个只能通过文字运算符构造的类,但是无法在gcc上构建。
这是一个简化的示例:
#include <cstddef>
template<typename C>
class Foo;
Foo<char> operator "" _foo(const char*, std::size_t);
template<typename C>
class Foo
{
Foo() = default;
friend Foo<char> operator "" _foo(const char*, std::size_t);
};
Foo<char> operator "" _foo(const char* str, std::size_t size)
{
return Foo<char>();
}
int main()
{
auto foo = "Foo"_foo;
return 0;
}
失败并显示以下消息:https://godbolt.org/z/kfcNMR
<source>:11:22: error: 'Foo<char> operator""_foo(const char*, std::size_t)' has invalid argument list
它适用于clang和msvc,如果没有模板,则适用于gcc:https://godbolt.org/z/exfm5Q
这是编译器错误还是我犯错了?
最佳答案
这是一个错误,它是5年前报告的。
Bug 61648 - g++ accepts literal operator friends for non-template classes but not for template classes
关于c++ - 类模板中文字运算符的Friend声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59291389/