Concepts: The Next Major Change Coming to C++
The upcoming C++ standard is set to promise many different features and changes that will simplify and expand the way we write and think of code. Upon the wide variety of additions to the language, the inclusion of Concepts tops the list as the most significant one, as they are essential to simplify the use of generic programming. The currently ongoing CppCon has sparked my interest on the topic thanks to the talk given by Bjarne Stroustrup on the future of generic programming. Which covered the importance of concepts in the future of the language as described by the Concepts TS.
What is a Concept?
A Concept is a set of requirements that yield a boolean value at compile-time. They describe the characteristics needed for a certain group of objects to be used inside a template e.g.
Number: - Must provide arithmetic operators(+, +=, -, -=, *, *=, /, /=)
- Must be constructible from 0
- Must be copyable
- Must be movable
Why do we need Concepts?
- Simplify the way we write generic code by removing the verbosity and repetitiveness that templates bring e.g.
- Provide more precise and helpful error messages which in the past have been known to daunting and irrelevant e.g.
- Allow the use of overloads for functions using concepts e. g.
- Remove the ugliness and complexity coming from the use of enable_if by replacing it with the use of the keyword requires e.g.
How do we use Concepts?
The first step is to either define a new concept or use an already existing one. Here is an example using the previously mentioned concept of a number:
Then we simply use the already defined concept in a function:
Conclusion
Concepts fill in a void that was missing in the language; they effectively improve and simplify the use of generic code. It’s important to understand and appreciate their benefits to start adhering them into our code base as soon as C++20 arrives.