Class template argument deduction
Before C++17, template argument deduction only worked for functions but not classes. This meant that when a class template had to be instantiated, all the template arguments had to be supplied. The following snippet shows several examples:
template <typename T> struct wrapper { T data; }; std::pair<int, double> p{ 42, 42.0 }; std::vector<int> v{ 1,2,3,4,5 }; wrapper<int> w{ 42 };
By leveraging template argument deduction for function templates, some standard types feature helper functions that create an instance of the type without the need to explicitly specify template arguments. Such examples are std::make_pair
for std::pair
and std::make_unique
for std::unique_ptr
. These helper function templates, used in corroboration with the auto
keyword, avoid the need for specifying template arguments for...