From 0e5d4ea55554872fe72e5d984b73fc21abc561fe Mon Sep 17 00:00:00 2001 From: Anatol Belski Date: Wed, 15 Nov 2017 12:33:35 +0100 Subject: Fix C++ compatibility for TSRM_TLS If a C++11 source is compiled, thread_local is preferred. Furthermore, at least GCC treats __thread vs. thread_local a different way and under certain circumstances would refuse to compile __thread is a C++11 source. This change is far behind in time, any up-to-date compiler supports C++11 and otherwise it won't take effect on lower versions. --- TSRM/TSRM.h | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/TSRM/TSRM.h b/TSRM/TSRM.h index 39d4bcc752..4ecee6311f 100644 --- a/TSRM/TSRM.h +++ b/TSRM/TSRM.h @@ -157,10 +157,14 @@ TSRM_API void tsrm_free_interpreter_context(void *context); TSRM_API void *tsrm_get_ls_cache(void); TSRM_API uint8_t tsrm_is_main_thread(void); -#ifdef TSRM_WIN32 -# define TSRM_TLS __declspec(thread) +#if defined(__cplusplus) && __cplusplus > 199711L +# define TSRM_TLS thread_local #else -# define TSRM_TLS __thread +# ifdef TSRM_WIN32 +# define TSRM_TLS __declspec(thread) +# else +# define TSRM_TLS __thread +# endif #endif #define TSRM_SHUFFLE_RSRC_ID(rsrc_id) ((rsrc_id)+1) -- cgit v1.2.1