-
Notifications
You must be signed in to change notification settings - Fork 1.5k
Description
Issue Details
https://github.com/CGAL/cgal/blob/master/Filtered_kernel/include/CGAL/Lazy_kernel.h#L130
This should be 'true' when CGAL_NO_STATIC_FILTERS_FOR_LAZY_KERNEL is not defined but the fix is more complicated than that: EPECK's static filtered predicates are defined as EPICK's if static filters are used:
#define CGAL_Kernel_pred(P, Pf) \
typedef Static_filtered_predicate<Approximate_kernel, Filtered_predicate<typename Exact_kernel::P, typename Approximate_kernel::P, C2E, C2F>, Exact_predicates_inexact_constructions_kernel::P> P; \
P Pf() const { return P(); }and
https://github.com/CGAL/cgal/blob/master/Filtered_kernel/include/CGAL/Static_filtered_predicate.h
However, a typical call in Static_filtered_predicate is as follows:
template <typename A1>
result_type operator()(const A1& a1) const
{
CGAL::Epic_converter<AK> convert;
auto aa1 = convert(approx(a1));
if(! aa1.second){
return fp(a1);
}
return epicp(aa1.first);
}meaning, this assumes that the EPICK static filter and the EPECK filtered predicate have the same parameters, but this does not always stand because of for example https://github.com/CGAL/cgal/blob/master/AABB_tree/include/CGAL/AABB_traits_3.h#L407, which is a speed-up that passes a Boolean to the static filtered version of Do_intersect_3 (but the overload with a Boolean does not exist in the "standard version"), introduced in #5507.
This wasn't seen before because it was going into the branch "no static filters provided".