[libcxx] r206829 - Default the copy and move constructors for __tuple_leaf. This fixes bugs 18853 and 19118. Add a test case for that.

Marshall Clow mclow.lists at gmail.com
Mon Apr 21 16:48:09 PDT 2014


Author: marshall
Date: Mon Apr 21 18:48:09 2014
New Revision: 206829

URL: http://llvm.org/viewvc/llvm-project?rev=206829&view=rev
Log:
Default the copy and move constructors for __tuple_leaf. This fixes bugs 18853 and 19118. Add a test case for that.

Added:
    libcxx/trunk/test/utilities/tuple/tuple.tuple/TupleFunction.pass.cpp
Modified:
    libcxx/trunk/include/tuple

Modified: libcxx/trunk/include/tuple
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/tuple?rev=206829&r1=206828&r2=206829&view=diff
==============================================================================
--- libcxx/trunk/include/tuple (original)
+++ libcxx/trunk/include/tuple Mon Apr 21 18:48:09 2014
@@ -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

Added: libcxx/trunk/test/utilities/tuple/tuple.tuple/TupleFunction.pass.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/utilities/tuple/tuple.tuple/TupleFunction.pass.cpp?rev=206829&view=auto
==============================================================================
--- libcxx/trunk/test/utilities/tuple/tuple.tuple/TupleFunction.pass.cpp (added)
+++ libcxx/trunk/test/utilities/tuple/tuple.tuple/TupleFunction.pass.cpp Mon Apr 21 18:48:09 2014
@@ -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





More information about the cfe-commits mailing list