C++20 requires表达式详解
请详细介绍C++20中requires表达式的四种形式:简单、类型、复合和嵌套,并各举一例。
回答
屠龙少年
四种requires表达式:
- 简单要求:判断表达式是否合法
requires(T a) { a++; }
- 类型要求:判断类型是否存在
requires { typename T::value_type; }
- 复合要求:判断表达式类型和noexcept
requires(T a, T b) {
{ a + b } -> std::same_as<T>;
{ a.sort() } noexcept;
}
- 嵌套要求:多个条件的组合
requires(T a) {
requires std::integral<T>;
requires sizeof(T) >= 4;
}
复合要求最常用,语法:{ expression } noexcept? -> type_constraint;