Googlemock has some tuples containing lvalue refs in its unit tests.

These tuples are created with make_tuple, which is given temporaries.
The make_tuple is in a function argument list.

A possibly overzealous static_assert in libc++'s std::tuple ctor
is firing in our 'Perform(make_tuple("hi"))' calls, so
we can't use its make_tuple here. Instead we will use
explicitly-constructed tuples constructed from non-temporary strings.

Workaround for llvm bug:
    https://llvm.org/bugs/show_bug.cgi?id=20855

An alternative to https://github.com/google/googletest/pull/580 .
This commit is contained in:
Billy Donahue
2015-09-07 22:32:56 -04:00
parent 99166db754
commit f19b060075
2 changed files with 9 additions and 5 deletions

View File

@@ -327,7 +327,9 @@ TEST(InvokeTest, FunctionThatTakes10Arguments) {
TEST(InvokeTest, FunctionWithUnusedParameters) {
Action<int(int, int, double, const string&)> a1 =
Invoke(SumOfFirst2);
EXPECT_EQ(12, a1.Perform(make_tuple(10, 2, 5.6, string("hi"))));
string s("hi");
EXPECT_EQ(12, a1.Perform(
tuple<int, int, double, const string&>(10, 2, 5.6, s)));
Action<int(int, int, bool, int*)> a2 =
Invoke(SumOfFirst2);
@@ -379,7 +381,8 @@ TEST(InvokeMethodTest, Binary) {
Foo foo;
Action<string(const string&, char)> a = Invoke(&foo, &Foo::Binary);
string s("Hell");
EXPECT_EQ("Hello", a.Perform(make_tuple(s, 'o')));
EXPECT_EQ("Hello", a.Perform(
tuple<const string&, char>(s, 'o')));
}
// Tests using Invoke() with a ternary method.