c++ - 类模板中文字运算符的Friend声明

标签 c++ c++11 gcc g++

我正在尝试创建一个只能通过文字运算符构造的类,但是无法在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

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61648

关于c++ - 类模板中文字运算符的Friend声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59291389/

相关文章:

c++ - llvm-g++-4.2 和 C++ 新型类型转换

c - 以编程方式检索 C 结构成员的内存偏移量,无需硬编码成员名称

c++ - 如何在 WebView(QtQuick 2.0 和 QtWebKit 3)中使用 statusChanged?

c++ - C++ 的文件系统迭代器

c++ - 如何将 std::chrono::time_point 转换为 long 并返回?

c - Linux - 如何在 C 中更改 fork 进程的信息

c++ - 有没有办法在运行时用 C 或 C++ 编译附加代码?

multithreading - 在Windows Store App中生成线程会在UI线程中的任何定时等待调用中导致死锁

c++ - 具有右值删除器的 unique_ptr 构造函数返回 null?

c++ - C++ 中的性能比较(普通函数调用与 for_each+mem_fun 与 lambda 表达式)