Не удается вызвать std:: max, потому что minwindef.h определяет "max"
Как бы я пошел на вызов std:: max? Код не будет компилироваться в visual studio 2013, потому что он принимает "макс" в качестве макроса.
std::max( ... );
Ожидает идентификатор после "std::".
Ответ 1
Вы можете отменить определение макроса:
#undef max
Изменить: кажется, что макросы можно безопасно отключить, установив
#define NOMINMAX
перед заголовочными файлами, которые их определяют (скорее всего, windef.h, который вы, вероятно, включаете косвенно).
Чтобы избежать отмены определения макроса, вы можете просто заключить функцию в скобки
(std::max)(...)
Как отметил Крис в комментариях, функционально-подобные макросы требуют, чтобы токен после имени макроса был левой скобкой для расширения. Заключение имени в круглые скобки - это всего лишь взлом, чтобы сделать следующий токен правильной круглой скобкой, не меняя значения, если вы отложите макросы в сторону.