Я пытаюсь создать класс, который может быть создан только с помощью литерального оператора, но он не может быть основан на 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
Это ошибка компилятора или нетЯ ошибаюсь?