Two Windows-specific fixes for protobuf.

Undefine Windows `FAR` macro in protobuf headers and specify explicit pointer return types in `ArenaPtrCmpBase::Unpack`.

On Windows, `<windef.h>` defines `FAR` as an empty macro, which collides with generated C++ protobuf enum values and identifiers named `FAR`. Push and undefine `FAR` in os_macros_undef.inc and restore it in os_macros_restore.inc alongside `NEAR`.

Additionally, specify `T*` instead of deduced `auto` on the `PROTOBUF_NULLABLE` / `PROTOBUF_NONNULL` `ArenaPtrCmpBase::Unpack` overloads in arena.h to avoid a Clang Microsoft C++ ABI name-mangler segfault when mangling dependent trailing-return-type `operator==` instantiations on Windows.

PiperOrigin-RevId: 999805821
diff --git a/src/google/protobuf/arena.h b/src/google/protobuf/arena.h
index 7e0833a..6ba0309 100644
--- a/src/google/protobuf/arena.h
+++ b/src/google/protobuf/arena.h
@@ -866,13 +866,12 @@
   }
 
   template <typename T>
-  static auto PROTOBUF_NULLABLE
-  Unpack(const typename Arena::UniquePtr<T>& ptr) {
+  static T* PROTOBUF_NULLABLE Unpack(const typename Arena::UniquePtr<T>& ptr) {
     return ptr.get();
   }
 
   template <typename T>
-  static auto PROTOBUF_NONNULL
+  static T* PROTOBUF_NONNULL
   Unpack(const typename Arena::template Ptr<T>& ptr) {
     return ptr.get();
   }
diff --git a/src/google/protobuf/os_macros_restore.inc b/src/google/protobuf/os_macros_restore.inc
index 4d1e3e1..631174c 100644
--- a/src/google/protobuf/os_macros_restore.inc
+++ b/src/google/protobuf/os_macros_restore.inc
@@ -47,6 +47,7 @@
 #pragma pop_macro("ERROR_NOT_FOUND")
 #pragma pop_macro("ERROR_RETRY")
 #pragma pop_macro("ERROR_TIMEOUT")
+#pragma pop_macro("FAR")
 #pragma pop_macro("GetClassName")
 #pragma pop_macro("GetCurrentTime")
 #pragma pop_macro("GetMessage")
diff --git a/src/google/protobuf/os_macros_undef.inc b/src/google/protobuf/os_macros_undef.inc
index 985f62a..8d961ae 100644
--- a/src/google/protobuf/os_macros_undef.inc
+++ b/src/google/protobuf/os_macros_undef.inc
@@ -73,6 +73,8 @@
 #undef ERROR_RETRY
 #pragma push_macro("ERROR_TIMEOUT")
 #undef ERROR_TIMEOUT
+#pragma push_macro("FAR")
+#undef FAR
 #pragma push_macro("GetClassName")
 #undef GetClassName
 #pragma push_macro("GetCurrentTime")