fix logic error
diff --git a/lib/cpp/src/thrift/Thrift.h b/lib/cpp/src/thrift/Thrift.h
index f3fe708..3a1c5cc 100644
--- a/lib/cpp/src/thrift/Thrift.h
+++ b/lib/cpp/src/thrift/Thrift.h
@@ -59,11 +59,15 @@
   int operator++() { return ++ii_; }
 
   bool operator==(const TEnumIterator& rhs) const {
-    return ii_ == rhs.ii_ && n_ == rhs.n_;
+    bool is_end = ii_ == n_ || n_ == -1;
+    bool is_rhs_end = rhs.ii_ == rhs.n_ || rhs.n_ == -1;
+    return (ii_ == rhs.ii_ && n_ == rhs.n_) || (is_end && is_rhs_end);
   }
 
   bool operator!=(const TEnumIterator& rhs) const {
-    return ii_ != rhs.ii_ || n_ != rhs.n_;
+    bool is_end = ii_ == n_ || n_ == -1;
+    bool is_rhs_end = rhs.ii_ == rhs.n_ || rhs.n_ == -1;
+    return (ii_ != rhs.ii_ || n_ != rhs.n_) && (!is_end || !is_rhs_end);
   }
 
   std::pair<int, const char*> operator*() const { return std::make_pair(enums_[ii_], names_[ii_]); }