diff options
Diffstat (limited to 'libcxx')
-rw-r--r-- | libcxx/include/tuple | 13 | ||||
-rw-r--r-- | libcxx/test/utilities/tuple/tuple.tuple/TupleFunction.pass.cpp | 35 |
2 files changed, 37 insertions, 11 deletions
diff --git a/libcxx/include/tuple b/libcxx/include/tuple index 3a1752ee19c..27a5a461654 100644 --- a/libcxx/include/tuple +++ b/libcxx/include/tuple @@ -268,17 +268,8 @@ public: >::value)), "Attempted to construct a reference element in a tuple with an rvalue");} - _LIBCPP_INLINE_VISIBILITY - _LIBCPP_CONSTEXPR_AFTER_CXX11 - __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())) - {} + __tuple_leaf(const __tuple_leaf& __t) = default; + __tuple_leaf(__tuple_leaf&& __t) = default; template <class _Tp> _LIBCPP_INLINE_VISIBILITY diff --git a/libcxx/test/utilities/tuple/tuple.tuple/TupleFunction.pass.cpp b/libcxx/test/utilities/tuple/tuple.tuple/TupleFunction.pass.cpp new file mode 100644 index 00000000000..df5fdff511e --- /dev/null +++ b/libcxx/test/utilities/tuple/tuple.tuple/TupleFunction.pass.cpp @@ -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 |