Handle libc++ usage of inline namespaces for std::
authorPeter Griess <pgriess@fb.com>
Tue, 10 Sep 2013 16:36:38 +0000 (11:36 -0500)
committerPeter Griess <pgriess@fb.com>
Tue, 15 Oct 2013 01:47:11 +0000 (18:47 -0700)
Summary:
- libc++ uses inline namespaces in its implementation of the std
namespace; use its macros for our forward-declaring needs.

@override-unit-failures
The hphp_packedtv test has been sitting postponed for a long time. I
can't repro its failure locally anyway.

Test Plan:
- fbconfig -r folly && fbmake runtests
- ./configure && make check on Ubuntu/FC/Mac

Reviewed By: simpkins@fb.com

FB internal diff: D998578

folly/Portability.h
folly/Traits.h

index 1095164f4474a85c7624b348f00d0ce1145e0900..9b77b5f5e985d0d7079868430e2901ac2465106a 100644 (file)
@@ -118,4 +118,15 @@ struct MaxAlign { char c; } __attribute__((aligned));
 # define FOLLY_DISABLE_ADDRESS_SANITIZER
 #endif
 
+// It turns out that GNU libstdc++ and LLVM libc++ differ on how they implement
+// the 'std' namespace; the latter uses inline namepsaces. Wrap this decision
+// up in a macro to make forward-declarations easier.
+#ifdef _LIBCPP_VERSION
+#define FOLLY_NAMESPACE_STD_BEGIN     _LIBCPP_BEGIN_NAMESPACE_STD
+#define FOLLY_NAMESPACE_STD_END       _LIBCPP_END_NAMESPACE_STD
+#else
+#define FOLLY_NAMESPACE_STD_BEGIN     namespace std {
+#define FOLLY_NAMESPACE_STD_END       }
+#endif
+
 #endif // FOLLY_PORTABILITY_H_
index 47092973cc8c5d7d911b2f16cd736ffc8ffe7870..f5fe5816cf0e2f456aa665788a2795ec289345a1 100644 (file)
@@ -23,6 +23,8 @@
 #include <limits>
 #include <type_traits>
 
+#include "folly/Portability.h"
+
 #include <bits/c++config.h>
 
 #include <boost/type_traits.hpp>
@@ -223,7 +225,7 @@ template <class T> struct IsZeroInitializable
  * although that is not guaranteed by the standard.
  */
 
-namespace std {
+FOLLY_NAMESPACE_STD_BEGIN
 
 template <class T, class U>
   struct pair;
@@ -247,7 +249,7 @@ template <class K, class V, class C, class A>
 template <class T>
   class shared_ptr;
 
-}
+FOLLY_NAMESPACE_STD_END
 
 namespace boost {