Default the copy and move constructors for __tuple_leaf. This fixes bugs 18853 and 19118. Add a test case for that.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@206829 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
067e91d29e
commit
398c9d882b
@ -268,17 +268,8 @@ public:
|
|||||||
>::value)),
|
>::value)),
|
||||||
"Attempted to construct a reference element in a tuple with an rvalue");}
|
"Attempted to construct a reference element in a tuple with an rvalue");}
|
||||||
|
|
||||||
_LIBCPP_INLINE_VISIBILITY
|
__tuple_leaf(const __tuple_leaf& __t) = default;
|
||||||
_LIBCPP_CONSTEXPR_AFTER_CXX11
|
__tuple_leaf(__tuple_leaf&& __t) = default;
|
||||||
__tuple_leaf(const __tuple_leaf& __t) _NOEXCEPT_(is_nothrow_copy_constructible<_Hp>::value)
|
|
||||||
: value(__t.get())
|
|
||||||
{static_assert(!is_rvalue_reference<_Hp>::value, "Can not copy a tuple with rvalue reference member");}
|
|
||||||
|
|
||||||
_LIBCPP_INLINE_VISIBILITY
|
|
||||||
_LIBCPP_CONSTEXPR_AFTER_CXX11
|
|
||||||
__tuple_leaf(__tuple_leaf&& __t) _NOEXCEPT_(is_nothrow_move_constructible<_Hp>::value)
|
|
||||||
: value(_VSTD::forward<_Hp>(__t.get()))
|
|
||||||
{}
|
|
||||||
|
|
||||||
template <class _Tp>
|
template <class _Tp>
|
||||||
_LIBCPP_INLINE_VISIBILITY
|
_LIBCPP_INLINE_VISIBILITY
|
||||||
|
35
test/utilities/tuple/tuple.tuple/TupleFunction.pass.cpp
Normal file
35
test/utilities/tuple/tuple.tuple/TupleFunction.pass.cpp
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
//===----------------------------------------------------------------------===//
|
||||||
|
//
|
||||||
|
// The LLVM Compiler Infrastructure
|
||||||
|
//
|
||||||
|
// This file is dual licensed under the MIT and the University of Illinois Open
|
||||||
|
// Source Licenses. See LICENSE.TXT for details.
|
||||||
|
//
|
||||||
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
|
// This is for bugs 18853 and 19118
|
||||||
|
|
||||||
|
#if __cplusplus >= 201103L
|
||||||
|
|
||||||
|
#include <tuple>
|
||||||
|
#include <functional>
|
||||||
|
|
||||||
|
struct X
|
||||||
|
{
|
||||||
|
X() {}
|
||||||
|
|
||||||
|
template <class T>
|
||||||
|
X(T);
|
||||||
|
|
||||||
|
void operator()() {}
|
||||||
|
};
|
||||||
|
|
||||||
|
int
|
||||||
|
main()
|
||||||
|
{
|
||||||
|
X x;
|
||||||
|
std::function<void()> f(x);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
int main () {}
|
||||||
|
#endif
|
Loading…
x
Reference in New Issue
Block a user