aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorShahbaz Youssefi <syoussefi@google.com>2019-12-16 11:23:21 -0500
committerShahbaz Youssefi <syoussefi@google.com>2019-12-16 11:27:52 -0500
commitd2016469064bdb488ce271c84684518d2716fec2 (patch)
treeca634916ef74462e613d53bf940076a21363d1c0
parent5b162a79d49d044690f3eb7d87ecc3b98a3f2e25 (diff)
downloadgoogletest-d2016469064bdb488ce271c84684518d2716fec2.tar.gz
googletest-d2016469064bdb488ce271c84684518d2716fec2.tar.bz2
googletest-d2016469064bdb488ce271c84684518d2716fec2.zip
Workaround VS bug w.r.t empty arguments to macros
Empty arguments can be passed to macros per C99 and C++11 specs, which can then be forwarded to other macros. Visual Studio's compiler has a bug in the following situation: #define A(x) #x #define B(x, y) A(x) B(, b) In the above case, Visual Studio first expands x to nothing, then complains that A is not invoked with the right amount of arguments. However, x in A(x) is still one argument, even if it expands to no preprocessing tokens. See also https://stackoverflow.com/a/7674214.
-rw-r--r--googletest/include/gtest/internal/gtest-internal.h11
1 files changed, 10 insertions, 1 deletions
diff --git a/googletest/include/gtest/internal/gtest-internal.h b/googletest/include/gtest/internal/gtest-internal.h
index eac831a8..978728e3 100644
--- a/googletest/include/gtest/internal/gtest-internal.h
+++ b/googletest/include/gtest/internal/gtest-internal.h
@@ -79,7 +79,16 @@
#define GTEST_CONCAT_TOKEN_IMPL_(foo, bar) foo ## bar
// Stringifies its argument.
-#define GTEST_STRINGIFY_(name) #name
+// Work around a bug in visual studio which doesn't accept code like this:
+//
+// #define GTEST_STRINGIFY_(name) #name
+// #define MACRO(a, b, c) ... GTEST_STRINGIFY_(a) ...
+// MACRO(, x, y)
+//
+// Complaining about the argument to GTEST_STRINGIFY_ being empty.
+// This is allowed by the spec.
+#define GTEST_STRINGIFY_HELPER_(name, ...) #name
+#define GTEST_STRINGIFY_(...) GTEST_STRINGIFY_HELPER_(__VA_ARGS__,)
namespace proto2 { class Message; }