Применить совокупность ограничений к пакету параметров

Учитывая простой шаблон 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,

1

Решение

Вы можете вложить выражения сложения для этого:

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

Кроме того, фактическая концепция должна иметь форму:

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

Другие решения

Других решений пока нет …