From 797b0ad2a3a45608ecf5c67e6e289d377a3521ca Mon Sep 17 00:00:00 2001 From: Dino Radakovic Date: Fri, 28 Apr 2023 10:15:31 -0700 Subject: [PATCH] Use GTEST_INTERNAL_CPLUSPLUS_LANG instead of __cplusplus Some versions of MSVC provide incorrect values for the latter and rely on _MSVC_LANG instead. Fixes #4226. PiperOrigin-RevId: 527919195 Change-Id: Ifcca4612074f5ebc5337094426866a187f79f90a --- googlemock/test/gmock-actions_test.cc | 4 +++- googlemock/test/gmock-spec-builders_test.cc | 3 ++- googletest/include/gtest/internal/gtest-port.h | 17 +++++++++-------- 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/googlemock/test/gmock-actions_test.cc b/googlemock/test/gmock-actions_test.cc index f569e834..da1675c5 100644 --- a/googlemock/test/gmock-actions_test.cc +++ b/googlemock/test/gmock-actions_test.cc @@ -48,6 +48,7 @@ #include "gmock/internal/gmock-port.h" #include "gtest/gtest-spi.h" #include "gtest/gtest.h" +#include "gtest/internal/gtest-port.h" // Silence C4100 (unreferenced formal parameter) and C4503 (decorated name // length exceeded) for MSVC. @@ -221,7 +222,8 @@ TEST(TypeTraits, IsInvocableRV) { // In C++17 and above, where it's guaranteed that functions can return // non-moveable objects, everything should work fine for non-moveable rsult // types too. -#if defined(__cplusplus) && __cplusplus >= 201703L +#if defined(GTEST_INTERNAL_CPLUSPLUS_LANG) && \ + GTEST_INTERNAL_CPLUSPLUS_LANG >= 201703L { struct NonMoveable { NonMoveable() = default; diff --git a/googlemock/test/gmock-spec-builders_test.cc b/googlemock/test/gmock-spec-builders_test.cc index d07cb5cb..221de2d2 100644 --- a/googlemock/test/gmock-spec-builders_test.cc +++ b/googlemock/test/gmock-spec-builders_test.cc @@ -804,7 +804,8 @@ TEST(ExpectCallTest, InfersCardinality1WhenThereIsWillRepeatedly) { "to be called at least once"); } -#if defined(__cplusplus) && __cplusplus >= 201703L +#if defined(GTEST_INTERNAL_CPLUSPLUS_LANG) && \ + GTEST_INTERNAL_CPLUSPLUS_LANG >= 201703L // It should be possible to return a non-moveable type from a mock action in // C++17 and above, where it's guaranteed that such a type can be initialized diff --git a/googletest/include/gtest/internal/gtest-port.h b/googletest/include/gtest/internal/gtest-port.h index c6bc2d76..d71110c0 100644 --- a/googletest/include/gtest/internal/gtest-port.h +++ b/googletest/include/gtest/internal/gtest-port.h @@ -2398,7 +2398,7 @@ using Any = ::absl::any; } // namespace testing #else #ifdef __has_include -#if __has_include() && __cplusplus >= 201703L && \ +#if __has_include() && GTEST_INTERNAL_CPLUSPLUS_LANG >= 201703L && \ (!defined(_MSC_VER) || GTEST_HAS_RTTI) // Otherwise for C++17 and higher use std::any for UniversalPrinter<> // specializations. @@ -2411,7 +2411,7 @@ using Any = ::std::any; } // namespace testing // The case where absl is configured NOT to alias std::any is not // supported. -#endif // __has_include() && __cplusplus >= 201703L +#endif // __has_include() && GTEST_INTERNAL_CPLUSPLUS_LANG >= 201703L #endif // __has_include #endif // GTEST_HAS_ABSL @@ -2433,7 +2433,7 @@ inline ::absl::nullopt_t Nullopt() { return ::absl::nullopt; } } // namespace testing #else #ifdef __has_include -#if __has_include() && __cplusplus >= 201703L +#if __has_include() && GTEST_INTERNAL_CPLUSPLUS_LANG >= 201703L // Otherwise for C++17 and higher use std::optional for UniversalPrinter<> // specializations. #define GTEST_INTERNAL_HAS_OPTIONAL 1 @@ -2447,7 +2447,7 @@ inline ::std::nullopt_t Nullopt() { return ::std::nullopt; } } // namespace testing // The case where absl is configured NOT to alias std::optional is not // supported. -#endif // __has_include() && __cplusplus >= 201703L +#endif // __has_include() && GTEST_INTERNAL_CPLUSPLUS_LANG >= 201703L #endif // __has_include #endif // GTEST_HAS_ABSL @@ -2467,7 +2467,7 @@ using StringView = ::absl::string_view; } // namespace testing #else #ifdef __has_include -#if __has_include() && __cplusplus >= 201703L +#if __has_include() && GTEST_INTERNAL_CPLUSPLUS_LANG >= 201703L // Otherwise for C++17 and higher use std::string_view for Matcher<> // specializations. #define GTEST_INTERNAL_HAS_STRING_VIEW 1 @@ -2479,7 +2479,8 @@ using StringView = ::std::string_view; } // namespace testing // The case where absl is configured NOT to alias std::string_view is not // supported. -#endif // __has_include() && __cplusplus >= 201703L +#endif // __has_include() && GTEST_INTERNAL_CPLUSPLUS_LANG >= + // 201703L #endif // __has_include #endif // GTEST_HAS_ABSL @@ -2500,7 +2501,7 @@ using Variant = ::absl::variant; } // namespace testing #else #ifdef __has_include -#if __has_include() && __cplusplus >= 201703L +#if __has_include() && GTEST_INTERNAL_CPLUSPLUS_LANG >= 201703L // Otherwise for C++17 and higher use std::variant for UniversalPrinter<> // specializations. #define GTEST_INTERNAL_HAS_VARIANT 1 @@ -2512,7 +2513,7 @@ using Variant = ::std::variant; } // namespace internal } // namespace testing // The case where absl is configured NOT to alias std::variant is not supported. -#endif // __has_include() && __cplusplus >= 201703L +#endif // __has_include() && GTEST_INTERNAL_CPLUSPLUS_LANG >= 201703L #endif // __has_include #endif // GTEST_HAS_ABSL