From fc11aff9559da4725037c21f7a4732f5f009d975 Mon Sep 17 00:00:00 2001 From: Yuri Kunde Schlesner Date: Sun, 11 Jan 2015 13:32:31 -0200 Subject: Common: Fix SCOPE_EXIT to actually create unique identifiers. --- src/common/common_funcs.h | 4 ++++ src/common/scope_exit.h | 4 +++- 2 files changed, 7 insertions(+), 1 deletion(-) (limited to 'src/common') diff --git a/src/common/common_funcs.h b/src/common/common_funcs.h index c2750a63..229eb74c 100644 --- a/src/common/common_funcs.h +++ b/src/common/common_funcs.h @@ -31,6 +31,10 @@ template<> struct CompileTimeAssert {}; #define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0])) +/// Textually concatenates two tokens. The double-expansion is required by the C preprocessor. +#define CONCAT2(x, y) DO_CONCAT2(x, y) +#define DO_CONCAT2(x, y) x ## y + #ifndef _MSC_VER #include diff --git a/src/common/scope_exit.h b/src/common/scope_exit.h index 263beaf0..77dcbaa2 100644 --- a/src/common/scope_exit.h +++ b/src/common/scope_exit.h @@ -4,6 +4,8 @@ #pragma once +#include "common/common_funcs.h" + namespace detail { template struct ScopeExitHelper { @@ -34,4 +36,4 @@ namespace detail { * } * \endcode */ -#define SCOPE_EXIT(body) auto scope_exit_helper_##__LINE__ = detail::ScopeExit([&]() body) +#define SCOPE_EXIT(body) auto CONCAT2(scope_exit_helper_, __LINE__) = detail::ScopeExit([&]() body) -- cgit v1.2.3