This removes the eating of the error in Archive::Child::getSize() when the characters
[oota-llvm.git] / include / llvm / Support / ErrorOr.h
index 46b619217753bcc8fe586fb3bd7ba77471ce0a1f..5021468b4da97bf19a1ef1172b415f536c885b78 100644 (file)
@@ -91,6 +91,7 @@ private:
   typedef typename std::remove_reference<T>::type &reference;
   typedef const typename std::remove_reference<T>::type &const_reference;
   typedef typename std::remove_reference<T>::type *pointer;
+  typedef const typename std::remove_reference<T>::type *const_pointer;
 
 public:
   template <class E>
@@ -183,10 +184,18 @@ public:
     return toPointer(getStorage());
   }
 
+  const_pointer operator ->() const {
+    return toPointer(getStorage());
+  }
+
   reference operator *() {
     return *getStorage();
   }
 
+  const_reference operator *() const {
+    return *getStorage();
+  }
+
 private:
   template <class OtherT>
   void copyConstruct(const ErrorOr<OtherT> &Other) {
@@ -246,10 +255,19 @@ private:
     return Val;
   }
 
+  const_pointer toPointer(const_pointer Val) const {
+    return Val;
+  }
+
   pointer toPointer(wrap *Val) {
     return &Val->get();
   }
 
+  const_pointer toPointer(const wrap *Val) const {
+    return &Val->get();
+  }
+
+
   storage_type *getStorage() {
     assert(!HasError && "Cannot get value when an error exists!");
     return reinterpret_cast<storage_type*>(TStorage.buffer);