首先定义基础模板类,表示不包含给定类型
template <typename T, typename... Args>
struct contains : public std::false_type {};
接着进行偏特化,将可变模板参数中的类型逐个和目标类型进行比较,直到类型相同或者模板参数列表为空
template <typename T, typename U, typename... Args>
struct contains<T, U, Args...> :
public std::conditional_t<std::is_same_v<T, U>,