Learning more ways to specify constraints
We have discussed in this chapter about requires clauses and requires expressions. Although both are introduced with the new requires
keyword, they are different things and should be fully understood:
- A requires clause determines whether a function participates in overload resolution or not. This happens based on the value of a compile-time Boolean expression.
- A requires expression determines whether a set of one or more expressions is well-formed, without having any side effects on the behavior of the program. A requires expression is a Boolean expression that can be used with a requires clause.
Let’s see an example again:
template <typename T> concept addable = requires(T a, T b) { a + b; }; // [1] requires expression template <typename T> requires addable<T>...