From 33939ee86d4678787d4047575b115e9b518b2ae3 Mon Sep 17 00:00:00 2001
From: Bhuvan Bezawada <bhuvan_777@outlook.com>
Date: Wed, 15 Aug 2018 15:36:52 +0100
Subject: [PATCH] Made copy/move constructors private

re #23145
---
 .../MantidGeometry/Instrument/DetectorInfoItem.h    | 12 ++++++------
 .../Instrument/DetectorInfoPythonIterator.h         | 13 ++++++++-----
 .../geometry/src/Exports/DetectorInfoItem.cpp       |  2 +-
 .../src/Exports/DetectorInfoPythonIterator.cpp      |  2 +-
 4 files changed, 16 insertions(+), 13 deletions(-)

diff --git a/Framework/Geometry/inc/MantidGeometry/Instrument/DetectorInfoItem.h b/Framework/Geometry/inc/MantidGeometry/Instrument/DetectorInfoItem.h
index 1d20c6140ca..d094dfba2ce 100644
--- a/Framework/Geometry/inc/MantidGeometry/Instrument/DetectorInfoItem.h
+++ b/Framework/Geometry/inc/MantidGeometry/Instrument/DetectorInfoItem.h
@@ -51,12 +51,6 @@ Code Documentation is available at: <http://doxygen.mantidproject.org>
 class MANTID_GEOMETRY_DLL DetectorInfoItem {
 
 public:
-  // Provide copy and move constructors
-  DetectorInfoItem(const DetectorInfoItem &other) = default;
-  DetectorInfoItem &operator=(const DetectorInfoItem &rhs) = default;
-  DetectorInfoItem(DetectorInfoItem &&other) = default;
-  DetectorInfoItem &operator=(DetectorInfoItem &&rhs) = default;
-
   // Methods that can be accessed via the iterator
   bool isMonitor() const { return m_detectorInfo->isMonitor(m_index); }
 
@@ -83,6 +77,12 @@ private:
   DetectorInfoItem(const DetectorInfo &detectorInfo, const size_t index)
       : m_detectorInfo(&detectorInfo), m_index(index) {}
 
+  // Provide copy and move constructors
+  DetectorInfoItem(const DetectorInfoItem &other) = default;
+  DetectorInfoItem &operator=(const DetectorInfoItem &rhs) = default;
+  DetectorInfoItem(DetectorInfoItem &&other) = default;
+  DetectorInfoItem &operator=(DetectorInfoItem &&rhs) = default;
+
   // Non-owning pointer. A reference makes the class unable to define an
   // assignment operator that we need.
   const DetectorInfo *m_detectorInfo;
diff --git a/Framework/Geometry/inc/MantidGeometry/Instrument/DetectorInfoPythonIterator.h b/Framework/Geometry/inc/MantidGeometry/Instrument/DetectorInfoPythonIterator.h
index 4d7e884c9d5..136a8374692 100644
--- a/Framework/Geometry/inc/MantidGeometry/Instrument/DetectorInfoPythonIterator.h
+++ b/Framework/Geometry/inc/MantidGeometry/Instrument/DetectorInfoPythonIterator.h
@@ -55,20 +55,23 @@ class DetectorInfoPythonIterator {
 public:
   explicit DetectorInfoPythonIterator(const DetectorInfo &detectorInfo)
       : m_begin(detectorInfo.begin()), m_end(detectorInfo.end()),
-        m_current(*m_begin) {}
+        m_firstOrDone(true) {}
 
   const DetectorInfoItem &next() {
-    if (m_begin == m_end) {
+    if (!m_firstOrDone) {
+      ++m_begin;
+    } else {
+      m_firstOrDone = false;
       objects::stop_iteration_error();
     }
-    m_current = *m_begin++;
-    return m_current;
+
+    return *m_begin;
   }
 
 private:
   DetectorInfoIterator m_begin;
   DetectorInfoIterator m_end;
-  DetectorInfoItem m_current;
+  bool m_firstOrDone;
 };
 
 } // namespace Geometry
diff --git a/Framework/PythonInterface/mantid/geometry/src/Exports/DetectorInfoItem.cpp b/Framework/PythonInterface/mantid/geometry/src/Exports/DetectorInfoItem.cpp
index 567fab39109..7ec273568bd 100644
--- a/Framework/PythonInterface/mantid/geometry/src/Exports/DetectorInfoItem.cpp
+++ b/Framework/PythonInterface/mantid/geometry/src/Exports/DetectorInfoItem.cpp
@@ -12,7 +12,7 @@ using namespace boost::python;
 void export_DetectorInfoItem() {
 
   // Export to Python
-  class_<DetectorInfoItem>("DetectorInfoItem", no_init)
+  class_<DetectorInfoItem, boost::noncopyable>("DetectorInfoItem", no_init)
       .add_property("isMonitor", &DetectorInfoItem::isMonitor)
       .add_property("isMasked", &DetectorInfoItem::isMasked)
       .add_property("twoTheta", &DetectorInfoItem::twoTheta)
diff --git a/Framework/PythonInterface/mantid/geometry/src/Exports/DetectorInfoPythonIterator.cpp b/Framework/PythonInterface/mantid/geometry/src/Exports/DetectorInfoPythonIterator.cpp
index 6968fba9c54..41240c58a84 100644
--- a/Framework/PythonInterface/mantid/geometry/src/Exports/DetectorInfoPythonIterator.cpp
+++ b/Framework/PythonInterface/mantid/geometry/src/Exports/DetectorInfoPythonIterator.cpp
@@ -22,5 +22,5 @@ void export_DetectorInfoPythonIterator() {
 #endif
           ,
           &DetectorInfoPythonIterator::next,
-          return_value_policy<copy_const_reference>());
+          return_value_policy<reference_existing_object>());
 }
-- 
GitLab