Simplifying code with class template argument deduction
Templates are ubiquitous in C++, but having to specify template arguments all the time can be annoying. There are cases when the compiler can actually infer the template arguments from the context. This feature, available in C++17, is called class template argument deduction and enables the compiler to deduce the missing template arguments from the type of the initializer. In this recipe, we will learn how to take advantage of this feature.
How to do it...
In C++17, you can skip specifying template arguments and let the compiler deduce them in the following cases:
- When you declare a variable or a variable template and initialize it:
std::pair p{ 42, “demo” }; // deduces std::pair<int, char const*>
std::vector v{ 1, 2 }; // deduces std::vector<int>
std::less l; // deduces std::less<void>
- When you create an object using a new expression:
template <class T>
struct...