<CGAL/Kernel/Cartesian_coordinate_iterator_2.h>
<CGAL/Kernel/Cartesian_coordinate_iterator_3.h>
To:
<CGAL/Filtered_kernel/Cartesian_coordinate_iterator_2.h>
<CGAL/Filtered_kernel/Cartesian_coordinate_iterator_3.h>
of "forwarding constructors".
Quoting some comment in the code:
"
This is a simple tag which is used as additional (first) argument in
some kernel functors, to tell them to return the base (rep) class,
instead of the main type (e.g. Kernel_base::Point_2 instead
of Kernel::Point_2). This is a minor optimization which prevents
useless copies of the "reps".
Those functors are only those used in the constructors of the kernel
types like Point_2, so it's limited.
The real solution will be to use "forwarding constructors", when they
will be available in C++.
In the mean time, this should be a mostly/hopefully internal hack.
"
Construct_point_2 functors be the Rep class (the base).
This avoids conversions Rep -> Point_2 -> Rep, hence
useless copies of objects.
The result_type of the functors does not change
(we therefore return a type which is only convertible
to result_type, but hopefully this is fine, and what standard
requirements on functors are anyway).
A real fix for this would require the language addition of
"forwarding constructors".
The additional dummy "int" specifies that the 2 points are
the lower-left and upper-right corner. This is more efficient
when one knows they are already in this configuration.
Same thing for Iso_cuboid_3, and the functors.
Use them in Cartesian_converter and Homogeneous_converter.