相关疑难解决方法(0)

类模板的 requires 子句是否必须在成员定义之外重复?

当使用该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: …

c++ templates language-lawyer c++-concepts c++20

5
推荐指数
1
解决办法
448
查看次数

标签 统计

c++ ×1

c++-concepts ×1

c++20 ×1

language-lawyer ×1

templates ×1