From debf525a0285de3f6e88e5cc4fd16c6ab9b8b5f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Thu, 21 Mar 2013 11:44:55 +0100 Subject: [PATCH] correctly forward result_type in Circular_kernel_2 Conflicts: Circular_kernel_2/include/CGAL/Circular_kernel_2/Circular_arc_2.h --- .../CGAL/Circular_kernel_2/Circular_arc_2.h | 7 +++- .../function_objects_polynomial_circular.h | 37 ++++++++++++------- 2 files changed, 28 insertions(+), 16 deletions(-) diff --git a/Circular_kernel_2/include/CGAL/Circular_kernel_2/Circular_arc_2.h b/Circular_kernel_2/include/CGAL/Circular_kernel_2/Circular_arc_2.h index b3baf3f8b7e..76864b70388 100644 --- a/Circular_kernel_2/include/CGAL/Circular_kernel_2/Circular_arc_2.h +++ b/Circular_kernel_2/include/CGAL/Circular_kernel_2/Circular_arc_2.h @@ -41,6 +41,7 @@ #endif #include +#include namespace CGAL { namespace internal { @@ -631,12 +632,14 @@ public: return _support; } - const Point_2 & center() const + typename cpp11::result_of::type + center() const { return supporting_circle().center(); } - const FT & squared_radius() const + typename cpp11::result_of::type + squared_radius() const { return supporting_circle().squared_radius(); } diff --git a/Circular_kernel_2/include/CGAL/Circular_kernel_2/function_objects_polynomial_circular.h b/Circular_kernel_2/include/CGAL/Circular_kernel_2/function_objects_polynomial_circular.h index 7b89e17b0f4..a43166f0c75 100644 --- a/Circular_kernel_2/include/CGAL/Circular_kernel_2/function_objects_polynomial_circular.h +++ b/Circular_kernel_2/include/CGAL/Circular_kernel_2/function_objects_polynomial_circular.h @@ -630,7 +630,20 @@ namespace CircularFunctors { { public: - typedef void result_type; + template + struct result; + + template + struct result + { + typedef typename CK::Polynomial_1_2 type; + }; + + template + struct result + { + typedef typename CK::Polynomial_for_circles_2_2 type; + }; typename CK::Polynomial_1_2 operator() ( const typename CK::Line_2 & l ) @@ -1265,40 +1278,36 @@ namespace CircularFunctors { typedef typename CK::FT FT; typedef typename CK::Point_2 Point_2; typedef typename CK::Circle_2 Circle_2; - typedef FT forwarded_result_type; public: template - struct result { - typedef forwarded_result_type type; + struct result{ + typedef FT type; }; template struct result { - typedef const forwarded_result_type& type; + typedef typename cpp11::result_of::type type; }; template struct result { - typedef const forwarded_result_type& type; + typedef typename cpp11::result_of::type type; }; - const forwarded_result_type& + typename cpp11::result_of::type operator()( const Circle_2& c) const { return LK_Compute_squared_radius_2()(c); } - forwarded_result_type - operator()( const Point_2& p) const + FT operator()( const Point_2& p) const { return LK_Compute_squared_radius_2()(p); } - forwarded_result_type - operator()( const Point_2& p, const Point_2& q) const + FT operator()( const Point_2& p, const Point_2& q) const { return LK_Compute_squared_radius_2()(p, q); } - forwarded_result_type - operator()( const Point_2& p, const Point_2& q, const Point_2& r) const + FT operator()( const Point_2& p, const Point_2& q, const Point_2& r) const { return LK_Compute_squared_radius_2()(p, q, r); } - const forwarded_result_type& + typename cpp11::result_of::type operator()(const Circular_arc_2& c) const { return c.rep().squared_radius(); }