5 ms·
This may be off topic, but why are min and max macros by default ? It is the problem we face most often when we compile our library on windows.
by pavanky 11y ago
This may be off topic, but why are min and max macros by default ? It is the problem we face most often when we compile our library on windows.
- mmozeiko 11y agoCompatibility for old code? Just "#define NOMINMAX" before including windows.h
- StephanTLavavej 11y agoIn fact, VS's STL has to defend itself against those macros. Since the user might have already included windows.h without NOMINMAX, what we do is parenthesize all mentions of min/max, which inhibits preprocessor expansion of function-like macros. Look at our declarations of std::min()/etc.
- TillE 11y ago> what we do is parenthesize all mentions of min/max Oh! That explains some of the odd-looking code in <random>, since min and max are used as function names to determine the range of an RNG engine.
- StephanTLavavej 11y agoBingo. We have a test that includes windows.h followed by all STL headers, to verify that we always remember the parens.
- Someone 11y agoMy guess: for backwards compatibility. I bet you also still get that oh so useful "Windows made this file for you" text file if you use a traditional Windows solution template. For those unfamiliar with this issue: if you include Windef.h (directly or indirectly) you get what the platform provides. That file by default defines min and max macros. To prevent that, define NOMINMAX before including the windows header (in the source, or as a command line argument to the compiler). (https://support.microsoft.com/en-us/kb/143208 https://support.microsoft.com/en-us/kb/143208)