Jelajahi Sumber

cm::enum_set: fix various bugs

Marc Chevrier 3 tahun lalu
induk
melakukan
02c067dee5
2 mengubah file dengan 17 tambahan dan 5 penghapusan
  1. 9 0
      Tests/CMakeLib/testCMExtEnumSet.cxx
  2. 8 5
      Utilities/std/cmext/enum_set

+ 9 - 0
Tests/CMakeLib/testCMExtEnumSet.cxx

@@ -191,6 +191,15 @@ void testEdition()
       ++failed;
     }
   }
+  {
+    cm::enum_set<Test> testSet1;
+    cm::enum_set<Test> testSet2{ Test::A, Test::C, Test::B };
+
+    testSet1 = { Test::A, Test::C, Test::B };
+    if (testSet1.size() != 3 || testSet1 != testSet2) {
+      ++failed;
+    }
+  }
 }
 }
 

+ 8 - 5
Utilities/std/cmext/enum_set

@@ -146,6 +146,7 @@ public:
   {
     this->Set.reset();
     this->insert(list);
+    return *this;
   }
 
   // Iterators
@@ -298,17 +299,15 @@ public:
   {
     if (this->contains(e)) {
       return iterator(this, static_cast<size_type>(e));
-    } else {
-      return this->end();
     }
+    return this->end();
   }
   const_iterator find(key_type e) const
   {
     if (this->contains(e)) {
       return const_iterator(this, static_cast<size_type>(e));
-    } else {
-      return this->end();
     }
+    return this->end();
   }
 
   bool contains(key_type e) const
@@ -317,6 +316,10 @@ public:
   }
 
 private:
+  template <typename E>
+  friend inline bool operator==(const enum_set<E>& lhs,
+                                const enum_set<E>& rhs) noexcept;
+
   template <typename E, typename Predicate>
   friend inline void erase_if(enum_set<E>& set, Predicate pred);
 
@@ -369,7 +372,7 @@ template <typename Enum>
 inline bool operator==(const enum_set<Enum>& lhs,
                        const enum_set<Enum>& rhs) noexcept
 {
-  return lhs == rhs;
+  return lhs.Set == rhs.Set;
 }
 
 template <typename Enum>