1

给定一个简单的可变参数模板

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

和两个或多个概念C1C2

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

如何在参数包的所有元素上应用C1和的连接,例如:C2A

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

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

4

1 回答 1

3

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

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

此外,实际概念应采用以下形式:

template<typename T>
concept C1 = requires(T arg) {
    // something
};
于 2017-06-17T05:44:40.787 回答