correctly forward result_type in Circular_kernel_2

Conflicts:
	Circular_kernel_2/include/CGAL/Circular_kernel_2/Circular_arc_2.h
This commit is contained in:
Sébastien Loriot 2013-03-21 11:44:55 +01:00
parent d84d793ead
commit debf525a02
2 changed files with 28 additions and 16 deletions

View File

@ -41,6 +41,7 @@
#endif
#include <CGAL/Circular_kernel_2/Intersection_traits.h>
#include <CGAL/result_of.h>
namespace CGAL {
namespace internal {
@ -631,12 +632,14 @@ public:
return _support;
}
const Point_2 & center() const
typename cpp11::result_of<typename CK::Construct_center_2(Circle_2)>::type
center() const
{
return supporting_circle().center();
}
const FT & squared_radius() const
typename cpp11::result_of<typename CK::Compute_squared_radius_2(Circle_2)>::type
squared_radius() const
{
return supporting_circle().squared_radius();
}

View File

@ -630,7 +630,20 @@ namespace CircularFunctors {
{
public:
typedef void result_type;
template<typename>
struct result;
template<typename F>
struct result<F(typename CK::Line_2)>
{
typedef typename CK::Polynomial_1_2 type;
};
template<typename F>
struct result<F(typename CK::Circle_2)>
{
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<typename>
struct result {
typedef forwarded_result_type type;
struct result{
typedef FT type;
};
template<typename F>
struct result<F(Circular_arc_2)> {
typedef const forwarded_result_type& type;
typedef typename cpp11::result_of<LK_Compute_squared_radius_2(Circle_2)>::type type;
};
template<typename F>
struct result<F(Circle_2)> {
typedef const forwarded_result_type& type;
typedef typename cpp11::result_of<LK_Compute_squared_radius_2(Circle_2)>::type type;
};
const forwarded_result_type&
typename cpp11::result_of<LK_Compute_squared_radius_2(Circle_2)>::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<LK_Compute_squared_radius_2(Circle_2)>::type
operator()(const Circular_arc_2& c) const
{ return c.rep().squared_radius(); }