Skip to Content.
Sympa Menu

cgal-discuss - Re: [cgal-discuss] problem with BOOST_RESULT_OF_USE_DECLTYPE

Subject: CGAL users discussion list

List archive

Re: [cgal-discuss] problem with BOOST_RESULT_OF_USE_DECLTYPE


Chronological Thread 
  • From: Philipp Moeller <>
  • To: Cody Rose <>
  • Cc:
  • Subject: Re: [cgal-discuss] problem with BOOST_RESULT_OF_USE_DECLTYPE
  • Date: Wed, 30 Jan 2013 11:39:03 +0100
  • Organization: GeometryFactory

Cody Rose
<>
writes:

> Hello,
>
> With CGAL 4.1 I am unable to use the Nef_polyhedron_3 package with
> BOOST_RESULT_OF_USE_DECLTYPE defined. I am using:

You have to define BOOST_RESULT_OF_USE_DECLTYPE because your compiler
does not implement a fully conforming decltype. (AFAIK, the only
compiler that currently does is clang 3.2).

>
>
> CGAL 4.1
> the CORE numeric library, along with its dependencies (GMP etc)
> Boost 1.47
> Visual Studio 2010
>
> The problem does *not* appear in CGAL 3.9.

CGAL 3.9 didn't use result_of. That's why you don't see the problem.

> The following code reproduces the problem for me:
>
> // This is the problematic define.
> #define BOOST_RESULT_OF_USE_DECLTYPE
>
> #include <vector>
>
> #include <boost/range/algorithm.hpp>
> #include <boost/range/adaptors.hpp>
>
> #include <CGAL/Cartesian.h>
> #include <CGAL/CORE_Expr.h>
> #include <CGAL/Nef_polyhedron_3.h>
>
> typedef CORE::Expr NT;
> typedef CGAL::Cartesian<NT> K;
> typedef CGAL::Nef_polyhedron_3<K> nef_polyhedron_3;
>
> int main() {
> std::vector<int> a(0, 3);
> a[0] = 1;
> a[1] = 2;
> a[3] = 3;
> std::vector<int> b;
>
> // With BOOST_RESULT_OF_USE_DECLTYPE defined, the following line
> causes an error.
> nef_polyhedron_3 foo;

This is because MSVC decltype triggers instantiation prematurely.

>
> // Without BOOST_RESULT_OF_USE_DECLTYPE defined, the following
> line causes an error.

This is because built-in lambdas require a decltype based result_of.

>
> boost::copy(a | boost::adaptors::transformed([](int x) { return x
> * 2; }), std::back_inserter(b)); return 0; }

It would be nice if both worked together, even with a broken
decltype. If I remember correctly there was a work-around involving two
Type_equality_wrappers when instantiating kernels.



Archive powered by MHonArc 2.6.18.

Top of Page