Если T
может быть только примитивного типа (int
, float
и т. Д.), Я не думаю, что есть какая-либо разница; во всех случаях компилятор выполнит соответствующее преобразование (и, вероятно, выполнит подстановку во время компиляции).
Если T
является пользовательским типом, то, очевидно, он не будет компилироваться, если в нем не определены соответствующие конструкторы. В этот момент это может иметь значение (например, если вы определили T::T(int)
и T::T(double)
).