Corrected some bugs in both memory and the tests.  Preparing for being able to turn on support for alias templates.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@131199 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/include/memory b/include/memory
index f91262d..d9dda72 100644
--- a/include/memory
+++ b/include/memory
@@ -794,7 +794,7 @@
     typedef typename __pointer_traits_difference_type<pointer>::type difference_type;
 
 #ifndef _LIBCPP_HAS_NO_TEMPLATE_ALIASES
-    template <class _Up> using rebind = __pointer_traits_rebind<pointer, _Up>::type;
+    template <class _Up> using rebind = typename __pointer_traits_rebind<pointer, _Up>::type;
 #else
     template <class _Up> struct rebind
         {typedef typename __pointer_traits_rebind<pointer, _Up>::type other;};
@@ -1331,7 +1331,7 @@
 
 #ifndef _LIBCPP_HAS_NO_TEMPLATE_ALIASES
     template <class _Tp> using rebind_alloc =
-                           __allocator_traits_rebind<allocator_type, _Tp>::type;
+                  typename __allocator_traits_rebind<allocator_type, _Tp>::type;
     template <class _Tp> using rebind_traits = allocator_traits<rebind_alloc<_Tp>>;
 #else  // _LIBCPP_HAS_NO_TEMPLATE_ALIASES
     template <class _Tp> struct rebind_alloc
@@ -3338,7 +3338,7 @@
 shared_ptr<_Tp>&
 shared_ptr<_Tp>::operator=(auto_ptr<_Yp>&& __r)
 {
-    shared_ptr(__r).swap(*this);
+    shared_ptr(_STD::move(__r)).swap(*this);
     return *this;
 }
 
diff --git a/test/utilities/memory/default.allocator/allocator.members/construct.pass.cpp b/test/utilities/memory/default.allocator/allocator.members/construct.pass.cpp
index 6b2d546..7e1500b 100644
--- a/test/utilities/memory/default.allocator/allocator.members/construct.pass.cpp
+++ b/test/utilities/memory/default.allocator/allocator.members/construct.pass.cpp
@@ -64,7 +64,7 @@
 
 #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
     move_only(move_only&&) {++move_only_constructed;}
-    move_only& operator=(move_only&&) {}
+    move_only& operator=(move_only&&) {return *this;}
 #else  // _LIBCPP_HAS_NO_RVALUE_REFERENCES
     operator std::__rv<move_only> () {return std::__rv<move_only>(*this);}
     move_only(std::__rv<move_only>) {++move_only_constructed;}
diff --git a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.assign/auto_ptr_Y.pass.cpp b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.assign/auto_ptr_Y.pass.cpp
index 1f54e6e..21cdf4a 100644
--- a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.assign/auto_ptr_Y.pass.cpp
+++ b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.assign/auto_ptr_Y.pass.cpp
@@ -47,7 +47,7 @@
         A* ptrA = pA.get();
         {
             std::shared_ptr<B> pB(new B);
-            pB = pA;
+            pB = std::move(pA);
             assert(B::count == 1);
             assert(A::count == 1);
             assert(pB.use_count() == 1);
@@ -64,7 +64,7 @@
         A* ptrA = pA.get();
         {
             std::shared_ptr<B> pB(new B);
-            pB = pA;
+            pB = std::move(pA);
             assert(B::count == 0);
             assert(A::count == 0);
             assert(pB.use_count() == 1);
@@ -81,7 +81,7 @@
         A* ptrA = pA.get();
         {
             std::shared_ptr<B> pB;
-            pB = pA;
+            pB = std::move(pA);
             assert(B::count == 1);
             assert(A::count == 1);
             assert(pB.use_count() == 1);
@@ -98,7 +98,7 @@
         A* ptrA = pA.get();
         {
             std::shared_ptr<B> pB;
-            pB = pA;
+            pB = std::move(pA);
             assert(B::count == 0);
             assert(A::count == 0);
             assert(pB.use_count() == 1);