有没有办法做一个可以代表模板参数包的概念?

Is there a way to make a concept that can represent a template parameter pack?

使用C++20,我们可以编写一个概念并像这样使用它:

template<typename T>
concept ClassType = std::is_class_v<T>;

template<ClassType T>
void foo();

有没有办法在使用模板参数包时实现同样的语法?我们显然可以用 requires:

template<typename T, typename... Ts>
concept SameTypes = std::conjunction_v<std::is_same<T, Ts>...>;

template<typename... Ts>
requires SameTypes<Ts...>
void foo();

但我的问题是,是否有办法像第一个示例那样,在模板括号内使用概念代替 typename 的语法来做到这一点。有吗?

是的,您可以这样做,这与您的示例功能等效:

#include <concepts>
template<class T, std::same_as<T>... Ts>
void foo();