diff -r 4accc35cbfcf Include/pyatomic.h
--- a/Include/pyatomic.h Tue Mar 17 10:49:17 2015 +0100
+++ b/Include/pyatomic.h Tue Mar 17 12:10:27 2015 +0100
@@ -6,13 +6,16 @@
#include "pyconfig.h"
+#if defined(HAVE_STD_ATOMIC) && defined(__cplusplus)
+# include
+#elif defined(HAVE_STD_ATOMIC)
+# include
+#endif
+
#ifdef __cplusplus
extern "C" {
#endif
-#if defined(HAVE_STD_ATOMIC)
-#include
-#endif
/* This is modeled after the atomics interface from C1x, according to
* the draft at
@@ -23,7 +26,32 @@ extern "C" {
* Beware, the implementations here are deep magic.
*/
-#if defined(HAVE_STD_ATOMIC)
+/* Use C++ */
+#if defined(HAVE_STD_ATOMIC) && defined(__cplusplus)
+
+#define _Py_memory_order_relaxed std::memory_order_relaxed
+#define _Py_memory_order_acquire std::memory_order_acquire
+#define _Py_memory_order_release std::memory_order_release
+#define _Py_memory_order_acq_rel std::memory_order_acq_rel
+#define _Py_memory_order_seq_cst std::memory_order_seq_cst
+
+typedef std::atomic _Py_atomic_address;
+typedef std::atomic _Py_atomic_int;
+
+#define _Py_atomic_signal_fence(/*memory_order*/ ORDER) \
+ std::atomic_signal_fence(ORDER)
+
+#define _Py_atomic_thread_fence(/*memory_order*/ ORDER) \
+ std::atomic_thread_fence(ORDER)
+
+#define _Py_atomic_store_explicit(ATOMIC_VAL, NEW_VAL, ORDER) \
+ std::atomic_store_explicit(ATOMIC_VAL, NEW_VAL, ORDER)
+
+#define _Py_atomic_load_explicit(ATOMIC_VAL, ORDER) \
+ std::atomic_load_explicit(ATOMIC_VAL, ORDER)
+
+/* Use */
+#elif defined(HAVE_STD_ATOMIC)
typedef enum _Py_memory_order {
_Py_memory_order_relaxed = memory_order_relaxed,