template <typename T>
concept Integral = std::is_integral_v<T>; // Integral约定类型T必须是整形
// std::is_integral_v<T> 等价于 std::is_integral<T>::value 是一个bool值
template <typename T>
concept MyCon = requires(T a) {
{a+1} -> std::convertible_to<T>;
{a-1} -> std::convertible_to<T>;
}
template<typename T>
concept Incrementable = requires(T t) {
++t;
};
template<typename T>
concept HasSize = requires(T t) {
{ t.size() } -> std::same_as<std::size_t>;
};
// concept的使用方式一
template<HasSize T>
void printSize(const T& container){
std::cout << "Size of container: " << container.size() << std::endl;
}
// concept的使用方式二
template<typename T>
void printSize(const T& container) requires HasSize<T> {
std::cout << "Size of container: " << container.size() << std::endl;
}