This bugzilla service is closed. All entries have been migrated to https://gitlab.com/libeigen/eigen
Bug 337 - Eigen 3.0.2 geometry-module fails to compile with EIGEN2_SUPPORT enabled
Summary: Eigen 3.0.2 geometry-module fails to compile with EIGEN2_SUPPORT enabled
Status: RESOLVED FIXED
Alias: None
Product: Eigen
Classification: Unclassified
Component: Geometry (show other bugs)
Version: 3.0
Hardware: All Linux
: --- Unknown
Assignee: Nobody
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2011-08-28 21:13 UTC by gladk
Modified: 2019-12-04 11:04 UTC (History)
5 users (show)



Attachments

Description gladk 2011-08-28 21:13:04 UTC
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
Comment 1 Benoit Jacob 2011-08-28 21:20:48 UTC
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
Comment 2 Benoit Jacob 2011-08-28 21:24:31 UTC
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.
Comment 3 Gael Guennebaud 2011-08-28 22:23:01 UTC
Fixed in ef57c8f83ca3.
Comment 4 gladk 2011-08-28 22:29:40 UTC
(In reply to comment #3)
> Fixed in ef57c8f83ca3.

Thanks a lot for fixing that so quickly!
Comment 5 Benoit Jacob 2011-08-28 22:51:58 UTC
(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?
Comment 6 Gael Guennebaud 2011-08-28 23:25:18 UTC
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.
Comment 7 Benoit Jacob 2011-08-29 15:42:02 UTC
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...
Comment 8 Nobody 2019-12-04 11:04:56 UTC
-- 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.

Note You need to log in before you can comment on or make changes to this bug.