The following code: ============= #include <iostream> #define EIGEN2_SUPPORT #include <Eigen/Core> #include <Eigen/Geometry> ============= does not compile: ============= In file included from /usr/include/eigen3/Eigen/src/Eigen2Support/Geometry/All.h:71:0, from /usr/include/eigen3/Eigen/Geometry:58, from a.cpp:6: /usr/include/eigen3/Eigen/src/Eigen2Support/Geometry/AlignedBox.h: In constructor ‘Eigen::eigen2_AlignedBox<_Scalar, _AmbientDim>::eigen2_AlignedBox(int)’: /usr/include/eigen3/Eigen/src/Eigen2Support/Geometry/AlignedBox.h:54:42: error: class ‘Eigen::eigen2_AlignedBox<_Scalar, _AmbientDim>’ does not have any field named ‘m_’ /usr/include/eigen3/Eigen/src/Eigen2Support/Geometry/AlignedBox.h:54:49: error: expected ‘{’ before ‘(’ token /usr/include/eigen3/Eigen/src/Eigen2Support/Geometry/AlignedBox.h: In constructor ‘Eigen::eigen2_AlignedBox<_Scalar, _AmbientDim>::eigen2_AlignedBox(const Eigen::eigen2_AlignedBox<_Scalar, _AmbientDim>::VectorType&, const Eigen::eigen2_AlignedBox<_Scalar, _AmbientDim>::VectorType&)’: /usr/include/eigen3/Eigen/src/Eigen2Support/Geometry/AlignedBox.h:58:71: error: class ‘Eigen::eigen2_AlignedBox<_Scalar, _AmbientDim>’ does not have any field named ‘m_’ /usr/include/eigen3/Eigen/src/Eigen2Support/Geometry/AlignedBox.h:58:78: error: expected ‘{’ before ‘(’ token /usr/include/eigen3/Eigen/src/Eigen2Support/Geometry/AlignedBox.h: In constructor ‘Eigen::eigen2_AlignedBox<_Scalar, _AmbientDim>::eigen2_AlignedBox(const Eigen::eigen2_AlignedBox<_Scalar, _AmbientDim>::VectorType&)’: /usr/include/eigen3/Eigen/src/Eigen2Support/Geometry/AlignedBox.h:61:53: error: class ‘Eigen::eigen2_AlignedBox<_Scalar, _AmbientDim>’ does not have any field named ‘m_’ /usr/include/eigen3/Eigen/src/Eigen2Support/Geometry/AlignedBox.h:61:60: error: expected ‘{’ before ‘(’ token /usr/include/eigen3/Eigen/src/Eigen2Support/Geometry/AlignedBox.h: In member function ‘void Eigen::eigen2_AlignedBox<_Scalar, _AmbientDim>::setNull()’: /usr/include/eigen3/Eigen/src/Eigen2Support/Geometry/AlignedBox.h:74:53: error: expected unqualified-id before ‘(’ token /usr/include/eigen3/Eigen/src/Eigen2Support/Geometry/AlignedBox.h:75:53: error: expected unqualified-id before ‘(’ token /usr/include/eigen3/Eigen/src/Eigen2Support/Geometry/AlignedBox.h: In member function ‘bool Eigen::eigen2_AlignedBox<_Scalar, _AmbientDim>::contains(const Eigen::eigen2_AlignedBox<_Scalar, _AmbientDim>&) const’: /usr/include/eigen3/Eigen/src/Eigen2Support/Geometry/AlignedBox.h:93:30: error: expected unqualified-id before ‘(’ token /usr/include/eigen3/Eigen/src/Eigen2Support/Geometry/AlignedBox.h:93:51: error: expected unqualified-id before ‘(’ token /usr/include/eigen3/Eigen/src/Eigen2Support/Geometry/AlignedBox.h: In member function ‘Eigen::eigen2_AlignedBox<_Scalar, _AmbientDim>& Eigen::eigen2_AlignedBox<_Scalar, _AmbientDim>::extend(const Eigen::eigen2_AlignedBox<_Scalar, _AmbientDim>::VectorType&)’: /usr/include/eigen3/Eigen/src/Eigen2Support/Geometry/AlignedBox.h:97:27: error: expected unqualified-id before ‘(’ token /usr/include/eigen3/Eigen/src/Eigen2Support/Geometry/AlignedBox.h:97:59: error: expected unqualified-id before ‘(’ token /usr/include/eigen3/Eigen/src/Eigen2Support/Geometry/AlignedBox.h: In member function ‘Eigen::eigen2_AlignedBox<_Scalar, _AmbientDim>& Eigen::eigen2_AlignedBox<_Scalar, _AmbientDim>::extend(const Eigen::eigen2_AlignedBox<_Scalar, _AmbientDim>&)’: /usr/include/eigen3/Eigen/src/Eigen2Support/Geometry/AlignedBox.h:101:27: error: expected unqualified-id before ‘(’ token /usr/include/eigen3/Eigen/src/Eigen2Support/Geometry/AlignedBox.h:101:65: error: expected unqualified-id before ‘(’ token /usr/include/eigen3/Eigen/src/Eigen2Support/Geometry/AlignedBox.h: In member function ‘Eigen::eigen2_AlignedBox<_Scalar, _AmbientDim>& Eigen::eigen2_AlignedBox<_Scalar, _AmbientDim>::clamp(const Eigen::eigen2_AlignedBox<_Scalar, _AmbientDim>&)’: /usr/include/eigen3/Eigen/src/Eigen2Support/Geometry/AlignedBox.h:105:27: error: expected unqualified-id before ‘(’ token /usr/include/eigen3/Eigen/src/Eigen2Support/Geometry/AlignedBox.h:105:65: error: expected unqualified-id before ‘(’ token /usr/include/eigen3/Eigen/src/Eigen2Support/Geometry/AlignedBox.h: In constructor ‘Eigen::eigen2_AlignedBox<_Scalar, _AmbientDim>::eigen2_AlignedBox(const Eigen::eigen2_AlignedBox<NewScalarType, AmbientDimAtCompileTime>&)’: /usr/include/eigen3/Eigen/src/Eigen2Support/Geometry/AlignedBox.h:141:19: error: expected unqualified-id before ‘(’ token /usr/include/eigen3/Eigen/src/Eigen2Support/Geometry/AlignedBox.h:142:19: error: expected unqualified-id before ‘(’ token ============= Thanks
Confirmed here. According to hg bisect: The first bad revision is: changeset: 4174:c0d402eeccb5 branch: 3.0 user: Gael Guennebaud <g.gael@free.fr> date: Thu Jul 21 11:19:36 2011 +0200 summary: protect calls to min and max with parentheses to make Eigen compatible with default windows.h
Oh, this changeset adds parentheses around all occurences of min and max to work around a problem with windows.h? I know that I can't complain as I haven't been around lately, but personally I don't agree with that change. It seems too intrusive to be worth it. I would suggest to back it out.
Fixed in ef57c8f83ca3.
(In reply to comment #3) > Fixed in ef57c8f83ca3. Thanks a lot for fixing that so quickly!
(In reply to comment #3) > Fixed in ef57c8f83ca3. But we're keeping the (max) change? We will forever have to write (max) instead of max just because of the windows.h macro?
I know that's not ideal but some headers compile only in the presence of these macros. This is also the approach taken by boost, and many other C++ libraries. More importantly, this feature was pretty important for at least one "large" user that is important to me.
OK. Maybe that's an argument why renaming our functions like ei_cos to internal::cos was bad: we could have had ei_min and ei_max...
-- GitLab Migration Automatic Message -- This bug has been migrated to gitlab.com's GitLab instance and has been closed from further activity. You can subscribe and participate further through the new bug through this link to our GitLab instance: https://gitlab.com/libeigen/eigen/issues/337.