requires约束表达式的形式如:
requires(参数列表) //注:参数列表是可选的
{
约束条款1;
约束条款2;
...
}
约束表达式的工作机制是,对约束条款进行逐一检查其可行性(不检查值),如果都满足,则约束表达式返回true,否则返回false。
有以下几种形式:
1.简单约束
template<typename T>
concept HAS_P = requires(T x)
{
x.p(); //类x有个成员函数p
};
2.类型约束
#include <iostream>
#include <concepts>
using namespace std;
template<typename T>
concept HAS_TYPE = requires(T t)
{
typename T::type; //通过typename对T所需满足的类型进行约束
};
template<HAS_TYPE T>
void test(T t)
{
cout<<