diff options
author | Yuri Kunde Schlesner <yuriks@yuriks.net> | 2015-02-05 14:53:25 -0200 |
---|---|---|
committer | Yuri Kunde Schlesner <yuriks@yuriks.net> | 2015-03-01 21:47:13 -0300 |
commit | cd1fbfcf1b70e365d81480ec0f56db19ed02454f (patch) | |
tree | b220b105d1b8016bb258047683bf2d03795c8881 /src/common/thread.h | |
parent | c1d29ac20240ad92a49b84409b92ed1d326720a9 (diff) |
Add profiling infrastructure and widget
Diffstat (limited to 'src/common/thread.h')
-rw-r--r-- | src/common/thread.h | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/src/common/thread.h b/src/common/thread.h index eaf1ba00c..a45728e1e 100644 --- a/src/common/thread.h +++ b/src/common/thread.h @@ -24,6 +24,25 @@ #include <unistd.h> #endif +// Support for C++11's thread_local keyword was surprisingly spotty in compilers until very +// recently. Fortunately, thread local variables have been well supported for compilers for a while, +// but with semantics supporting only POD types, so we can use a few defines to get some amount of +// backwards compat support. +// WARNING: This only works correctly with POD types. +#if defined(__clang__) +# if !__has_feature(cxx_thread_local) +# define thread_local __thread +# endif +#elif defined(__GNUC__) +# if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8) +# define thread_local __thread +# endif +#elif defined(_MSC_VER) +# if _MSC_VER < 1900 +# define thread_local __declspec(thread) +# endif +#endif + namespace Common { |