Когда член шаблона класса, который использует предложение requires
, определен вне класса, gcc
не жалуется, если requires
не указан, тогда как clang
делает.
Рассмотрим фрагмент кода ниже:
#include <concepts>
template<typename Container>
requires std::integral<typename Container::value_type>
class Foo {
public:
void func();
};
template<typename Container>
void Foo<Container>::func()
{}
Компиляция с использованием gcc
не жалуется.
В то время как clang
сообщает о следующей ошибке:
❯ clang++ -std=c++2a test.cpp
test.cpp:10:1: error: requires clause differs in template redeclaration
template<typename Container>
^
test.cpp:4:19: note: previous template declaration is here
requires std::integral<typename Container::value_type>
^
1 error generated.
Если я изменю определение, как показано ниже:
template<typename Container>
requires std::integral<typename Container::value_type>
void Foo<Container>::func()
{}
теперь clang
не жалуется.
Вывод из gcc --version
:
gcc (GCC) 10.2.0
Вывод из clang --version
:
clang version 10.0.1
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
Следует ли сообщать об этой ошибке?