给出一个简单的variadoc模板
template<typename... T>
class A {};
以及两个或多个概念C1
和C2
template<typename T>
concept bool C1() { ... };
如何在C1
参数包的所有元素上应用C2
和A
的连词,如:
template<typename... T>
requires C1<T>... || C2<T>... // nok
class A {};
上面没有编译。我正在寻找一种方法来指定这一点,而无需编写像C1orC2
这样的新概念。
答案 0 :(得分:3)
您可以为此嵌套折叠表达式:
template<typename... T>
requires ((C1<T> || C2<T>) || ...)
class A {};
此外,实际概念应采用以下形式:
template<typename T>
concept C1 = requires(T arg) {
// something
};