В комментариях к посту про проблему конфликта имен STL’евских std::min
и std::max
с одноименными макросами из файла windows.h
мне подсказали интересное решение.
Если вместо, например, std::max(a, b)
написать (std::max)(a, b)
, то результат работы препроцессора выглядит так:
#line 3 "minmax.cpp" int main() { int a = (std::min)(10, 20); return 0; }
вместо:
#line 3 "minmax.cpp" int main() { int a = std::(((10) < (20)) ? (10) : (20)); return 0; }
и конфликта не происходит. Все компилируется без проблем.
Не берусь судить, на сколько это красивое решение, и я бы все-таки предпочел действовать напрямую через макрос NOMINMAX, но выход элегантный.
Другие посты по теме: