From 2a8a32d6ad485772640de1532c71c451dbb3e3dd Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Fri, 19 Sep 2025 11:53:02 +0200 Subject: [PATCH] fix Prevent_deref `std::iterator_traits` requires that the iterator type defines all five nested types. I have also modified the implementation of ```c++ make_prevent_deref_range(Range) ``` --- STL_Extension/include/CGAL/iterator.h | 14 ++++++++------ Union_find/include/CGAL/Union_find.h | 3 +++ 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/STL_Extension/include/CGAL/iterator.h b/STL_Extension/include/CGAL/iterator.h index b93190ded73..8f8a2228b07 100644 --- a/STL_Extension/include/CGAL/iterator.h +++ b/STL_Extension/include/CGAL/iterator.h @@ -69,12 +69,6 @@ private: } }; -template -Iterator_range > make_prevent_deref_range(const Iterator_range& range) -{ - return Iterator_range >(make_prevent_deref(range.first), make_prevent_deref(range.second)); -} - template Prevent_deref make_prevent_deref(const I& i) { @@ -87,6 +81,14 @@ Iterator_range > make_prevent_deref_range(const I& begin, const return Iterator_range >(make_prevent_deref(begin), make_prevent_deref(end)); } +template +auto make_prevent_deref_range(const R& range) +{ + using std::begin; + using std::end; + return make_range(make_prevent_deref(begin(range)), make_prevent_deref(end(range))); +} + namespace cpp98 { template #include #include +#include namespace CGAL { @@ -39,6 +40,7 @@ public: typedef R_ reference; typedef P_ pointer; typedef std::forward_iterator_tag iterator_category; + typedef std::ptrdiff_t difference_type; UF_forward_iterator() : m_p(0) {} UF_forward_iterator(PTR_ p) : m_p(p) {} @@ -104,6 +106,7 @@ public: typedef T value_type; typedef T& reference; typedef const T& const_reference; + typedef std::forward_iterator_tag iterator_category; typedef internal::UF_forward_iterator< pointer, T, T&, T*> iterator; typedef iterator handle;