aboutsummaryrefslogtreecommitdiffhomepage
path: root/test/main.h
diff options
context:
space:
mode:
authorGravatar Gael Guennebaud <g.gael@free.fr>2014-09-01 18:21:01 +0200
committerGravatar Gael Guennebaud <g.gael@free.fr>2014-09-01 18:21:01 +0200
commitb3a0365429345d37196a39a501ed071038031223 (patch)
tree17b01f0f705a65ba30af3467257abd619dd452a3 /test/main.h
parent72c4f8ca8fc64a812801295babfb6d56ca96f427 (diff)
parenteb392960285c2645d45118d424786a73768ff50a (diff)
merge with default branch
Diffstat (limited to 'test/main.h')
-rw-r--r--test/main.h25
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