From 66c20ba18cbe576f689bd2e229db789728a03e7d Mon Sep 17 00:00:00 2001 From: Dmitry Anisimov Date: Tue, 3 Aug 2021 16:30:18 +0200 Subject: [PATCH] avoid decltype and put back correct types, also test for complience with std algorithms --- .../Filtered_kernel/Cartesian_coordinate_iterator_2.h | 6 ++++-- .../Filtered_kernel/Cartesian_coordinate_iterator_3.h | 6 ++++-- .../Filtered_kernel/test_cartesian_const_iterator.cpp | 9 +++++++++ 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/Filtered_kernel/include/CGAL/Filtered_kernel/Cartesian_coordinate_iterator_2.h b/Filtered_kernel/include/CGAL/Filtered_kernel/Cartesian_coordinate_iterator_2.h index d0155440d67..e2909ff4dd0 100644 --- a/Filtered_kernel/include/CGAL/Filtered_kernel/Cartesian_coordinate_iterator_2.h +++ b/Filtered_kernel/include/CGAL/Filtered_kernel/Cartesian_coordinate_iterator_2.h @@ -42,6 +42,8 @@ public: typedef std::random_access_iterator_tag iterator_category; typedef FT value_type; typedef int difference_type; + typedef void pointer; + typedef value_type reference; Cartesian_coordinate_iterator_2() : var((const P*) nullptr), index(0) {} @@ -53,7 +55,7 @@ public: : var(v), index(_index) {} - decltype(auto) + reference operator*() const { if (const P* const* p = boost::get(&var)) return (*p)->cartesian(index); @@ -118,7 +120,7 @@ public: return index - x.index; } - decltype(auto) + reference operator[](difference_type i) const { return *(*this + i); } diff --git a/Filtered_kernel/include/CGAL/Filtered_kernel/Cartesian_coordinate_iterator_3.h b/Filtered_kernel/include/CGAL/Filtered_kernel/Cartesian_coordinate_iterator_3.h index 5fd9829ae98..c5a16320dc0 100644 --- a/Filtered_kernel/include/CGAL/Filtered_kernel/Cartesian_coordinate_iterator_3.h +++ b/Filtered_kernel/include/CGAL/Filtered_kernel/Cartesian_coordinate_iterator_3.h @@ -42,6 +42,8 @@ public: typedef std::random_access_iterator_tag iterator_category; typedef FT value_type; typedef int difference_type; + typedef void pointer; + typedef value_type reference; Cartesian_coordinate_iterator_3() : var((const P*) nullptr), index(0) {} @@ -53,7 +55,7 @@ public: : var(v), index(_index) {} - decltype(auto) + reference operator*() const { if (const P* const* p = boost::get(&var)) return (*p)->cartesian(index); @@ -118,7 +120,7 @@ public: return index - x.index; } - decltype(auto) + reference operator[](difference_type i) const { return *(*this + i); } diff --git a/Filtered_kernel/test/Filtered_kernel/test_cartesian_const_iterator.cpp b/Filtered_kernel/test/Filtered_kernel/test_cartesian_const_iterator.cpp index 4fb93afb918..1535f255e3c 100644 --- a/Filtered_kernel/test/Filtered_kernel/test_cartesian_const_iterator.cpp +++ b/Filtered_kernel/test/Filtered_kernel/test_cartesian_const_iterator.cpp @@ -1,3 +1,4 @@ +#include #include #include #include @@ -23,6 +24,10 @@ int main() { const FT d2 = p2[0] - q2[0]; assert(d2 < FT(0)); + const auto plen2 = std::distance(construct_it_2(pp2), construct_it_2(pp2, 0)); + const auto qlen2 = std::distance(construct_it_2(qq2), construct_it_2(qq2, 0)); + assert(plen2 == 2 && qlen2 == 2); + // Testing 3D. Traits_3 traits_3; auto construct_it_3 = traits_3.construct_cartesian_const_iterator_d_object(); @@ -33,5 +38,9 @@ int main() { const FT d3 = q3[2] - p3[2]; assert(d3 > FT(0)); + const auto plen3 = std::distance(construct_it_3(pp3), construct_it_3(pp3, 0)); + const auto qlen3 = std::distance(construct_it_3(qq3), construct_it_3(qq3, 0)); + assert(plen3 == 3 && qlen3 == 3); + return EXIT_SUCCESS; }