## cpp: add `private_optional` support (and wire up tests/CI)

Add a new `cpp:private_optional` generator option for C++ that emits optional fields as private members and provides const getters, enabling stricter encapsulation while preserving access for generated helpers.

To keep the feature stable and exercised in automation, add fixture-based compiler tests and the minimal build/CI wiring required for those tests to build and run in the workflow (including MSVC).

 ### Example generated code (behavior change only, from `TestStruct`)

 #### Default (no `cpp:private_optional`): optional fields stay public
```cpp
public:
  int32_t required_field;
  int32_t optional_field;
  std::string optional_string;
```

With cpp:private_optional: optional fields become private + const getters

```cpp
public:
  int32_t required_field;

  const int32_t& __get_optional_field() const { return optional_field; }
  const std::string& __get_optional_string() const { return optional_string; }

private:
  int32_t optional_field;
  std::string optional_string;

  friend void swap(TestStruct &a, TestStruct &b) noexcept;
  friend std::ostream& operator<<(std::ostream& out, const TestStruct& obj);

```
diff --git a/compiler/cpp/tests/tests_main.cc b/compiler/cpp/tests/tests_main.cc
index 21d09b9..16cba7e 100644
--- a/compiler/cpp/tests/tests_main.cc
+++ b/compiler/cpp/tests/tests_main.cc
@@ -15,5 +15,15 @@
 // specific language governing permissions and limitations
 // under the License.
 
-#define CATCH_CONFIG_MAIN
+#define CATCH_CONFIG_NO_POSIX_SIGNALS
+#define CATCH_CONFIG_RUNNER
 #include "catch/catch.hpp"
+
+#include "thrift/common.h"
+
+int main(int argc, char* argv[]) {
+	initGlobals();
+	int result = Catch::Session().run(argc, argv);
+	clearGlobals();
+	return result;
+}