Fix gcc 5.2 compilation when _GLIBCXX_USE_CXX11_ABI is not 0
authorYaacov Akiba Slama <ya@slamail.org>
Thu, 22 Oct 2015 05:30:22 +0000 (22:30 -0700)
committerfacebook-github-bot-9 <folly-bot@fb.com>
Thu, 22 Oct 2015 06:20:20 +0000 (23:20 -0700)
Summary: Tested in debian stretch when used in hhvm which can now run drupal 7.
The compilation error is also fixed by #214 but this fix maintains
 forward declarations of basic_string and list.
Closes https://github.com/facebook/folly/pull/329

Reviewed By: yfeldblum

Differential Revision: D2533880

fb-gh-sync-id: 85e18eeeba9efa1b4150217ba526b32b5573e15e

folly/Portability.h
folly/Traits.h

index ca8c28a34b0e792e81fe8704a0ea1bd657789774..c059a3cb34d2831883f21f472c0f1f1c52401836 100644 (file)
@@ -208,6 +208,16 @@ namespace std { typedef ::max_align_t max_align_t; }
 #define FOLLY_NAMESPACE_STD_END       }
 #endif
 
+// If the new c++ ABI is used, __cxx11 inline namespace needs to be added to
+// some types, e.g. std::list.
+#if _GLIBCXX_USE_CXX11_ABI
+# define FOLLY_GLIBCXX_NAMESPACE_CXX11_BEGIN _GLIBCXX_BEGIN_NAMESPACE_CXX11
+# define FOLLY_GLIBCXX_NAMESPACE_CXX11_END   _GLIBCXX_END_NAMESPACE_CXX11
+#else
+# define FOLLY_GLIBCXX_NAMESPACE_CXX11_BEGIN
+# define FOLLY_GLIBCXX_NAMESPACE_CXX11_END
+#endif
+
 // Some platforms lack clock_gettime(2) and clock_getres(2). Inject our own
 // versions of these into the global namespace.
 #if FOLLY_HAVE_CLOCK_GETTIME
index 9701aa1573cd42b31fc585c5594465d1de5e7ebb..caeb852c3b6f3d85949398331b3a00be9a5bb9e2 100644 (file)
@@ -240,8 +240,10 @@ FOLLY_NAMESPACE_STD_BEGIN
 template <class T, class U>
   struct pair;
 #ifndef _GLIBCXX_USE_FB
+FOLLY_GLIBCXX_NAMESPACE_CXX11_BEGIN
 template <class T, class R, class A>
   class basic_string;
+FOLLY_GLIBCXX_NAMESPACE_CXX11_END
 #else
 template <class T, class R, class A, class S>
   class basic_string;
@@ -250,8 +252,10 @@ template <class T, class A>
   class vector;
 template <class T, class A>
   class deque;
+FOLLY_GLIBCXX_NAMESPACE_CXX11_BEGIN
 template <class T, class A>
   class list;
+FOLLY_GLIBCXX_NAMESPACE_CXX11_END
 template <class T, class C, class A>
   class set;
 template <class K, class V, class C, class A>