Почему данный код не работает?
#include
int main()
{
min(1, 2);
std::numeric_limits
А данный работает?
#include
int main()
{
min(1, 2);
(std::numeric_limits
Интересует больше второй пример. Что с точки зрения языка это означает?
Ответ
Проблема заключается в том, что некоторые специалисты придумали поместить в Windows.h два define для min и max. Но перед компиляцией всегда работает препроцессор. Он видит max (о namespace он ничего не знает) и пытается найти два аргумента у него. А их там нет... И ругается. Когда появляются скобки, парсер препроцессора не видит скобок () не пытается сделать подстановку. Код стает "ожидаемый".
Второй вариант исправить проблему - добавить в список define такой - NOMINMAX
Для любознательных. Внутри Windows.h есть такое
#ifndef NOMINMAX
#ifndef max
#define max(a,b) (((a) > (b)) ? (a) : (b))
#endif
#ifndef min
#define min(a,b) (((a) < (b)) ? (a) : (b))
#endif
#endif /* NOMINMAX */
в Майкрософте проблему знают, но трогать не будут:).
Комментариев нет:
Отправить комментарий