template <typename T>
concept Example = requires(T a, T b) {
// ① 简单要求:这个表达式必须能编译
a + b; // T 必须支持 operator+(T, T)
a.begin(); // T 必须有 begin() 成员
// ② 类型要求:这个类型必须存在
typename T::value_type; // T 必须有 value_type 成员类型
typename T::iterator; // T 必须有 iterator 成员类型
// ③ 复合要求:表达式必须有特定返回类型
{ a * b } -> std::convertible_to<int>;
// a * b 必须能编译,且结果能隐式转 int
// ④ 嵌套要求:里面的约束必须满足
requires std::is_destructible_v<T>;
// T 必须是可析构的
};
理解方式:把 requires(...) 读作**“检查这些代码能否编译通过”**。如果里面所有代码都能编译,Concept 为 true,否则为 false。