fix Prevent_deref<Union_find::iterator>

`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)
```
This commit is contained in:
Laurent Rineau 2025-09-19 11:53:02 +02:00
parent 0b2ebbc23e
commit 2a8a32d6ad
2 changed files with 11 additions and 6 deletions

View File

@ -69,12 +69,6 @@ private:
} }
}; };
template<typename I>
Iterator_range<Prevent_deref<I> > make_prevent_deref_range(const Iterator_range<I>& range)
{
return Iterator_range<Prevent_deref<I> >(make_prevent_deref(range.first), make_prevent_deref(range.second));
}
template<typename I> template<typename I>
Prevent_deref<I> make_prevent_deref(const I& i) Prevent_deref<I> make_prevent_deref(const I& i)
{ {
@ -87,6 +81,14 @@ Iterator_range<Prevent_deref<I> > make_prevent_deref_range(const I& begin, const
return Iterator_range<Prevent_deref<I> >(make_prevent_deref(begin), make_prevent_deref(end)); return Iterator_range<Prevent_deref<I> >(make_prevent_deref(begin), make_prevent_deref(end));
} }
template<typename R>
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 { namespace cpp98 {
template<typename Category, typename Tp, typename Distance = std::ptrdiff_t, template<typename Category, typename Tp, typename Distance = std::ptrdiff_t,

View File

@ -22,6 +22,7 @@
#include <CGAL/basic.h> #include <CGAL/basic.h>
#include <CGAL/memory.h> #include <CGAL/memory.h>
#include <cstddef> #include <cstddef>
#include <iterator>
namespace CGAL { namespace CGAL {
@ -39,6 +40,7 @@ public:
typedef R_ reference; typedef R_ reference;
typedef P_ pointer; typedef P_ pointer;
typedef std::forward_iterator_tag iterator_category; typedef std::forward_iterator_tag iterator_category;
typedef std::ptrdiff_t difference_type;
UF_forward_iterator() : m_p(0) {} UF_forward_iterator() : m_p(0) {}
UF_forward_iterator(PTR_ p) : m_p(p) {} UF_forward_iterator(PTR_ p) : m_p(p) {}
@ -104,6 +106,7 @@ public:
typedef T value_type; typedef T value_type;
typedef T& reference; typedef T& reference;
typedef const T& const_reference; typedef const T& const_reference;
typedef std::forward_iterator_tag iterator_category;
typedef internal::UF_forward_iterator< pointer, T, T&, T*> iterator; typedef internal::UF_forward_iterator< pointer, T, T&, T*> iterator;
typedef iterator handle; typedef iterator handle;