Target objective-c++ workaround at non-apple gcc only. Fix to make it
work with gcc 4.3 and earlier.
diff --git a/asio/include/asio/detail/pop_options.hpp b/asio/include/asio/detail/pop_options.hpp
index 5fffc64..8b4e16f 100644
--- a/asio/include/asio/detail/pop_options.hpp
+++ b/asio/include/asio/detail/pop_options.hpp
@@ -31,9 +31,15 @@
 #  pragma pack (pop)
 # endif
 
-# if defined(__OBJC__)
-#  pragma pop_macro("Protocol")
-#  pragma pop_macro("id")
+# if defined(__OBJC__) && !defined(__APPLE_CC__)
+#  if (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) || (__GNUC__ > 4)
+#   pragma pop_macro("Protocol")
+#   pragma pop_macro("id")
+#  elif defined(ASIO_OBJC_WORKAROUND)
+#   undef Protocol
+#   undef id
+#   undef ASIO_OBJC_WORKAROUND
+#  endif
 # endif
 
 #elif defined(__KCC)
diff --git a/asio/include/asio/detail/push_options.hpp b/asio/include/asio/detail/push_options.hpp
index 1721841..9b52215 100644
--- a/asio/include/asio/detail/push_options.hpp
+++ b/asio/include/asio/detail/push_options.hpp
@@ -31,11 +31,17 @@
 #  pragma pack (push, 8)
 # endif
 
-# if defined(__OBJC__)
-#  pragma push_macro("Protocol")
-#  define Protocol cpp_Protocol
-#  pragma push_macro("id")
-#  define id cpp_id
+# if defined(__OBJC__) && !defined(__APPLE_CC__)
+#  if (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) || (__GNUC__ > 4)
+#   pragma push_macro("Protocol")
+#   define Protocol cpp_Protocol
+#   pragma push_macro("id")
+#   define id cpp_id
+#  elif !defined(Protocol) && !defined(id)
+#   define Protocol cpp_Protocol
+#   define id cpp_id
+#   define ASIO_OBJC_WORKAROUND
+#  endif
 # endif
 
 #elif defined(__KCC)