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...