...

/

Defining Concepts

Defining Concepts

Explore the concepts introduced in C++20, such as copyable, arithmetic, and more.

Implementing concepts in C++20

The constraints seen previously are nameless predicates defined in the places they are used. Many constraints are generic and can be used in multiple places. Let’s consider the following example of a function similar to the add function. This function performs the multiplication of arithmetic values and is shown next:

template<typename T>
requires std::is_arithmetic_v<T>
T mul(T const a, T const b)
{
return a * b;
}
Function template for arithmetic multiplication

The same requires clause seen with the add function is present here. To avoid this repetitive code, we can define a name constraint that can be reused in multiple places. A named constraint is called a concept. A concept is defined with the new concept keyword and template syntax. Here’s an example:

template<typename T>
concept arithmetic = std::is_arithmetic_v<T>;
Defining an arithmetic concept

Even though they’re ...