Я хочу вызвать две версии одной и той же функции в функции. Например:
template<class F>
auto ulp_error(F f, float x)
{
float f1 = f(x);
double x2 = x;
float f2 = static_cast<float>(f(x2));
return boost::math::float_distance(f1, f2);
}
Теперь я бы хотел вызвать эту функцию через:
ulp_error(std::log, 1.2f);
но я получаю следующую ошибку на clang-1000.11.45.5:
fatal error: no matching function for call to 'ulp_error'
ulp_error(std::log, 1.2f);
note: candidate template ignored: couldn't infer template argument 'F'
Хорошо, а как насчет этого?
ulp_error<decltype(std::log)>(std::log, 1.2f);
, которая выдает следующую ошибку:
fatal error: reference to overloaded function could not be resolved; did you mean to call it?
ulp_error<decltype(std::log)>(std::log, 1.2f);
Как я могу передать (скажем) std::log
в качестве аргумента функции и вызвать ее двумя разными типами?