summaryrefslogtreecommitdiffstats
path: root/googletest
diff options
context:
space:
mode:
authorAbseil Team <absl-team@google.com>2020-11-12 16:12:19 (GMT)
committerMark Barolak <mbar@google.com>2020-11-12 18:32:33 (GMT)
commita1adec799a3252016dabce83f8effcebc51b8050 (patch)
treecfbc0066227136d6c1c2cc9b186e9d6096578dfb /googletest
parente7ed50fd137dd7626bbb21dfc41982454dcff69b (diff)
downloadgoogletest-a1adec799a3252016dabce83f8effcebc51b8050.zip
googletest-a1adec799a3252016dabce83f8effcebc51b8050.tar.gz
googletest-a1adec799a3252016dabce83f8effcebc51b8050.tar.bz2
Googletest export
Use a tagged constructor for FlatTuple instead. Some versions of MSVC are getting confused with that constructor and generating invalid code. PiperOrigin-RevId: 342050957
Diffstat (limited to 'googletest')
-rw-r--r--googletest/include/gtest/internal/gtest-internal.h11
-rw-r--r--googletest/include/gtest/internal/gtest-param-util.h2
-rw-r--r--googletest/test/gtest_unittest.cc14
3 files changed, 14 insertions, 13 deletions
diff --git a/googletest/include/gtest/internal/gtest-internal.h b/googletest/include/gtest/internal/gtest-internal.h
index f00d78f..8dc74bb 100644
--- a/googletest/include/gtest/internal/gtest-internal.h
+++ b/googletest/include/gtest/internal/gtest-internal.h
@@ -1285,14 +1285,9 @@ class FlatTuple
public:
FlatTuple() = default;
- template <typename... Args,
- typename = typename std::enable_if<
- !std::is_same<void(FlatTuple), void(typename std::decay<
- Args>::type...)>::value &&
- (sizeof...(T) >= 1)>::type>
- explicit FlatTuple(Args&&... args)
- : FlatTuple::FlatTupleBase(FlatTupleConstructTag{},
- std::forward<Args>(args)...) {}
+ template <typename... Args>
+ explicit FlatTuple(FlatTupleConstructTag tag, Args&&... args)
+ : FlatTuple::FlatTupleBase(tag, std::forward<Args>(args)...) {}
using FlatTuple::FlatTupleBase::Apply;
using FlatTuple::FlatTupleBase::Get;
diff --git a/googletest/include/gtest/internal/gtest-param-util.h b/googletest/include/gtest/internal/gtest-param-util.h
index 05696a5..d12bd55 100644
--- a/googletest/include/gtest/internal/gtest-param-util.h
+++ b/googletest/include/gtest/internal/gtest-param-util.h
@@ -791,7 +791,7 @@ namespace internal {
template <typename... Ts>
class ValueArray {
public:
- explicit ValueArray(Ts... v) : v_(std::move(v)...) {}
+ explicit ValueArray(Ts... v) : v_(FlatTupleConstructTag{}, std::move(v)...) {}
template <typename T>
operator ParamGenerator<T>() const { // NOLINT
diff --git a/googletest/test/gtest_unittest.cc b/googletest/test/gtest_unittest.cc
index d08f917..ac0f179 100644
--- a/googletest/test/gtest_unittest.cc
+++ b/googletest/test/gtest_unittest.cc
@@ -7555,7 +7555,8 @@ TEST(FlatTuple, Basic) {
EXPECT_EQ(0.0, tuple.Get<1>());
EXPECT_EQ(nullptr, tuple.Get<2>());
- tuple = FlatTuple<int, double, const char*>(7, 3.2, "Foo");
+ tuple = FlatTuple<int, double, const char*>(
+ testing::internal::FlatTupleConstructTag{}, 7, 3.2, "Foo");
EXPECT_EQ(7, tuple.Get<0>());
EXPECT_EQ(3.2, tuple.Get<1>());
EXPECT_EQ(std::string("Foo"), tuple.Get<2>());
@@ -7573,7 +7574,8 @@ std::string AddIntToString(int i, const std::string& s) {
TEST(FlatTuple, Apply) {
using testing::internal::FlatTuple;
- FlatTuple<int, std::string> tuple{5, "Hello"};
+ FlatTuple<int, std::string> tuple{testing::internal::FlatTupleConstructTag{},
+ 5, "Hello"};
// Lambda.
EXPECT_TRUE(tuple.Apply([](int i, const std::string& s) -> bool {
@@ -7647,7 +7649,8 @@ TEST(FlatTuple, ConstructorCalls) {
ConstructionCounting::Reset();
{
ConstructionCounting elem;
- FlatTuple<ConstructionCounting> tuple{elem};
+ FlatTuple<ConstructionCounting> tuple{
+ testing::internal::FlatTupleConstructTag{}, elem};
}
EXPECT_EQ(ConstructionCounting::default_ctor_calls, 1);
EXPECT_EQ(ConstructionCounting::dtor_calls, 2);
@@ -7658,7 +7661,10 @@ TEST(FlatTuple, ConstructorCalls) {
// Move construction.
ConstructionCounting::Reset();
- { FlatTuple<ConstructionCounting> tuple{ConstructionCounting{}}; }
+ {
+ FlatTuple<ConstructionCounting> tuple{
+ testing::internal::FlatTupleConstructTag{}, ConstructionCounting{}};
+ }
EXPECT_EQ(ConstructionCounting::default_ctor_calls, 1);
EXPECT_EQ(ConstructionCounting::dtor_calls, 2);
EXPECT_EQ(ConstructionCounting::copy_ctor_calls, 0);