Fix for PR 19616: 'tuple_cat of nested tuples fails in noexcept specification'. Thanks to Louis Dionne for the fix.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@219243 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -76,15 +76,28 @@ struct C
|
||||
void operator=(C&); // not const
|
||||
};
|
||||
|
||||
#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
||||
struct Tuple {
|
||||
Tuple(Empty&&) noexcept {}
|
||||
};
|
||||
#endif
|
||||
|
||||
int main()
|
||||
{
|
||||
test_is_nothrow_constructible<int> ();
|
||||
test_is_nothrow_constructible<int, const int&> ();
|
||||
test_is_nothrow_constructible<Empty> ();
|
||||
test_is_nothrow_constructible<Empty, const Empty&> ();
|
||||
|
||||
#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
||||
test_is_nothrow_constructible<Tuple &&, Empty> (); // See bug #19616.
|
||||
#endif
|
||||
|
||||
test_is_not_nothrow_constructible<A, int> ();
|
||||
test_is_not_nothrow_constructible<A, int, double> ();
|
||||
test_is_not_nothrow_constructible<A> ();
|
||||
test_is_not_nothrow_constructible<C> ();
|
||||
#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
||||
static_assert(!std::is_constructible<Tuple&, Empty>::value, "");
|
||||
test_is_not_nothrow_constructible<Tuple &, Empty> (); // See bug #19616.
|
||||
#endif
|
||||
}
|
||||
|
@@ -213,4 +213,18 @@ int main()
|
||||
assert(std::get<3>(t3) == 4);
|
||||
assert(std::get<4>(t3) == 5);
|
||||
}
|
||||
{
|
||||
// See bug #19616.
|
||||
auto t1 = std::tuple_cat(
|
||||
std::make_tuple(std::make_tuple(1)),
|
||||
std::make_tuple()
|
||||
);
|
||||
assert(t1 == std::make_tuple(std::make_tuple(1)));
|
||||
|
||||
auto t2 = std::tuple_cat(
|
||||
std::make_tuple(std::make_tuple(1)),
|
||||
std::make_tuple(std::make_tuple(2))
|
||||
);
|
||||
assert(t2 == std::make_tuple(std::make_tuple(1), std::make_tuple(2)));
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user