当使用该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()
{}
Run Code Online (Sandbox Code Playgroud)
编译使用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.
Run Code Online (Sandbox Code Playgroud)
如果我改变定义如下:
template<typename Container>
requires std::integral<typename Container::value_type>
void Foo<Container>::func()
{}
Run Code Online (Sandbox Code Playgroud)
现在clang不抱怨了。
输出gcc --version: …