将约束的结合应用到参数包

Apply a conjunction of constraints to a parameter pack

给定一个简单的 variadoc 模板

template<typename... T>
class A {};

以及两个或更多概念 C1C2,例如

template<typename T>
concept bool C1() { ... };

如何在 A 参数包的所有元素上应用 C1C2 的连词,例如:

template<typename... T>
requires C1<T>... || C2<T>...     // nok
class A {};

以上无法编译。我正在寻找一种方法来指定它,而无需编写像 C1orC2.

这样的新概念

您可以为此嵌套折叠表达式:

template<typename... T>
requires ((C1<T> || C2<T>) || ...)
class A {};

另外,实际的概念应该是这样的形式:

template<typename T>
concept C1 = requires(T arg) {
    // something
};