Полезные новации С++17. Вывод аргументов шаблона для конструкторов шаблонных классов.
Вероятно, вы часто использовали в своих программах вызовы шаблонных функций, подобных std::make_pair или std::make_move_iterator , при этом удивляясь необходимости использования вспомогательной функции для создания нужного объекта. Проблема заключается в отсутствии вывода шаблонных аргументов для конструкторов шаблонных классов. Рассмотрим простой класс pair : template <typename T, typename U> struct pair { T t; U u; pair (const T& t, const U& u) : t{t}, u{u} {} }; Поскольку отсутствует вывод аргументов для имеющегося конструктора, нам необходимо явно специфицировать шаблонные аргументы при конструировании pair , например вот так: pair<int, float> a{1, 0.5f}; Было бы удобнее иметь возможность написать так: pair a{1, 0.5f}; но это невозможно. Общим решением является предоставление вспомогательной функции, которая выполняет выведение типов: template <typename T, typename U> pair<T,U> make_pair...