Introduction
In the previous chapter, we learned how to develop our own types (classes) with the help of unit tests and made them behave like built-in types. We were introduced to function overloading, Rule of Three/Five, and Rule of Zero.
In this chapter, we will learn how to extend the type system even further. We'll learn how to create functions and classes using templates and revisit function overloading since it's impacted by the use of templates. We'll be introduced to a new technology, SFINAE, and use it to control the parts of our templates that are included in the generated code.