diff --git a/include/numeric b/include/numeric
index c201a5f..e520c8e 100644
--- a/include/numeric
+++ b/include/numeric
@@ -157,7 +157,7 @@
         {
             typename iterator_traits<_InputIterator>::value_type __t2(*__first);
             *__result = __t2 - __t1;
-            __t1 = __t2;
+            __t1 = _VSTD::move(__t2);
         }
     }
     return __result;
@@ -177,7 +177,7 @@
         {
             typename iterator_traits<_InputIterator>::value_type __t2(*__first);
             *__result = __binary_op(__t2, __t1);
-            __t1 = __t2;
+            __t1 = _VSTD::move(__t2);
         }
     }
     return __result;
diff --git a/test/numerics/numeric.ops/adjacent.difference/adjacent_difference.pass.cpp b/test/numerics/numeric.ops/adjacent.difference/adjacent_difference.pass.cpp
index 623371e..46741e1 100644
--- a/test/numerics/numeric.ops/adjacent.difference/adjacent_difference.pass.cpp
+++ b/test/numerics/numeric.ops/adjacent.difference/adjacent_difference.pass.cpp
@@ -38,6 +38,43 @@
         assert(ib[i] == ir[i]);
 }
 
+#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
+
+class Y;
+
+class X
+{
+    int i_;
+
+    X& operator=(const X&);
+public:
+    explicit X(int i) : i_(i) {}
+    X(const X& x) : i_(x.i_) {}
+    X& operator=(X&& x)
+    {
+        i_ = x.i_;
+        x.i_ = -1;
+        return *this;
+    }
+
+    friend X operator-(const X& x, const X& y) {return X(x.i_ - y.i_);}
+
+    friend class Y;
+};
+
+class Y
+{
+    int i_;
+
+    Y& operator=(const Y&);
+public:
+    explicit Y(int i) : i_(i) {}
+    Y(const Y& y) : i_(y.i_) {}
+    void operator=(const X& x) {i_ = x.i_;}
+};
+
+#endif
+
 int main()
 {
     test<input_iterator<const int*>, output_iterator<int*> >();
@@ -69,4 +106,10 @@
     test<const int*, bidirectional_iterator<int*> >();
     test<const int*, random_access_iterator<int*> >();
     test<const int*, int*>();
+
+#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
+    X x[3] = {X(1), X(2), X(3)};
+    Y y[3] = {Y(1), Y(2), Y(3)};
+    std::adjacent_difference(x, x+3, y);
+#endif
 }
diff --git a/test/numerics/numeric.ops/adjacent.difference/adjacent_difference_op.pass.cpp b/test/numerics/numeric.ops/adjacent.difference/adjacent_difference_op.pass.cpp
index a8fbfbe..fb0bbdc 100644
--- a/test/numerics/numeric.ops/adjacent.difference/adjacent_difference_op.pass.cpp
+++ b/test/numerics/numeric.ops/adjacent.difference/adjacent_difference_op.pass.cpp
@@ -40,6 +40,44 @@
         assert(ib[i] == ir[i]);
 }
 
+#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
+
+class Y;
+
+class X
+{
+    int i_;
+
+    X& operator=(const X&);
+public:
+    explicit X(int i) : i_(i) {}
+    X(const X& x) : i_(x.i_) {}
+    X& operator=(X&& x)
+    {
+        i_ = x.i_;
+        x.i_ = -1;
+        return *this;
+    }
+
+    friend X operator-(const X& x, const X& y) {return X(x.i_ - y.i_);}
+
+    friend class Y;
+};
+
+class Y
+{
+    int i_;
+
+    Y& operator=(const Y&);
+public:
+    explicit Y(int i) : i_(i) {}
+    Y(const Y& y) : i_(y.i_) {}
+    void operator=(const X& x) {i_ = x.i_;}
+};
+
+#endif
+
+
 int main()
 {
     test<input_iterator<const int*>, output_iterator<int*> >();
@@ -71,4 +109,10 @@
     test<const int*, bidirectional_iterator<int*> >();
     test<const int*, random_access_iterator<int*> >();
     test<const int*, int*>();
+
+#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
+    X x[3] = {X(1), X(2), X(3)};
+    Y y[3] = {Y(1), Y(2), Y(3)};
+    std::adjacent_difference(x, x+3, y, std::minus<X>());
+#endif
 }
