Сбой вывода типа для auto stdMaxInt = std :: max & lt; int & gt ;;

Использование 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?

6

Решение

Это потому что std::max перегруженная функция, поэтому она не знает, на какую перегрузку вы хотите создать указатель. Ты можешь использовать static_cast выбрать желаемую перегрузку.

auto stdMaxInt = static_cast<const int&(*)(const int&, const int&)>(std::max<int>);
5

Другие решения

static_cast ответ от @JamesRoot работает, но на мой вкус я бы предпочел лямбду:

auto stdMaxInt = [](int const& L, int const& R) -> int const& { return std::max(L, R); };

Это может иметь преимущество лучшей встроенной способности при передаче в алгоритмы (не проверено).

2

По вопросам рекламы [email protected]