Не удается вызвать std:: max, потому что minwindef.h определяет "max"

Как бы я пошел на вызов std:: max? Код не будет компилироваться в visual studio 2013, потому что он принимает "макс" в качестве макроса.

std::max( ... );

Ожидает идентификатор после "std::".

Ответ 1

Вы можете отменить определение макроса:

#undef max

Изменить: кажется, что макросы можно безопасно отключить, установив

#define NOMINMAX

перед заголовочными файлами, которые их определяют (скорее всего, windef.h, который вы, вероятно, включаете косвенно).

Чтобы избежать отмены определения макроса, вы можете просто заключить функцию в скобки

(std::max)(...)

Как отметил Крис в комментариях, функционально-подобные макросы требуют, чтобы токен после имени макроса был левой скобкой для расширения. Заключение имени в круглые скобки - это всего лишь взлом, чтобы сделать следующий токен правильной круглой скобкой, не меняя значения, если вы отложите макросы в сторону.