преимущество использования функции шаблона против и как вывести тип в шаблоне


Я прочитал довольно много постов на вывести тип переменной, как с использованием авто и без. Я думаю, я вниз на два вопроса.

Рассмотрим простую функцию, спектр в качестве примера. Я могу сделать его шаблон и назвать его:

template <class T, T min, T max> bool inRange(T value) {   return min <= value && value <= max;}bool bbb = inRange<int, 5, 10>(7);

или я могу сделать:

template <class T> bool inRange(T min, T max, T value) {    return min <= value && value <= max;}bool bbb = inRange(5, 10, 7);
Questions

:

  • Is there a way (short of creating multiple templates 1 each for short, int, long, double, etc) that the type can be deduced such that the template can be called with inRange<min, max>(value)

  • Is there any advantage of inRange<min, max>(value) as to inRange(min, max, value)