Просмотр исходного кода

Common: Fix SCOPE_EXIT to actually create unique identifiers.

Yuri Kunde Schlesner 11 лет назад
Родитель
Сommit
fc11aff955
2 измененных файлов с 7 добавлено и 1 удалено
  1. 4 0
      src/common/common_funcs.h
  2. 3 1
      src/common/scope_exit.h

+ 4 - 0
src/common/common_funcs.h

@@ -31,6 +31,10 @@ template<> struct CompileTimeAssert<true> {};
 
 #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 <errno.h>

+ 3 - 1
src/common/scope_exit.h

@@ -4,6 +4,8 @@
 
 #pragma once
 
+#include "common/common_funcs.h"
+
 namespace detail {
     template <typename Func>
     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)