diff options
author | Gael Guennebaud <g.gael@free.fr> | 2014-09-01 18:21:01 +0200 |
---|---|---|
committer | Gael Guennebaud <g.gael@free.fr> | 2014-09-01 18:21:01 +0200 |
commit | b3a0365429345d37196a39a501ed071038031223 (patch) | |
tree | 17b01f0f705a65ba30af3467257abd619dd452a3 /test/main.h | |
parent | 72c4f8ca8fc64a812801295babfb6d56ca96f427 (diff) | |
parent | eb392960285c2645d45118d424786a73768ff50a (diff) |
merge with default branch
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 b8854a1c3..85f951db4 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 |