Revert "[Support][ErrorOr] Add support for convertable types."
authorAndrew Trick <atrick@apple.com>
Tue, 5 Feb 2013 22:50:20 +0000 (22:50 +0000)
committerAndrew Trick <atrick@apple.com>
Tue, 5 Feb 2013 22:50:20 +0000 (22:50 +0000)
This reverts commit a33e1fafac7fedb1b080ef07ddf9ad6ddff3a830.

This unit test crashes on Darwon. It needs to be temporarily reverted
to unblock the test infrastructure.

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

include/llvm/Support/ErrorOr.h
unittests/Support/ErrorOrTest.cpp

index c22c3ca84ff6ce683943f6762532b51fdf6d33dc..828d77b852e4091dd45fa8f22a4a87ff641ca94f 100644 (file)
@@ -162,7 +162,6 @@ public:
 /// T cannot be a rvalue reference.
 template<class T>
 class ErrorOr {
-  template <class OtherT> friend class ErrorOr;
   static const bool isRef = is_reference<T>::value;
   typedef ReferenceStorage<typename remove_reference<T>::type> wrap;
 
@@ -199,8 +198,7 @@ public:
     new (get()) storage_type(moveIfMoveConstructible<storage_type>(Val));
   }
 
-  template <class OtherT>
-  ErrorOr(ErrorOr<OtherT> &Other) : IsValid(false) {
+  ErrorOr(const ErrorOr &Other) : IsValid(false) {
     // Construct an invalid ErrorOr if other is invalid.
     if (!Other.IsValid)
       return;
@@ -228,8 +226,7 @@ public:
   }
 
 #if LLVM_HAS_RVALUE_REFERENCES
-  template <class OtherT>
-  ErrorOr(ErrorOr<OtherT> &&Other) : IsValid(false) {
+  ErrorOr(ErrorOr &&Other) : IsValid(false) {
     // Construct an invalid ErrorOr if other is invalid.
     if (!Other.IsValid)
       return;
@@ -311,6 +308,7 @@ private:
     return &Val->get();
   }
 
+protected:
   storage_type *get() {
     assert(IsValid && "Can't do anything on a default constructed ErrorOr!");
     assert(!HasError && "Cannot get value when an error exists!");
index 6cef4fc212f3d3eb6f3566d99906382f411433dd..a8608860b84be7dba49513eb08955366022d5c78 100644 (file)
@@ -53,17 +53,6 @@ TEST(ErrorOr, Types) {
   EXPECT_EQ(3, **t3());
 #endif
 }
-
-struct B {};
-struct D : B {};
-
-TEST(ErrorOr, Covariant) {
-  ErrorOr<B*> b(ErrorOr<D*>(0));
-
-#if LLVM_HAS_CXX11_STDLIB
-  ErrorOr<std::unique_ptr<B> > b1(ErrorOr<std::unique_ptr<D> >(0));
-#endif
-}
 } // end anon namespace
 
 struct InvalidArgError {