-#ifdef URCU_DEREFERENCE_USE_VOLATILE
-# define __rcu_dereference(p) CMM_LOAD_SHARED(p)
-#else
-# if defined (__cplusplus)
-# if __cplusplus >= 201103L
-# include <atomic>
-# define __rcu_dereference(p) ((std::atomic<__typeof__(p)>)(p)).load(std::memory_order_consume)
-# else
-# define __rcu_dereference(p) CMM_LOAD_SHARED(x)
-# endif
-# else
-# if (defined (__STDC_VERSION__) && __STDC_VERSION__ >= 201112L)
-# include <stdatomic.h>
-# define __rcu_dereference(p) atomic_load_explicit(&(p), memory_order_consume)
-# else
-# define __rcu_dereference(p) CMM_LOAD_SHARED(p)
-# endif
-# endif
+#if !defined (URCU_DEREFERENCE_USE_VOLATILE) && \
+ ((defined (__cplusplus) && __cplusplus >= 201103L) || \
+ (defined (__STDC_VERSION__) && __STDC_VERSION__ >= 201112L))
+# define __URCU_DEREFERENCE_USE_ATOMIC_CONSUME