]> granicus.if.org Git - llvm/commitdiff
Revert "Disallow ArrayRef assignment from temporaries."
authorZachary Turner <zturner@google.com>
Mon, 10 Oct 2016 21:36:23 +0000 (21:36 +0000)
committerZachary Turner <zturner@google.com>
Mon, 10 Oct 2016 21:36:23 +0000 (21:36 +0000)
This reverts commit r283798, as it causes static asserts on
MSVC 2015 with the following errors:

ArrayRefTest.cpp(38): error C2338: Assigning from single prvalue element
ArrayRefTest.cpp(41): error C2338: Assigning from single xvalue element
ArrayRefTest.cpp(47): error C2338: Assigning from an initializer list

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@283803 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/ADT/ArrayRef.h
unittests/ADT/ArrayRefTest.cpp

index 3efc09ddd36f500a59428e53f3d5e2cab07b5a9e..c1d66c699035144e740c15095c4dbfb6375ca3b0 100644 (file)
@@ -219,22 +219,6 @@ namespace llvm {
       return Data[Index];
     }
 
-    /// Disallow accidental assignment from a temporary.
-    ///
-    /// The declaration here is extra complicated so that "arrayRef = {}"
-    /// continues to select the move assignment operator.
-    template <typename U>
-    typename std::enable_if<std::is_same<U, T>::value, ArrayRef<T>>::type &
-    operator=(U &&Temporary) = delete;
-
-    /// Disallow accidental assignment from a temporary.
-    ///
-    /// The declaration here is extra complicated so that "arrayRef = {}"
-    /// continues to select the move assignment operator.
-    template <typename U>
-    typename std::enable_if<std::is_same<U, T>::value, ArrayRef<T>>::type &
-    operator=(std::initializer_list<U>) = delete;
-
     /// @}
     /// @name Expensive Operations
     /// @{
index f046da8a833182bba6815d45b2dbab939571a6cb..43e5005e62d8e1dbfb050fde38795e202e52485f 100644 (file)
@@ -31,21 +31,6 @@ static_assert(
     !std::is_convertible<ArrayRef<volatile int *>, ArrayRef<int *>>::value,
     "Removing volatile");
 
-// Check that we can't accidentally assign a temporary location to an ArrayRef.
-// (Unfortunately we can't make use of the same thing with constructors.)
-static_assert(
-    !std::is_assignable<ArrayRef<int *>, int *>::value,
-    "Assigning from single prvalue element");
-static_assert(
-    !std::is_assignable<ArrayRef<int *>, int * &&>::value,
-    "Assigning from single xvalue element");
-static_assert(
-    std::is_assignable<ArrayRef<int *>, int * &>::value,
-    "Assigning from single lvalue element");
-static_assert(
-    !std::is_assignable<ArrayRef<int *>, std::initializer_list<int *>>::value,
-    "Assigning from an initializer list");
-
 namespace {
 
 TEST(ArrayRefTest, AllocatorCopy) {
@@ -176,14 +161,6 @@ TEST(ArrayRefTest, InitializerList) {
   ArgTest12({1, 2});
 }
 
-TEST(ArrayRefTest, EmptyInitializerList) {
-  ArrayRef<int> A = {};
-  EXPECT_TRUE(A.empty());
-
-  A = {};
-  EXPECT_TRUE(A.empty());
-}
-
 // Test that makeArrayRef works on ArrayRef (no-op)
 TEST(ArrayRefTest, makeArrayRef) {
   static const int A1[] = {1, 2, 3, 4, 5, 6, 7, 8};