Opened 8 years ago

Last modified 8 years ago

#10471 new Bugs

Boost.Geometry fails to compile when OS X AssertMacros.h are included

Reported by: Robert Xiao <nneonneo@…> Owned by: Barend Gehrels
Milestone: To Be Determined Component: geometry
Version: Boost 1.55.0 Severity: Problem
Keywords: Cc:

Description

The infamous AssertMacros.h header (see #2115) defines a macro called "check", which causes a compilation failure in <boost/geometry/geometries/concepts/check.hpp>. The header is automatically included by certain Apple frameworks, so it's a bit unavoidable.

Per the resolution to #2115, instances of the word "check" should be replaced by something else to avoid this issue. (Damn you, Apple...)

Testcase program:

#include <AssertMacros.h>
#include <boost/geometry.hpp>

Compile with "c++ test.cpp". Compile errors:

In file included from test.cpp:2:
In file included from /opt/local/include/boost/geometry.hpp:17:
In file included from /opt/local/include/boost/geometry/geometry.hpp:43:
In file included from /opt/local/include/boost/geometry/strategies/strategies.hpp:31:
In file included from /opt/local/include/boost/geometry/strategies/intersection.hpp:15:
In file included from /opt/local/include/boost/geometry/policies/relate/intersection_points.hpp:19:
In file included from /opt/local/include/boost/geometry/algorithms/detail/assign_indexed_point.hpp:20:
/opt/local/include/boost/geometry/geometries/concepts/check.hpp:217:1: error: 
      expected unqualified-id
{
^
In file included from test.cpp:2:
In file included from /opt/local/include/boost/geometry.hpp:17:
In file included from /opt/local/include/boost/geometry/geometry.hpp:43:
In file included from /opt/local/include/boost/geometry/strategies/strategies.hpp:31:
In file included from /opt/local/include/boost/geometry/strategies/intersection.hpp:15:
In file included from /opt/local/include/boost/geometry/policies/relate/intersection_points.hpp:19:
In file included from /opt/local/include/boost/geometry/algorithms/detail/assign_indexed_point.hpp:21:
In file included from /opt/local/include/boost/geometry/algorithms/detail/assign_values.hpp:29:
/opt/local/include/boost/geometry/algorithms/append.hpp:217:9: error: no
      template named 'check' in namespace 'boost::geometry::concept'; did you
      mean 'dispatch::check'?
        concept::check<Geometry>();
        ^~~~~~~~~~~~~~
        dispatch::check
/opt/local/include/boost/geometry/geometries/concepts/check.hpp:68:8: note: 
      'dispatch::check' declared here
struct check : not_implemented<GeometryTag>
       ^

... more errors about missing concept::check ...

Change History (1)

comment:1 by rsf@…, 8 years ago

In the cited Apple header file AssertMacros.h there is a note that defining the macro __ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERSCORES as 0 will suppress the definition of the conflicting macro names, in favor of more portable names (e.g. __Check). (It is further noted that this will be the default in a future version of AssertMacros.h; until then the recommendation is for the user to add this definition to their compiler options.)

Perhaps documenting this workaround will be adequate.

Note: See TracTickets for help on using tickets.