Использование GCC 4.8.4 с g++ --std=c++11 main.cpp
выводит следующее ошибка
error: unable to deduce ‘auto’ from ‘max<int>’
auto stdMaxInt = std::max<int>;
для этого кода
#include <algorithm>
template<class T>
const T& myMax(const T& a, const T& b)
{
return (a < b) ? b : a;
}
int main()
{
auto myMaxInt = myMax<int>;
myMaxInt(1, 2);
auto stdMaxInt = std::max<int>;
stdMaxInt(1, 2);
}
Почему это работает с myMax
но не с std::max
? И можем ли мы заставить его работать с std::max
?
Это потому что std::max
перегруженная функция, поэтому она не знает, на какую перегрузку вы хотите создать указатель. Ты можешь использовать static_cast
выбрать желаемую перегрузку.
auto stdMaxInt = static_cast<const int&(*)(const int&, const int&)>(std::max<int>);
static_cast
ответ от @JamesRoot работает, но на мой вкус я бы предпочел лямбду:
auto stdMaxInt = [](int const& L, int const& R) -> int const& { return std::max(L, R); };
Это может иметь преимущество лучшей встроенной способности при передаче в алгоритмы (не проверено).