Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Merge branch 'master' of https://framagit.org/simgrid/simgrid
[simgrid.git] / src / xbt / utils / iter / powerset.hpp
index 11879a4ea5069485a32f3da2f70dcbf05f66a5df..68e0970d7c816f1353ccad369109f89bd788024f 100644 (file)
@@ -30,10 +30,6 @@ template <class Iterator>
 struct powerset_iterator : public boost::iterator_facade<powerset_iterator<Iterator>, const std::vector<Iterator>,
                                                          boost::forward_traversal_tag> {
   powerset_iterator()                                                                 = default;
-  powerset_iterator(powerset_iterator<Iterator>&) noexcept                            = default;
-  powerset_iterator(powerset_iterator<Iterator>&&) noexcept                           = default;
-  powerset_iterator<Iterator>& operator=(powerset_iterator<Iterator>&&) noexcept      = default;
-  powerset_iterator<Iterator>& operator=(const powerset_iterator<Iterator>&) noexcept = default;
   explicit powerset_iterator(Iterator begin, Iterator end = Iterator());
 
 private:
@@ -44,8 +40,6 @@ private:
   std::optional<subsets_iterator<Iterator>> current_subset_iter     = std::nullopt;
   std::optional<subsets_iterator<Iterator>> current_subset_iter_end = std::nullopt;
 
-  const std::vector<Iterator> empty_subset = std::vector<Iterator>();
-
   // boost::iterator_facade<...> interface to implement
   void increment();
   bool equal(const powerset_iterator<Iterator>& other) const;
@@ -74,13 +68,14 @@ template <typename Iterator> const std::vector<Iterator>& powerset_iterator<Iter
   if (current_subset_iter.has_value()) {
     return *current_subset_iter.value();
   }
+  static const std::vector<Iterator> empty_subset;
   return empty_subset;
 }
 
 template <typename Iterator> void powerset_iterator<Iterator>::increment()
 {
-  if (!current_subset_iter.has_value() || !current_subset_iter_end.has_value() || !current_subset_iter.has_value() ||
-      !iterator_end.has_value()) {
+  if (not current_subset_iter.has_value() || not current_subset_iter_end.has_value() ||
+      not current_subset_iter.has_value() || not iterator_end.has_value()) {
     return; // We've traversed all subsets at this point, or we're the "last" iterator
   }