workaround to force the usage of the tr1 implementation of result_of from boost

see http://www.boost.org/doc/libs/1_52_0/libs/utility/utility.htm#result_of
This commit is contained in:
Sébastien Loriot 2013-02-04 11:30:28 +01:00
parent 2db91b49f4
commit f0f34d45fa
32 changed files with 233 additions and 155 deletions

View File

@ -110,25 +110,25 @@ public:
{}
typename boost::result_of<typename R::Construct_circular_source_vertex_2(Circular_arc_2)>::type
typename cpp11::result_of<typename R::Construct_circular_source_vertex_2(Circular_arc_2)>::type
source() const
{
return typename R::Construct_circular_source_vertex_2()(*this);
}
typename boost::result_of<typename R::Construct_circular_target_vertex_2(Circular_arc_2)>::type
typename cpp11::result_of<typename R::Construct_circular_target_vertex_2(Circular_arc_2)>::type
target() const
{
return typename R::Construct_circular_target_vertex_2()(*this);
}
typename boost::result_of<typename R::Construct_circular_min_vertex_2(Circular_arc_2)>::type
typename cpp11::result_of<typename R::Construct_circular_min_vertex_2(Circular_arc_2)>::type
left() const
{
return typename R::Construct_circular_min_vertex_2()(*this);
}
typename boost::result_of<typename R::Construct_circular_max_vertex_2(Circular_arc_2)>::type
typename cpp11::result_of<typename R::Construct_circular_max_vertex_2(Circular_arc_2)>::type
right() const
{
return typename R::Construct_circular_max_vertex_2()(*this);
@ -144,19 +144,19 @@ public:
return typename R::Is_y_monotone_2()(*this);
}
typename boost::result_of<typename R::Construct_circle_2(Circular_arc_2)>::type
typename cpp11::result_of<typename R::Construct_circle_2(Circular_arc_2)>::type
supporting_circle() const
{
return typename R::Construct_circle_2()(*this);
}
typename boost::result_of<typename R::Construct_center_2(Circular_arc_2)>::type
typename cpp11::result_of<typename R::Construct_center_2(Circular_arc_2)>::type
center() const
{
return typename R::Construct_center_2()(*this);
}
typename boost::result_of<typename R::Compute_squared_radius_2( Circular_arc_2)>::type
typename cpp11::result_of<typename R::Compute_squared_radius_2( Circular_arc_2)>::type
squared_radius() const
{
return typename R::Compute_squared_radius_2()(*this);

View File

@ -74,14 +74,14 @@ public:
{}
typename
boost::result_of<typename R::Compute_circular_x_2(Circular_arc_point_2)>::type
cpp11::result_of<typename R::Compute_circular_x_2(Circular_arc_point_2)>::type
x() const
{
return typename R::Compute_circular_x_2()(*this);
}
typename
boost::result_of<typename R::Compute_circular_y_2(Circular_arc_point_2)>::type
cpp11::result_of<typename R::Compute_circular_y_2(Circular_arc_point_2)>::type
y() const
{
return typename R::Compute_circular_y_2()(*this);

View File

@ -93,25 +93,25 @@ public:
: RLine_arc_2(a)
{}
typename boost::result_of< typename R::Construct_circular_source_vertex_2(Line_arc_2)>::type
typename cpp11::result_of< typename R::Construct_circular_source_vertex_2(Line_arc_2)>::type
source() const
{
return typename R::Construct_circular_source_vertex_2()(*this);
}
typename boost::result_of< typename R::Construct_circular_target_vertex_2(Line_arc_2)>::type
typename cpp11::result_of< typename R::Construct_circular_target_vertex_2(Line_arc_2)>::type
target() const
{
return typename R::Construct_circular_target_vertex_2()(*this);
}
typename boost::result_of< typename R::Construct_circular_min_vertex_2(Line_arc_2)>::type
typename cpp11::result_of< typename R::Construct_circular_min_vertex_2(Line_arc_2)>::type
left() const
{
return typename R::Construct_circular_min_vertex_2()(*this);
}
typename boost::result_of< typename R::Construct_circular_max_vertex_2(Line_arc_2)>::type
typename cpp11::result_of< typename R::Construct_circular_max_vertex_2(Line_arc_2)>::type
right() const
{
return typename R::Construct_circular_max_vertex_2()(*this);

View File

@ -120,19 +120,19 @@ namespace CGAL {
: RCircular_arc_3(a)
{}
typename boost::result_of<typename R::Construct_circular_source_vertex_3(Circular_arc_3)>::type
typename cpp11::result_of<typename R::Construct_circular_source_vertex_3(Circular_arc_3)>::type
source() const
{
return typename R::Construct_circular_source_vertex_3()(*this);
}
typename boost::result_of<typename R::Construct_circular_target_vertex_3(Circular_arc_3)>::type
typename cpp11::result_of<typename R::Construct_circular_target_vertex_3(Circular_arc_3)>::type
target() const
{
return typename R::Construct_circular_target_vertex_3()(*this);
}
typename boost::result_of<typename R::Construct_circle_3(Circular_arc_3)>::type
typename cpp11::result_of<typename R::Construct_circle_3(Circular_arc_3)>::type
supporting_circle() const
{
return typename R::Construct_circle_3()(*this);

View File

@ -197,15 +197,15 @@ public:
typename boost::result_of<typename R::Compute_circular_x_3(Circular_arc_point_3)>::type
typename cpp11::result_of<typename R::Compute_circular_x_3(Circular_arc_point_3)>::type
x() const
{ return typename R::Compute_circular_x_3()(*this);}
typename boost::result_of<typename R::Compute_circular_y_3(Circular_arc_point_3)>::type
typename cpp11::result_of<typename R::Compute_circular_y_3(Circular_arc_point_3)>::type
y() const
{ return typename R::Compute_circular_y_3()(*this);}
typename boost::result_of<typename R::Compute_circular_z_3(Circular_arc_point_3)>::type
typename cpp11::result_of<typename R::Compute_circular_z_3(Circular_arc_point_3)>::type
z() const
{ return typename R::Compute_circular_z_3()(*this);}

View File

@ -123,31 +123,31 @@ namespace CGAL {
: RLine_arc_3(a)
{}
typename boost::result_of<typename R::Construct_circular_source_vertex_3(Line_arc_3)>::type
typename cpp11::result_of<typename R::Construct_circular_source_vertex_3(Line_arc_3)>::type
source() const
{
return typename R::Construct_circular_source_vertex_3()(*this);
}
typename boost::result_of<typename R::Construct_circular_target_vertex_3(Line_arc_3)>::type
typename cpp11::result_of<typename R::Construct_circular_target_vertex_3(Line_arc_3)>::type
target() const
{
return typename R::Construct_circular_target_vertex_3()(*this);
}
typename boost::result_of<typename R::Construct_circular_min_vertex_3(Line_arc_3)>::type
typename cpp11::result_of<typename R::Construct_circular_min_vertex_3(Line_arc_3)>::type
lower_xyz_extremity() const
{
return typename R::Construct_circular_min_vertex_3()(*this);
}
typename boost::result_of<typename R::Construct_circular_max_vertex_3(Line_arc_3)>::type
typename cpp11::result_of<typename R::Construct_circular_max_vertex_3(Line_arc_3)>::type
higher_xyz_extremity() const
{
return typename R::Construct_circular_max_vertex_3()(*this);
}
typename boost::result_of<typename R::Construct_line_3(Line_arc_3)>::type
typename cpp11::result_of<typename R::Construct_line_3(Line_arc_3)>::type
supporting_line() const
{
return typename R::Construct_line_3()(*this);

View File

@ -160,7 +160,7 @@ protocol. If a functor `F` has the same return type across all
overloads of `operator()`, the nested type
`F::result_type` is defined to be that type. Otherwise the
return type of calling the functor with an argument of type
`Arg` can be accessed through `boost::%result_of<F(Arg)>::%type`.
`Arg` can be accessed through \link CGAL::cpp11::result_of::type `CGAL::cpp11::result_of<F(Arg)>::type` \endlink.
\section preliminaries_secchecks Checks

View File

@ -809,21 +809,21 @@ struct Lazy_construction_nt {
BOOST_PP_REPEAT(n, CGAL_TYPEMAP_EC, T) \
typedef Lazy_exact_nt< \
typename boost::remove_cv< typename boost::remove_reference < \
typename boost::result_of<EC( BOOST_PP_ENUM_PARAMS(n, E) )>::type >::type >::type > type; \
typename cpp11::result_of<EC( BOOST_PP_ENUM_PARAMS(n, E) )>::type >::type >::type > type; \
};
BOOST_PP_REPEAT_FROM_TO(1, 6, CGAL_RESULT_NT, _)
#define CGAL_NT_OPERATOR(z, n, d) \
template<BOOST_PP_ENUM_PARAMS(n, class L)> \
typename boost::result_of<Lazy_construction_nt(BOOST_PP_ENUM_PARAMS(n, L))>::type \
typename cpp11::result_of<Lazy_construction_nt(BOOST_PP_ENUM_PARAMS(n, L))>::type \
operator()( BOOST_PP_ENUM(n, CGAL_LARGS, _) ) const { \
BOOST_PP_REPEAT(n, CGAL_TYPEMAP_EC, L) \
BOOST_PP_REPEAT(n, CGAL_TYPEMAP_AC, L) \
typedef typename boost::remove_cv< typename boost::remove_reference < \
typename boost::result_of< EC(BOOST_PP_ENUM_PARAMS(n, E)) >::type >::type >::type ET; \
typename cpp11::result_of< EC(BOOST_PP_ENUM_PARAMS(n, E)) >::type >::type >::type ET; \
typedef typename boost::remove_cv< typename boost::remove_reference < \
typename boost::result_of< AC(BOOST_PP_ENUM_PARAMS(n, A)) >::type >::type >::type AT; \
typename cpp11::result_of< AC(BOOST_PP_ENUM_PARAMS(n, A)) >::type >::type >::type AT; \
CGAL_BRANCH_PROFILER(std::string(" failures/calls to : ") + std::string(CGAL_PRETTY_FUNCTION), tmp); \
Protect_FPU_rounding<Protection> P; \
try { \
@ -1424,23 +1424,23 @@ struct Lazy_construction<LK, AC, EC, E2A_, false>
template< typename F, BOOST_PP_ENUM_PARAMS(n, class T) > \
struct result<F( BOOST_PP_ENUM_PARAMS(n, T) )> { \
BOOST_PP_REPEAT(n, CGAL_TYPEMAP_AC, T) \
typedef typename Type_mapper< typename boost::result_of<AC( BOOST_PP_ENUM_PARAMS(n, A) )>::type, AK, LK>::type type; \
typedef typename Type_mapper< typename cpp11::result_of<AC( BOOST_PP_ENUM_PARAMS(n, A) )>::type, AK, LK>::type type; \
};
BOOST_PP_REPEAT_FROM_TO(1, 9, CGAL_RESULT, _)
#define CGAL_CONSTRUCTION_OPERATOR(z, n, d) \
template<BOOST_PP_ENUM_PARAMS(n, class L)> \
typename boost::result_of<Lazy_construction(BOOST_PP_ENUM_PARAMS(n, L))>::type \
typename cpp11::result_of<Lazy_construction(BOOST_PP_ENUM_PARAMS(n, L))>::type \
operator()( BOOST_PP_ENUM(n, CGAL_LARGS, _) ) { \
BOOST_PP_REPEAT(n, CGAL_TYPEMAP_EC, L) \
BOOST_PP_REPEAT(n, CGAL_TYPEMAP_AC, L) \
typedef typename boost::remove_cv< typename boost::remove_reference < \
typename boost::result_of< EC(BOOST_PP_ENUM_PARAMS(n, E)) >::type >::type >::type ET; \
typename cpp11::result_of< EC(BOOST_PP_ENUM_PARAMS(n, E)) >::type >::type >::type ET; \
typedef typename boost::remove_cv< typename boost::remove_reference < \
typename boost::result_of< AC(BOOST_PP_ENUM_PARAMS(n, A)) >::type >::type >::type AT; \
typename cpp11::result_of< AC(BOOST_PP_ENUM_PARAMS(n, A)) >::type >::type >::type AT; \
typedef Lazy< AT, ET, EFT, E2A> Handle; \
typedef typename boost::result_of<Lazy_construction(BOOST_PP_ENUM_PARAMS(n, L))>::type result_type; \
typedef typename cpp11::result_of<Lazy_construction(BOOST_PP_ENUM_PARAMS(n, L))>::type result_type; \
CGAL_BRANCH_PROFILER(std::string(" failures/calls to : ") + std::string(CGAL_PRETTY_FUNCTION), tmp); \
Protect_FPU_rounding<Protection> P; \
try { \
@ -1456,13 +1456,13 @@ struct result<F( BOOST_PP_ENUM_PARAMS(n, T) )> { \
BOOST_PP_REPEAT_FROM_TO(1, 9, CGAL_CONSTRUCTION_OPERATOR, _)
// nullary
typename Type_mapper< typename boost::result_of<AC()>::type ,AK, LK>::type
typename Type_mapper< typename cpp11::result_of<AC()>::type ,AK, LK>::type
operator()() const
{
typedef typename boost::result_of<AC()>::type AT;
typedef typename boost::result_of<EC()>::type ET;
typedef typename cpp11::result_of<AC()>::type AT;
typedef typename cpp11::result_of<EC()>::type ET;
typedef Lazy<AT, ET, EFT, E2A> Handle;
typedef typename Type_mapper< typename boost::result_of<AC()>::type ,AK, LK>::type result_type;
typedef typename Type_mapper< typename cpp11::result_of<AC()>::type ,AK, LK>::type result_type;
return result_type( Handle(new Lazy_rep_0<AT,ET,E2A>()) );
}

View File

@ -147,6 +147,13 @@ David A. Wheeler's 'SLOCCount'</a>, restricted to the <code>include/CGAL/</code>
<li> Addition of the <code>Combination_enumerator</code>
</ul>
<h3>STL Extensions</h3>
<ul>
<li>Introduction of <code>CGAL::cpp11::result_of</code> as an alias to the tr1 implementation from boost of the <code>result_of</code> mechanism.
When all compilers supported by CGAL will have a Standard compliant implemention of the C++11 <code>decltype</code> feature, it will become an alias to
<code>std::result_of</code>.
</li>
</ul>
<h3>Surface Reconstruction from Point Sets</h3>
<ul>

View File

@ -95,13 +95,13 @@ public:
Circle_2(const Point_2 & center)
: RCircle_2(typename R::Construct_circle_2()(Return_base_tag(), center, FT(0), COUNTERCLOCKWISE)) {}
typename boost::result_of<typename R::Construct_center_2(Circle_2)>::type
typename cpp11::result_of<typename R::Construct_center_2(Circle_2)>::type
center() const
{
return R().construct_center_2_object()(*this);
}
typename boost::result_of<typename R::Compute_squared_radius_2(Circle_2)>::type
typename cpp11::result_of<typename R::Compute_squared_radius_2(Circle_2)>::type
squared_radius() const
{
return R().compute_squared_radius_2_object()(*this);

View File

@ -101,7 +101,7 @@ public:
Circle_3(const Rep& r)
: Rep(r) {}
typename boost::result_of
typename cpp11::result_of
<typename R::Construct_sphere_3( Circle_3)>::type
diametral_sphere() const
{
@ -118,7 +118,7 @@ public:
return typename R::Construct_sphere_3()(*this).squared_radius();
}
typename boost::result_of
typename cpp11::result_of
<typename R::Construct_plane_3( Circle_3)>::type
supporting_plane() const
{

View File

@ -98,19 +98,19 @@ public:
return R().construct_perpendicular_direction_2_object()(*this,o);
}
typename boost::result_of<typename R::Compute_dx_2( Direction_2)>::type
typename cpp11::result_of<typename R::Compute_dx_2( Direction_2)>::type
dx() const
{
return R().compute_dx_2_object()(*this);
}
typename boost::result_of<typename R::Compute_dy_2( Direction_2)>::type
typename cpp11::result_of<typename R::Compute_dy_2( Direction_2)>::type
dy() const
{
return R().compute_dy_2_object()(*this);
}
typename boost::result_of<typename R::Compute_dx_2( Direction_2)>::type
typename cpp11::result_of<typename R::Compute_dx_2( Direction_2)>::type
delta(int i) const
{
CGAL_kernel_precondition( ( i == 0 ) || ( i == 1 ) );

View File

@ -104,25 +104,25 @@ public:
Vector_3 vector() const { return to_vector(); }
typename boost::result_of<typename R::Compute_dx_3(Direction_3)>::type
typename cpp11::result_of<typename R::Compute_dx_3(Direction_3)>::type
dx() const
{
return R().compute_dx_3_object()(*this);
}
typename boost::result_of<typename R::Compute_dy_3(Direction_3)>::type
typename cpp11::result_of<typename R::Compute_dy_3(Direction_3)>::type
dy() const
{
return R().compute_dy_3_object()(*this);
}
typename boost::result_of<typename R::Compute_dz_3(Direction_3)>::type
typename cpp11::result_of<typename R::Compute_dz_3(Direction_3)>::type
dz() const
{
return R().compute_dz_3_object()(*this);
}
typename boost::result_of<typename R::Compute_dx_3(Direction_3)>::type
typename cpp11::result_of<typename R::Compute_dx_3(Direction_3)>::type
delta(int i) const
{
CGAL_kernel_precondition( i >= 0 && i <= 2 );

View File

@ -90,67 +90,67 @@ public:
: Rep(typename R::Construct_iso_cuboid_3()(Return_base_tag(), min_hx, min_hy, min_hz,
max_hx, max_hy, max_hz)) {}
typename boost::result_of<typename R::Construct_min_vertex_3( Iso_cuboid_3 )>::type
typename cpp11::result_of<typename R::Construct_min_vertex_3( Iso_cuboid_3 )>::type
min BOOST_PREVENT_MACRO_SUBSTITUTION () const
{
return R().construct_min_vertex_3_object()(*this);
}
typename boost::result_of<typename R::Construct_max_vertex_3( Iso_cuboid_3 )>::type
typename cpp11::result_of<typename R::Construct_max_vertex_3( Iso_cuboid_3 )>::type
max BOOST_PREVENT_MACRO_SUBSTITUTION () const
{
return R().construct_max_vertex_3_object()(*this);
}
typename boost::result_of<typename R::Construct_vertex_3( Iso_cuboid_3, int )>::type
typename cpp11::result_of<typename R::Construct_vertex_3( Iso_cuboid_3, int )>::type
vertex(int i) const
{
return R().construct_vertex_3_object()(*this,i);
}
typename boost::result_of<typename R::Construct_vertex_3( Iso_cuboid_3, int )>::type
typename cpp11::result_of<typename R::Construct_vertex_3( Iso_cuboid_3, int )>::type
operator[](int i) const
{
return R().construct_vertex_3_object()(*this,i);
}
typename boost::result_of<typename R::Compute_xmin_3( Iso_cuboid_3 )>::type
typename cpp11::result_of<typename R::Compute_xmin_3( Iso_cuboid_3 )>::type
xmin() const
{
return R().compute_xmin_3_object()(*this);
}
typename boost::result_of<typename R::Compute_xmax_3( Iso_cuboid_3 )>::type
typename cpp11::result_of<typename R::Compute_xmax_3( Iso_cuboid_3 )>::type
xmax() const
{
return R().compute_xmax_3_object()(*this);
}
typename boost::result_of<typename R::Compute_ymin_3( Iso_cuboid_3 )>::type
typename cpp11::result_of<typename R::Compute_ymin_3( Iso_cuboid_3 )>::type
ymin() const
{
return R().compute_ymin_3_object()(*this);
}
typename boost::result_of<typename R::Compute_ymax_3( Iso_cuboid_3 )>::type
typename cpp11::result_of<typename R::Compute_ymax_3( Iso_cuboid_3 )>::type
ymax() const
{
return R().compute_ymax_3_object()(*this);
}
typename boost::result_of<typename R::Compute_zmin_3( Iso_cuboid_3 )>::type
typename cpp11::result_of<typename R::Compute_zmin_3( Iso_cuboid_3 )>::type
zmin() const
{
return R().compute_zmin_3_object()(*this);
}
typename boost::result_of<typename R::Compute_zmax_3( Iso_cuboid_3 )>::type
typename cpp11::result_of<typename R::Compute_zmax_3( Iso_cuboid_3 )>::type
zmax() const
{
return R().compute_zmax_3_object()(*this);
}
typename boost::result_of<typename R::Compute_xmin_3( Iso_cuboid_3 )>::type
typename cpp11::result_of<typename R::Compute_xmin_3( Iso_cuboid_3 )>::type
min_coord(int i) const
{
CGAL_kernel_precondition( i == 0 || i == 1 || i == 2 );
@ -162,7 +162,7 @@ public:
return zmin();
}
typename boost::result_of<typename R::Compute_xmax_3( Iso_cuboid_3 )>::type
typename cpp11::result_of<typename R::Compute_xmax_3( Iso_cuboid_3 )>::type
max_coord(int i) const
{
CGAL_kernel_precondition( i == 0 || i == 1 || i == 2 );
@ -210,7 +210,7 @@ public:
return R().is_degenerate_3_object()(*this);
}
typename boost::result_of<typename R::Compute_volume_3( Iso_cuboid_3 )>::type
typename cpp11::result_of<typename R::Compute_volume_3( Iso_cuboid_3 )>::type
volume() const
{
return R().compute_volume_3_object()(*this);

View File

@ -87,13 +87,13 @@ public:
: Rep(typename R::Construct_iso_rectangle_2()(Return_base_tag(), min_hx, min_hy, max_hx, max_hy, hw)) {}
typename boost::result_of<typename R::Construct_min_vertex_2( Iso_rectangle_2 )>::type
typename cpp11::result_of<typename R::Construct_min_vertex_2( Iso_rectangle_2 )>::type
min BOOST_PREVENT_MACRO_SUBSTITUTION () const
{
return R().construct_min_vertex_2_object()(*this);
}
typename boost::result_of<typename R::Construct_max_vertex_2( Iso_rectangle_2 )>::type
typename cpp11::result_of<typename R::Construct_max_vertex_2( Iso_rectangle_2 )>::type
max BOOST_PREVENT_MACRO_SUBSTITUTION () const
{
return R().construct_max_vertex_2_object()(*this);
@ -112,43 +112,43 @@ public:
}
typename boost::result_of<typename R::Construct_vertex_2( Iso_rectangle_2, int )>::type
typename cpp11::result_of<typename R::Construct_vertex_2( Iso_rectangle_2, int )>::type
vertex(int i) const
{
return R().construct_vertex_2_object()(*this,i);
}
typename boost::result_of<typename R::Construct_vertex_2( Iso_rectangle_2, int )>::type
typename cpp11::result_of<typename R::Construct_vertex_2( Iso_rectangle_2, int )>::type
operator[](int i) const
{
return R().construct_vertex_2_object()(*this,i);
}
typename boost::result_of<typename R::Compute_xmin_2( Iso_rectangle_2 )>::type
typename cpp11::result_of<typename R::Compute_xmin_2( Iso_rectangle_2 )>::type
xmin() const
{
return R().compute_xmin_2_object()(*this);
}
typename boost::result_of<typename R::Compute_xmax_2( Iso_rectangle_2 )>::type
typename cpp11::result_of<typename R::Compute_xmax_2( Iso_rectangle_2 )>::type
xmax() const
{
return R().compute_xmax_2_object()(*this);
}
typename boost::result_of<typename R::Compute_ymin_2( Iso_rectangle_2 )>::type
typename cpp11::result_of<typename R::Compute_ymin_2( Iso_rectangle_2 )>::type
ymin() const
{
return R().compute_ymin_2_object()(*this);
}
typename boost::result_of<typename R::Compute_ymax_2( Iso_rectangle_2 )>::type
typename cpp11::result_of<typename R::Compute_ymax_2( Iso_rectangle_2 )>::type
ymax() const
{
return R().compute_ymax_2_object()(*this);
}
typename boost::result_of<typename R::Compute_xmin_2( Iso_rectangle_2 )>::type
typename cpp11::result_of<typename R::Compute_xmin_2( Iso_rectangle_2 )>::type
min_coord(int i) const
{
CGAL_kernel_precondition( i == 0 || i == 1 );
@ -158,7 +158,7 @@ public:
return ymin();
}
typename boost::result_of<typename R::Compute_xmin_2( Iso_rectangle_2 )>::type
typename cpp11::result_of<typename R::Compute_xmin_2( Iso_rectangle_2 )>::type
max_coord(int i) const
{
CGAL_kernel_precondition( i == 0 || i == 1 );

View File

@ -113,25 +113,25 @@ public:
return Direction_3(a(), b(), c());
}
typename boost::result_of<typename R::Compute_a_3( Plane_3)>::type
typename cpp11::result_of<typename R::Compute_a_3( Plane_3)>::type
a() const
{
return R().compute_a_3_object()(*this);
}
typename boost::result_of<typename R::Compute_b_3( Plane_3)>::type
typename cpp11::result_of<typename R::Compute_b_3( Plane_3)>::type
b() const
{
return R().compute_b_3_object()(*this);
}
typename boost::result_of<typename R::Compute_c_3( Plane_3)>::type
typename cpp11::result_of<typename R::Compute_c_3( Plane_3)>::type
c() const
{
return R().compute_c_3_object()(*this);
}
typename boost::result_of<typename R::Compute_d_3( Plane_3)>::type
typename cpp11::result_of<typename R::Compute_d_3( Plane_3)>::type
d() const
{
return R().compute_d_3_object()(*this);

View File

@ -85,26 +85,26 @@ public:
: RPoint_2(typename R::Construct_point_2()(Return_base_tag(), hx, hy, hw))
{}
typename boost::result_of<typename R::Compute_x_2(Point_2)>::type
typename cpp11::result_of<typename R::Compute_x_2(Point_2)>::type
x() const
{
return typename R::Compute_x_2()(*this);
}
typename boost::result_of<typename R::Compute_y_2(Point_2)>::type
typename cpp11::result_of<typename R::Compute_y_2(Point_2)>::type
y() const
{
return typename R::Compute_y_2()(*this);
}
typename boost::result_of<typename R::Compute_x_2(Point_2)>::type
typename cpp11::result_of<typename R::Compute_x_2(Point_2)>::type
cartesian(int i) const
{
CGAL_kernel_precondition( (i == 0) || (i == 1) );
return (i==0) ? x() : y();
}
typename boost::result_of<typename R::Compute_x_2(Point_2)>::type
typename cpp11::result_of<typename R::Compute_x_2(Point_2)>::type
operator[](int i) const
{
return cartesian(i);
@ -122,19 +122,19 @@ public:
typename boost::result_of<typename R::Compute_hx_2(Point_2)>::type
typename cpp11::result_of<typename R::Compute_hx_2(Point_2)>::type
hx() const
{
return typename R::Compute_hx_2()(*this);
}
typename boost::result_of<typename R::Compute_hy_2(Point_2)>::type
typename cpp11::result_of<typename R::Compute_hy_2(Point_2)>::type
hy() const
{
return typename R::Compute_hy_2()(*this);
}
typename boost::result_of<typename R::Compute_hw_2(Point_2)>::type
typename cpp11::result_of<typename R::Compute_hw_2(Point_2)>::type
hw() const
{
return typename R::Compute_hw_2()(*this);
@ -145,7 +145,7 @@ public:
return 2;
}
typename boost::result_of<typename R::Compute_hx_2(Point_2)>::type
typename cpp11::result_of<typename R::Compute_hx_2(Point_2)>::type
homogeneous(int i) const
{
CGAL_kernel_precondition( (i >= 0) || (i <= 2) );

View File

@ -84,49 +84,49 @@ public:
: Rep(typename R::Construct_point_3()(Return_base_tag(), hx, hy, hz, hw))
{}
typename boost::result_of<typename R::Compute_x_3( Point_3)>::type
typename cpp11::result_of<typename R::Compute_x_3( Point_3)>::type
x() const
{
return typename R::Compute_x_3()(*this);
}
typename boost::result_of<typename R::Compute_y_3( Point_3)>::type
typename cpp11::result_of<typename R::Compute_y_3( Point_3)>::type
y() const
{
return typename R::Compute_y_3()(*this);
}
typename boost::result_of<typename R::Compute_z_3( Point_3)>::type
typename cpp11::result_of<typename R::Compute_z_3( Point_3)>::type
z() const
{
return typename R::Compute_z_3()(*this);
}
typename boost::result_of<typename R::Compute_hx_3( Point_3)>::type
typename cpp11::result_of<typename R::Compute_hx_3( Point_3)>::type
hx() const
{
return R().compute_hx_3_object()(*this);
}
typename boost::result_of<typename R::Compute_hy_3( Point_3)>::type
typename cpp11::result_of<typename R::Compute_hy_3( Point_3)>::type
hy() const
{
return R().compute_hy_3_object()(*this);
}
typename boost::result_of<typename R::Compute_hz_3( Point_3)>::type
typename cpp11::result_of<typename R::Compute_hz_3( Point_3)>::type
hz() const
{
return R().compute_hz_3_object()(*this);
}
typename boost::result_of<typename R::Compute_hw_3( Point_3)>::type
typename cpp11::result_of<typename R::Compute_hw_3( Point_3)>::type
hw() const
{
return R().compute_hw_3_object()(*this);
}
typename boost::result_of<typename R::Compute_x_3( Point_3)>::type
typename cpp11::result_of<typename R::Compute_x_3( Point_3)>::type
cartesian(int i) const
{
CGAL_kernel_precondition( (i == 0) || (i == 1) || (i == 2) );
@ -145,7 +145,7 @@ public:
return hw();
}
typename boost::result_of<typename R::Compute_x_3(Point_3)>::type
typename cpp11::result_of<typename R::Compute_x_3(Point_3)>::type
operator[](int i) const
{
return cartesian(i);

View File

@ -86,13 +86,13 @@ public:
: RRay_2(typename R::Construct_ray_2()(Return_base_tag(), sp, l)) {}
typename boost::result_of<typename R_::Construct_source_2( Ray_2)>::type
typename cpp11::result_of<typename R_::Construct_source_2( Ray_2)>::type
source() const
{
return R().construct_source_2_object()(*this);
}
typename boost::result_of<typename R_::Construct_second_point_2( Ray_2)>::type
typename cpp11::result_of<typename R_::Construct_second_point_2( Ray_2)>::type
second_point() const
{
return R().construct_second_point_2_object()(*this);
@ -116,7 +116,7 @@ public:
}
typename boost::result_of<typename R_::Construct_source_2( Ray_2 )>::type
typename cpp11::result_of<typename R_::Construct_source_2( Ray_2 )>::type
start() const
{
return source();

View File

@ -105,25 +105,25 @@ public:
bool collinear_has_on(const Point_3 &p) const;
*/
typename boost::result_of<typename R::Construct_point_on_3(Ray_3, int)>::type
typename cpp11::result_of<typename R::Construct_point_on_3(Ray_3, int)>::type
point(int i) const // TODO : use Qrt
{
return R().construct_point_on_3_object()(*this, i);
}
typename boost::result_of<typename R::Construct_source_3(Ray_3)>::type
typename cpp11::result_of<typename R::Construct_source_3(Ray_3)>::type
source() const
{
return R().construct_source_3_object()(*this);
}
typename boost::result_of<typename R::Construct_second_point_3(Ray_3)>::type
typename cpp11::result_of<typename R::Construct_second_point_3(Ray_3)>::type
second_point() const
{
return R().construct_second_point_3_object()(*this);
}
typename boost::result_of<typename R::Construct_source_3(Ray_3)>::type
typename cpp11::result_of<typename R::Construct_source_3(Ray_3)>::type
start() const
{
return source();

View File

@ -76,44 +76,44 @@ public:
Segment_2(const Point_2 &sp, const Point_2 &ep)
: RSegment_2(typename R::Construct_segment_2()(Return_base_tag(), sp,ep)) {}
typename boost::result_of<typename R::Construct_source_2( Segment_2)>::type
typename cpp11::result_of<typename R::Construct_source_2( Segment_2)>::type
source() const
{
return R_().construct_source_2_object()(*this);
}
typename boost::result_of<typename R::Construct_target_2( Segment_2)>::type
typename cpp11::result_of<typename R::Construct_target_2( Segment_2)>::type
target() const
{
return R_().construct_target_2_object()(*this);
}
typename boost::result_of<typename R::Construct_source_2( Segment_2)>::type
typename cpp11::result_of<typename R::Construct_source_2( Segment_2)>::type
start() const
{
return source();
}
typename boost::result_of<typename R::Construct_target_2( Segment_2)>::type
typename cpp11::result_of<typename R::Construct_target_2( Segment_2)>::type
end() const
{
return target();
}
typename boost::result_of<typename R::Construct_min_vertex_2( Segment_2)>::type
typename cpp11::result_of<typename R::Construct_min_vertex_2( Segment_2)>::type
min BOOST_PREVENT_MACRO_SUBSTITUTION () const;
typename boost::result_of<typename R::Construct_max_vertex_2( Segment_2)>::type
typename cpp11::result_of<typename R::Construct_max_vertex_2( Segment_2)>::type
max BOOST_PREVENT_MACRO_SUBSTITUTION () const;
typename boost::result_of<typename R::Construct_vertex_2( Segment_2, int)>::type
typename cpp11::result_of<typename R::Construct_vertex_2( Segment_2, int)>::type
vertex(int i) const;
typename boost::result_of<typename R::Construct_vertex_2( Segment_2, int)>::type
typename cpp11::result_of<typename R::Construct_vertex_2( Segment_2, int)>::type
point(int i) const;
typename boost::result_of<typename R::Construct_vertex_2( Segment_2, int)>::type
typename cpp11::result_of<typename R::Construct_vertex_2( Segment_2, int)>::type
operator[](int i) const;
bool is_horizontal() const;
@ -178,7 +178,7 @@ public:
template < class R_ >
CGAL_KERNEL_INLINE
typename boost::result_of<typename R_::Construct_min_vertex_2( Segment_2<R_> )>::type
typename cpp11::result_of<typename R_::Construct_min_vertex_2( Segment_2<R_> )>::type
Segment_2<R_>::min BOOST_PREVENT_MACRO_SUBSTITUTION () const
{
typename R_::Less_xy_2 less_xy;
@ -187,7 +187,7 @@ Segment_2<R_>::min BOOST_PREVENT_MACRO_SUBSTITUTION () const
template < class R_ >
CGAL_KERNEL_INLINE
typename boost::result_of<typename R_::Construct_max_vertex_2( Segment_2<R_> )>::type
typename cpp11::result_of<typename R_::Construct_max_vertex_2( Segment_2<R_> )>::type
Segment_2<R_>::max BOOST_PREVENT_MACRO_SUBSTITUTION () const
{
typename R_::Less_xy_2 less_xy;
@ -196,7 +196,7 @@ Segment_2<R_>::max BOOST_PREVENT_MACRO_SUBSTITUTION () const
template < class R_ >
CGAL_KERNEL_INLINE
typename boost::result_of<typename R_::Construct_vertex_2( Segment_2<R_>, int )>::type
typename cpp11::result_of<typename R_::Construct_vertex_2( Segment_2<R_>, int )>::type
Segment_2<R_>::vertex(int i) const
{
return (i%2 == 0) ? source() : target();
@ -204,7 +204,7 @@ Segment_2<R_>::vertex(int i) const
template < class R_ >
inline
typename boost::result_of<typename R_::Construct_vertex_2( Segment_2<R_>, int )>::type
typename cpp11::result_of<typename R_::Construct_vertex_2( Segment_2<R_>, int )>::type
Segment_2<R_>::point(int i) const
{
return vertex(i);
@ -212,7 +212,7 @@ Segment_2<R_>::point(int i) const
template < class R_ >
inline
typename boost::result_of<typename R_::Construct_vertex_2( Segment_2<R_>, int )>::type
typename cpp11::result_of<typename R_::Construct_vertex_2( Segment_2<R_>, int )>::type
Segment_2<R_>::operator[](int i) const
{
return vertex(i);

View File

@ -74,44 +74,44 @@ public:
Segment_3(const Point_3& sp, const Point_3& ep)
: Rep(typename R::Construct_segment_3()(Return_base_tag(), sp, ep)) {}
typename boost::result_of<typename R::Construct_source_3(Segment_3)>::type
typename cpp11::result_of<typename R::Construct_source_3(Segment_3)>::type
source() const
{
return R_().construct_source_3_object()(*this);
}
typename boost::result_of<typename R::Construct_target_3(Segment_3)>::type
typename cpp11::result_of<typename R::Construct_target_3(Segment_3)>::type
target() const
{
return R_().construct_target_3_object()(*this);
}
typename boost::result_of<typename R::Construct_source_3(Segment_3)>::type
typename cpp11::result_of<typename R::Construct_source_3(Segment_3)>::type
start() const
{
return source();
}
typename boost::result_of<typename R::Construct_target_3(Segment_3)>::type
typename cpp11::result_of<typename R::Construct_target_3(Segment_3)>::type
end() const
{
return target();
}
typename boost::result_of<typename R::Construct_min_vertex_3(Segment_3)>::type
typename cpp11::result_of<typename R::Construct_min_vertex_3(Segment_3)>::type
min BOOST_PREVENT_MACRO_SUBSTITUTION () const;
typename boost::result_of<typename R::Construct_max_vertex_3(Segment_3)>::type
typename cpp11::result_of<typename R::Construct_max_vertex_3(Segment_3)>::type
max BOOST_PREVENT_MACRO_SUBSTITUTION () const;
typename boost::result_of<typename R::Construct_vertex_3(Segment_3, int)>::type
typename cpp11::result_of<typename R::Construct_vertex_3(Segment_3, int)>::type
vertex(int i) const;
typename boost::result_of<typename R::Construct_vertex_3(Segment_3, int)>::type
typename cpp11::result_of<typename R::Construct_vertex_3(Segment_3, int)>::type
point(int i) const
{ return vertex(i); }
typename boost::result_of<typename R::Construct_vertex_3(Segment_3, int)>::type
typename cpp11::result_of<typename R::Construct_vertex_3(Segment_3, int)>::type
operator[](int i) const
{ return vertex(i); }
@ -169,7 +169,7 @@ public:
template < class R_ >
CGAL_KERNEL_INLINE
typename boost::result_of<typename R_::Construct_min_vertex_3( Segment_3<R_> ) >::type
typename cpp11::result_of<typename R_::Construct_min_vertex_3( Segment_3<R_> ) >::type
Segment_3<R_>::min BOOST_PREVENT_MACRO_SUBSTITUTION () const
{
typename R_::Less_xyz_3 less_xyz;
@ -178,7 +178,7 @@ Segment_3<R_>::min BOOST_PREVENT_MACRO_SUBSTITUTION () const
template < class R_ >
CGAL_KERNEL_INLINE
typename boost::result_of<typename R_::Construct_max_vertex_3( Segment_3<R_> ) >::type
typename cpp11::result_of<typename R_::Construct_max_vertex_3( Segment_3<R_> ) >::type
Segment_3<R_>::max BOOST_PREVENT_MACRO_SUBSTITUTION () const
{
typename R_::Less_xyz_3 less_xyz;
@ -187,7 +187,7 @@ Segment_3<R_>::max BOOST_PREVENT_MACRO_SUBSTITUTION () const
template < class R_ >
CGAL_KERNEL_INLINE
typename boost::result_of<typename R_::Construct_vertex_3( Segment_3<R_>, int ) >::type
typename cpp11::result_of<typename R_::Construct_vertex_3( Segment_3<R_>, int ) >::type
Segment_3<R_>::vertex(int i) const
{
return (i%2 == 0) ? source() : target();

View File

@ -94,7 +94,7 @@ public:
Sphere_3 orthogonal_transform(const Aff_transformation_3 &t) const;
typename boost::result_of<typename R::Construct_center_3( Sphere_3)>::type
typename cpp11::result_of<typename R::Construct_center_3( Sphere_3)>::type
center() const
{
return R().construct_center_3_object()(*this);

View File

@ -78,13 +78,13 @@ public:
t.transform(this->vertex(3)));
}
typename boost::result_of<typename R::Construct_vertex_3( Tetrahedron_3, int)>::type
typename cpp11::result_of<typename R::Construct_vertex_3( Tetrahedron_3, int)>::type
vertex(int i) const
{
return R().construct_vertex_3_object()(*this,i);
}
typename boost::result_of<typename R::Construct_vertex_3( Tetrahedron_3, int)>::type
typename cpp11::result_of<typename R::Construct_vertex_3( Tetrahedron_3, int)>::type
operator[](int i) const
{
return vertex(i);
@ -136,7 +136,7 @@ public:
return R().has_on_unbounded_side_3_object()(*this, p);
}
typename boost::result_of<typename R::Compute_volume_3( Tetrahedron_3)>::type
typename cpp11::result_of<typename R::Compute_volume_3( Tetrahedron_3)>::type
volume() const
{
return R().compute_volume_3_object()(*this);

View File

@ -107,13 +107,13 @@ public:
return !(*this == t);
}
typename boost::result_of<typename R::Construct_vertex_2( Triangle_2, int)>::type
typename cpp11::result_of<typename R::Construct_vertex_2( Triangle_2, int)>::type
vertex(int i) const
{
return R().construct_vertex_2_object()(*this,i);
}
typename boost::result_of<typename R::Construct_vertex_2( Triangle_2, int)>::type
typename cpp11::result_of<typename R::Construct_vertex_2( Triangle_2, int)>::type
operator[](int i) const
{
return vertex(i);

View File

@ -90,13 +90,13 @@ public:
}
typename boost::result_of<typename R::Construct_vertex_3( Triangle_3, int )>::type
typename cpp11::result_of<typename R::Construct_vertex_3( Triangle_3, int )>::type
vertex(int i) const
{
return R().construct_vertex_3_object()(*this, i);
}
typename boost::result_of<typename R::Construct_vertex_3( Triangle_3, int )>::type
typename cpp11::result_of<typename R::Construct_vertex_3( Triangle_3, int )>::type
operator[](int i) const
{
return vertex(i);

View File

@ -99,26 +99,26 @@ public:
: RVector_2(typename R::Construct_vector_2()(Return_base_tag(), x,y,w)) {}
typename boost::result_of<typename R::Compute_x_2(Vector_2)>::type
typename cpp11::result_of<typename R::Compute_x_2(Vector_2)>::type
x() const
{
return R().compute_x_2_object()(*this);
}
typename boost::result_of<typename R::Compute_y_2(Vector_2)>::type
typename cpp11::result_of<typename R::Compute_y_2(Vector_2)>::type
y() const
{
return R().compute_y_2_object()(*this);
}
typename boost::result_of<typename R::Compute_y_2(Vector_2)>::type
typename cpp11::result_of<typename R::Compute_y_2(Vector_2)>::type
cartesian(int i) const
{
CGAL_kernel_precondition( (i == 0) || (i == 1) );
return (i==0) ? x() : y();
}
typename boost::result_of<typename R::Compute_x_2(Vector_2)>::type
typename cpp11::result_of<typename R::Compute_x_2(Vector_2)>::type
operator[](int i) const
{
return cartesian(i);
@ -134,26 +134,26 @@ public:
return typename R::Construct_cartesian_const_iterator_2()(*this,2);
}
typename boost::result_of<typename R::Compute_hx_2(Vector_2)>::type
typename cpp11::result_of<typename R::Compute_hx_2(Vector_2)>::type
hx() const
{
return R().compute_hx_2_object()(*this);
}
typename boost::result_of<typename R::Compute_hy_2(Vector_2)>::type
typename cpp11::result_of<typename R::Compute_hy_2(Vector_2)>::type
hy() const
{
return R().compute_hy_2_object()(*this);
}
typename boost::result_of<typename R::Compute_hw_2(Vector_2)>::type
typename cpp11::result_of<typename R::Compute_hw_2(Vector_2)>::type
hw() const
{
return R().compute_hw_2_object()(*this);
}
typename boost::result_of<typename R::Compute_hx_2(Vector_2)>::type
typename cpp11::result_of<typename R::Compute_hx_2(Vector_2)>::type
homogeneous(int i) const
{
CGAL_kernel_precondition( (i >= 0) || (i <= 2) );

View File

@ -133,49 +133,49 @@ public:
return R().construct_divided_vector_3_object()(*this,c);
}
typename boost::result_of<typename R::Compute_x_3(Vector_3)>::type
typename cpp11::result_of<typename R::Compute_x_3(Vector_3)>::type
x() const
{
return R().compute_x_3_object()(*this);
}
typename boost::result_of<typename R::Compute_y_3(Vector_3)>::type
typename cpp11::result_of<typename R::Compute_y_3(Vector_3)>::type
y() const
{
return R().compute_y_3_object()(*this);
}
typename boost::result_of<typename R::Compute_z_3(Vector_3)>::type
typename cpp11::result_of<typename R::Compute_z_3(Vector_3)>::type
z() const
{
return R().compute_z_3_object()(*this);
}
typename boost::result_of<typename R::Compute_hx_3(Vector_3)>::type
typename cpp11::result_of<typename R::Compute_hx_3(Vector_3)>::type
hx() const
{
return R().compute_hx_3_object()(*this);
}
typename boost::result_of<typename R::Compute_hy_3(Vector_3)>::type
typename cpp11::result_of<typename R::Compute_hy_3(Vector_3)>::type
hy() const
{
return R().compute_hy_3_object()(*this);
}
typename boost::result_of<typename R::Compute_hz_3(Vector_3)>::type
typename cpp11::result_of<typename R::Compute_hz_3(Vector_3)>::type
hz() const
{
return R().compute_hz_3_object()(*this);
}
typename boost::result_of<typename R::Compute_hw_3(Vector_3)>::type
typename cpp11::result_of<typename R::Compute_hw_3(Vector_3)>::type
hw() const
{
return R().compute_hw_3_object()(*this);
}
typename boost::result_of<typename R::Compute_x_3(Vector_3)>::type
typename cpp11::result_of<typename R::Compute_x_3(Vector_3)>::type
cartesian(int i) const
{
CGAL_kernel_precondition( (i == 0) || (i == 1) || (i == 2) );
@ -184,7 +184,7 @@ public:
return z();
}
typename boost::result_of<typename R::Compute_hw_3(Vector_3)>::type
typename cpp11::result_of<typename R::Compute_hw_3(Vector_3)>::type
homogeneous(int i) const
{
CGAL_kernel_precondition( (i >= 0) || (i <= 3) );
@ -199,7 +199,7 @@ public:
return 3;
}
typename boost::result_of<typename R::Compute_x_3(Vector_3)>::type
typename cpp11::result_of<typename R::Compute_x_3(Vector_3)>::type
operator[](int i) const
{
return cartesian(i);
@ -215,7 +215,7 @@ public:
return typename R::Construct_cartesian_const_iterator_3()(*this,3);
}
typename boost::result_of<typename R::Compute_squared_length_3(Vector_3)>::type
typename cpp11::result_of<typename R::Compute_squared_length_3(Vector_3)>::type
squared_length() const
{
return R().compute_squared_length_3_object()(*this);

View File

@ -37,7 +37,7 @@
// #if !defined(CGAL_CFG_NO_CPP0X_DECLTYPE)
// #define BOOST_RESULT_OF_USE_DECLTYPE
// #endif
#include <boost/utility/result_of.hpp>
#include <CGAL/result_of.h>
#include <CGAL/assertions.h>
#include <CGAL/tags.h>

View File

@ -121,7 +121,7 @@ overloads of \ccStyle{operator()}, the nested type
\ccStyle{F::result_type} is defined to be that type. Otherwise the
return type of calling the functor with an argument of type
\ccStyle{Arg} can be accessed through
\ccStyle{boost::result_of<F(Arg)>::type}.
\ccStyle{CGAL::cpp11::result_of<F(Arg)>::type}.
\input{Preliminaries/checks} % extra chapter

View File

@ -0,0 +1,17 @@
namespace CGAL {
namespace cpp11 {
/*!
\ingroup PkgStlExtension
Alias to the tr1 implementation from boost of the `result_of` mechanism.
When all compilers supported by %CGAL will have a Standard compliant implemention of the
the \cpp11 `decltype` feature, it will become an alias to <code>std::result_of</code>.
*/
template <typename F>
struct result_of{
/// starting from boost version 1.44, it is `boost::tr1_result_of<F>::%type`, and
/// `boost::result_of<F>::%type` otherwise.
typedef Hidden_type type;
};
} } //end of namespace CGAL::cpp11

View File

@ -0,0 +1,54 @@
// Copyright (c) 2013
// Utrecht University (The Netherlands),
// ETH Zurich (Switzerland),
// INRIA Sophia-Antipolis (France),
// Max-Planck-Institute Saarbruecken (Germany),
// and Tel-Aviv University (Israel). All rights reserved.
//
// This file is part of CGAL (www.cgal.org); you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public License as
// published by the Free Software Foundation; either version 3 of the License,
// or (at your option) any later version.
//
// Licensees holding a valid commercial license may use this file in
// accordance with the commercial license agreement provided with the software.
//
// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
//
// $URL$
// $Id$
//
//
// Author(s) : Sebastien Loriot <sebastien.loriot@cgal.org>
#ifndef CGAL_RESULT_OF_H
#define CGAL_RESULT_OF_H
#include <boost/utility/result_of.hpp>
#include <boost/version.hpp>
namespace CGAL{
// Even if for now we use the tr1 result_of implementation, we use the cpp11
// namespace since in the future, that's the decltype version that will be used
namespace cpp11{
template<typename F>
struct result_of
{
// from boost 1.44 release note http://www.boost.org/users/history/version_1_44_0.html :
// New template boost::tr1_result_of that implements the TR1 ResultOf protocol even if boost::result_of uses the C++0x decltype-based implementation.
#if BOOST_VERSION < 104400
typedef typename cpp11::result_of<F>::type type;
#else
typedef typename boost::tr1_result_of<F>::type type;
#endif
};
}
}
#endif //CGAL_RESULT_OF_H