summaryrefslogtreecommitdiffstats
path: root/googletest/test/gtest_unittest.cc
diff options
context:
space:
mode:
authorAbseil Team <absl-team@google.com>2023-06-27 18:14:33 (GMT)
committerCopybara-Service <copybara-worker@google.com>2023-06-27 18:17:00 (GMT)
commitf269e15c5cafa4ba7f4b543e0c395646bbbbd32d (patch)
tree5a477f55d220ade87076b3ae9fc8826a94017190 /googletest/test/gtest_unittest.cc
parent8e32de89cfe725dc9c084044b71e9c13246049c4 (diff)
downloadgoogletest-f269e15c5cafa4ba7f4b543e0c395646bbbbd32d.zip
googletest-f269e15c5cafa4ba7f4b543e0c395646bbbbd32d.tar.gz
googletest-f269e15c5cafa4ba7f4b543e0c395646bbbbd32d.tar.bz2
Resolve an issue where the resolution of `operator<<` overloads would attempt to instantiate the incomplete `testing::internal::Secret` type.
PiperOrigin-RevId: 543799815 Change-Id: Ic0a4f48d825bef26cb8cc74d8a0117b3a5ef3f14
Diffstat (limited to 'googletest/test/gtest_unittest.cc')
-rw-r--r--googletest/test/gtest_unittest.cc16
1 files changed, 16 insertions, 0 deletions
diff --git a/googletest/test/gtest_unittest.cc b/googletest/test/gtest_unittest.cc
index dd049a0..6caa03f 100644
--- a/googletest/test/gtest_unittest.cc
+++ b/googletest/test/gtest_unittest.cc
@@ -67,11 +67,27 @@ TEST(CommandLineFlagsTest, CanBeAccessedInCodeOnceGTestHIsIncluded) {
#include <string>
#include <type_traits>
#include <unordered_set>
+#include <utility>
#include <vector>
#include "gtest/gtest-spi.h"
#include "src/gtest-internal-inl.h"
+struct ConvertibleGlobalType {
+ // The inner enable_if is to ensure invoking is_constructible doesn't fail.
+ // The outer enable_if is to ensure the overload resolution doesn't encounter
+ // an ambiguity.
+ template <
+ class T,
+ std::enable_if_t<
+ false, std::enable_if_t<std::is_constructible<T>::value, int>> = 0>
+ operator T() const; // NOLINT(google-explicit-constructor)
+};
+void operator<<(ConvertibleGlobalType&, int);
+static_assert(sizeof(decltype(std::declval<ConvertibleGlobalType&>()
+ << 1)(*)()) > 0,
+ "error in operator<< overload resolution");
+
namespace testing {
namespace internal {