文档目录
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。