Тип удержания не выполняется в следующем случае. Он компилируется, если я указываю аргумент шаблона для someFunc. Я определенно вижу, как это странно, но было бы неплохо, если бы я мог заставить его работать. Есть ли альтернативный способ сформулировать его, который будет компилироваться без предоставления параметра шаблона? Решение C ++ 17 отлично.
#include <type_traits>
template<typename T>
using choose_arg_type = typename std::conditional<std::is_fundamental<T>::value,T,const T &>::type;
template<typename T>
T someFunc(choose_arg_type<T> arg)
{
return arg + arg;
}
int main()
{
auto result = someFunc(0.0);
return 0;
}