diff --git a/test/cpp/src/EnumClassTest.cpp b/test/cpp/src/EnumClassTest.cpp
new file mode 100644
index 0000000..3b21063
--- /dev/null
+++ b/test/cpp/src/EnumClassTest.cpp
@@ -0,0 +1,92 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Test file to verify that pure_enums=enum_class generated code compiles and works correctly.
+ * This exercises the enum_class option using ThriftTest types.
+ */
+
+#include <iostream>
+#include <cassert>
+#include <type_traits>
+
+// Include generated thrift types with enum_class option
+#include "ThriftTest_types.h"
+
+using namespace thrift::test;
+
+int main() {
+    std::cout << "Testing pure_enums=enum_class with ThriftTest types..." << std::endl;
+    
+    // Compile-time verification that Numberz is an enum class
+    static_assert(std::is_enum<Numberz>::value, "Numberz should be an enum type");
+    // enum class doesn't implicitly convert to int, which is a key characteristic
+    static_assert(!std::is_convertible<Numberz, int>::value, 
+                  "Numberz should be enum class (not implicitly convertible to int)");
+    std::cout << "  ✓ Compile-time verification: Numberz is enum class" << std::endl;
+    
+    // Test 1: Verify enum class can be used with scoped names
+    {
+        Numberz num = Numberz::ONE;
+        assert(static_cast<int>(num) == 1);
+        std::cout << "  ✓ Enum class scoped access works (Numberz::ONE)" << std::endl;
+    }
+    
+    // Test 2: Verify different enum values
+    {
+        Numberz two = Numberz::TWO;
+        Numberz five = Numberz::FIVE;
+        assert(static_cast<int>(two) == 2);
+        assert(static_cast<int>(five) == 5);
+        std::cout << "  ✓ Multiple enum class values work" << std::endl;
+    }
+    
+    // Test 3: Verify enum class comparison
+    {
+        Numberz a = Numberz::THREE;
+        Numberz b = Numberz::THREE;
+        Numberz c = Numberz::FIVE;
+        assert(a == b);
+        assert(a != c);
+        std::cout << "  ✓ Enum class comparison works" << std::endl;
+    }
+    
+    // Test 4: Verify enum class in switch statement
+    {
+        Numberz num = Numberz::EIGHT;
+        bool found = false;
+        switch(num) {
+            case Numberz::ONE:
+                break;
+            case Numberz::TWO:
+                break;
+            case Numberz::EIGHT:
+                found = true;
+                break;
+            default:
+                break;
+        }
+        assert(found);
+        std::cout << "  ✓ Enum class in switch statements works" << std::endl;
+    }
+    
+    std::cout << "\n✅ All pure_enums=enum_class tests passed!" << std::endl;
+    std::cout << "   Verified at compile-time: enum class properties enforced" << std::endl;
+    return 0;
+}
