Возвращаемый тип шаблонных функций [1]
Шаблонные функции имеют два различных набора параметров: 1) Шаблонные параметры( Template parameters ), которые объявляются в угловых скобках перед именем шаблонной функции: template<typename T> // T шаблонный параметр. 2) Параметры вызова (Call parameters), которые объявляются в круглых скобках после имени шаблонной функции: T max ( T a , T b ); // a и b – параметры вызова. Вы можете иметь любое количество шаблонных параметров. Например, вы можете определить шаблон max() для вызова двух потенциально различных типов: template<typename T1, typename T2> T1 max (T1 a, T2 b) { return b < a ? a : b; } auto m = :: max (4, 7.2); // OK , но тип первого аргумента определяет возвращаемый тип Может быть желательным иметь возможность передавать различные типы в шаблонную функцию max(), но как показывает это пример – здесь возникает проблема. Если вы используете о...