aboutsummaryrefslogtreecommitdiffhomepage
path: root/test/main.h
diff options
context:
space:
mode:
authorGravatar Gael Guennebaud <g.gael@free.fr>2014-08-29 14:34:00 +0200
committerGravatar Gael Guennebaud <g.gael@free.fr>2014-08-29 14:34:00 +0200
commit01f3ca3e8d58394f1d42155d5499b7566050c8e7 (patch)
tree40101e3a793caa31dfb29701d106ab744d85fefd /test/main.h
parentaec3d90ca65528fdface6013ccbcc33b04ada867 (diff)
parente49e84d97940a4201e2b50a2ffe01e66f19ad783 (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.h25
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