This chapter explored the concept of type traits, which are small classes that define meta-information about types or transformation operations for types. We started by looking at how type traits can be implemented and how they help us. Next, we learned about SFINAE, which stands for Substitution Failure Is Not An Error. This is a technique that enables us to provide constraints for template parameters.
We then saw how this purpose can be achieved better with
constexpr if, in C++17. In the second part of the chapter, we looked at the type traits available in the standard library and demonstrated how to use some of them. We ended the chapter with a couple of real-world examples where we used multiple type traits to solve a particular problem.
In the next chapter, we continue the topic of constraining the template parameters by learning about the C++20 concepts and constraints.