From 11497f33f4c51038732e9ecf6cefe05451301151 Mon Sep 17 00:00:00 2001
From: "Joachim Wuttke (h)" <j.wuttke@fz-juelich.de>
Date: Sun, 15 May 2022 14:31:52 +0200
Subject: [PATCH] OwningVector working with private inheritance

https://stackoverflow.com/questions/72247817
---
 Base/Types/OwningVector.h |  9 +++++----
 auto/Wrap/doxygenBase.i   | 11 +++++------
 2 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/Base/Types/OwningVector.h b/Base/Types/OwningVector.h
index 29bd5881720..4acf5c09868 100644
--- a/Base/Types/OwningVector.h
+++ b/Base/Types/OwningVector.h
@@ -20,7 +20,6 @@
 #ifndef BORNAGAIN_BASE_TYPES_OWNINGVECTOR_H
 #define BORNAGAIN_BASE_TYPES_OWNINGVECTOR_H
 
-#include <memory>
 #include <vector>
 
 //! A vector of unique pointers to objects that are cloneable.
@@ -61,14 +60,16 @@ public:
     void emplace_back(T* e) { super::emplace_back(e); }
 
     size_t size() const { return super::size(); }
+    bool empty() const { return super::empty(); }
     T* const& operator[](int i) const { return super::operator[](i); }
     T* const& at(int i) const { return super::at(i); }
     const T* back() const { return super::back(); }
 
-    class Iterator : public std::vector<T*>::iterator {};
+    using Iterator = typename super::iterator; // "typename" can be dropped under C++20
+    using ConstIterator = typename super::const_iterator;
 
-    Iterator begin() const { return super::begin(); }
-    Iterator end() const { return super::end(); }
+    ConstIterator begin() const { return super::begin(); }
+    ConstIterator end() const { return super::end(); }
     Iterator begin() { return super::begin(); }
     Iterator end() { return super::end(); }
 };
diff --git a/auto/Wrap/doxygenBase.i b/auto/Wrap/doxygenBase.i
index fffc234879e..4d1efcedef8 100644
--- a/auto/Wrap/doxygenBase.i
+++ b/auto/Wrap/doxygenBase.i
@@ -580,10 +580,6 @@ C++ includes: IPixel.h
 ";
 
 
-// File: classOwningVector_1_1Iterator.xml
-%feature("docstring") OwningVector::Iterator "";
-
-
 // File: classOwningVector.xml
 %feature("docstring") OwningVector "
 
@@ -611,16 +607,19 @@ C++ includes: OwningVector.h
 %feature("docstring")  OwningVector::size "size_t OwningVector< T >::size() const
 ";
 
+%feature("docstring")  OwningVector::empty "bool OwningVector< T >::empty() const
+";
+
 %feature("docstring")  OwningVector::at "T* const& OwningVector< T >::at(int i) const
 ";
 
 %feature("docstring")  OwningVector::back "const T* OwningVector< T >::back() const
 ";
 
-%feature("docstring")  OwningVector::begin "Iterator OwningVector< T >::begin() const
+%feature("docstring")  OwningVector::begin "ConstIterator OwningVector< T >::begin() const
 ";
 
-%feature("docstring")  OwningVector::end "Iterator OwningVector< T >::end() const
+%feature("docstring")  OwningVector::end "ConstIterator OwningVector< T >::end() const
 ";
 
 %feature("docstring")  OwningVector::begin "Iterator OwningVector< T >::begin()
-- 
GitLab