diff options
author | Gael Guennebaud <g.gael@free.fr> | 2014-08-29 14:34:00 +0200 |
---|---|---|
committer | Gael Guennebaud <g.gael@free.fr> | 2014-08-29 14:34:00 +0200 |
commit | 01f3ca3e8d58394f1d42155d5499b7566050c8e7 (patch) | |
tree | 40101e3a793caa31dfb29701d106ab744d85fefd /test/main.h | |
parent | aec3d90ca65528fdface6013ccbcc33b04ada867 (diff) | |
parent | e49e84d97940a4201e2b50a2ffe01e66f19ad783 (diff) |
Merged in georg_drenkhahn/eigen/georg_d/fix_warn_minmax (pull request PR-81)
Fix for warning on macro definitions of max() and min() in test.h
Diffstat (limited to 'test/main.h')
-rw-r--r-- | test/main.h | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/test/main.h b/test/main.h index 376232cf2..773873a0d 100644 --- a/test/main.h +++ b/test/main.h @@ -17,13 +17,36 @@ #include <sstream> #include <vector> #include <typeinfo> + +// The following includes of STL headers have to be done _before_ the +// definition of macros min() and max(). The reason is that many STL +// implementations will not work properly as the min and max symbols collide +// with the STL functions std:min() and std::max(). The STL headers may check +// for the macro definition of min/max and issue a warning or undefine the +// macros. +// +// Still, Windows defines min() and max() in windef.h as part of the regular +// Windows system interfaces and many other Windows APIs depend on these +// macros being available. To prevent the macro expansion of min/max and to +// make Eigen compatible with the Windows environment all function calls of +// std::min() and std::max() have to be written with parenthesis around the +// function name. +// +// All STL headers used by Eigen should be included here. Because main.h is +// included before any Eigen header and because the STL headers are guarded +// against multiple inclusions, no STL header will see our own min/max macro +// definitions. #include <limits> #include <algorithm> -#include <sstream> #include <complex> #include <deque> #include <queue> +#include <list> +// To test that all calls from Eigen code to std::min() and std::max() are +// protected by parenthesis against macro expansion, the min()/max() macros +// are defined here and any not-parenthesized min/max call will cause a +// compiler error. #define min(A,B) please_protect_your_min_with_parentheses #define max(A,B) please_protect_your_max_with_parentheses |