How do I deal with the max macro in windows.h colliding with max in std?

烂漫一生 提交于 2019-11-26 20:59:42

Define the macro NOMINMAX:

This will suppress the min and max definitions in Windef.h.

Just wrap the function name in parenthesis:

(std::numeric_limits<size_type>::max)()

No need for the NOMINMAX macro in this case, plus you won't get compiler warnings

Are you just trying to flush the cin buffer? I always just used:

cin.ignore(cin.rdbuf()->in_avail());

If you don't know whether somebody else might have included windows.h without NOMINMAX, you might define a dummy macro which can be used to suppress function-like macro invocations without changing the definition:

#define DUMMY
...
std::numeric_limits<std::streamsize>::max DUMMY ()

Not really pretty either, but works and is non-intrusive.

When working with the Windows header file, I prefer to hide it as much as I can by including it only in specialized code and header files (using pimpl if necessary), because it throws just too much garbage into the global namespace.

AntonK

If you happen to use GDI+, the approach with NOMINMAX won't work for you, because headers of GDI+ require min or max in global namespace.

And the simplest workaround in this case is to undefine min/max when they are no longer needed.

The code sample to illustrate the approach:

//#define NOMINMAX - this won't work
#include <Windows.h>
#include <gdiplus.h>
#undef max
#undef min
...
#include <cxxopts.hpp>
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!