aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2017-08-22 16:37:47 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2017-08-24 15:52:55 +0200
commit51d7278e19a0346f8c807ef6cb48eee8311b53d9 (patch)
treefe1138557e00708d3195d171a7115ff235e261cb
parent3357540007244e1c696c91a1cceb95ceabd7efb5 (diff)
Work around issue with exporting internal linkage names in libstdc++
See Clang bug 33910 for details.
-rw-r--r--std-core.mxx22
1 files changed, 22 insertions, 0 deletions
diff --git a/std-core.mxx b/std-core.mxx
index 6ee4a9e..3aba712 100644
--- a/std-core.mxx
+++ b/std-core.mxx
@@ -2,6 +2,28 @@
// copyright : Copyright (c) 2014-2017 Code Synthesis Ltd
// license : MIT; see accompanying LICENSE file
+// For some standard library implementations we need to pre-include certain
+// headers to prevent their exporting. And to detect a standard library we
+// need to include a certain header first.
+//
+#if defined(__clang__)
+# if __has_include(<__config>) // libc++ _LIBCPP_VERSION
+# include <__config>
+# elif __has_include(<bits/c++config.h>) // libstdc++ __GLIBCXX__
+# include <bits/c++config.h>
+# endif
+#elif defined(__GNUC__)
+# include <bits/c++config.h> // libstdc++ __GLIBCXX__
+#endif
+
+#if defined(_MSC_VER)
+#elif defined(__GLIBCXX__)
+# include <ext/atomicity.h> // Names with internal linkage.
+#elif defined(_LIBCPP_VERSION)
+#else
+# error unknown standard library implementation
+#endif
+
export module std.core;
export