Use std::reference_wrapper instead of llvm::ReferenceStorage
authorSerge Guelton <sguelton@quarkslab.com>
Thu, 19 Jul 2018 09:24:34 +0000 (09:24 +0000)
committerSerge Guelton <sguelton@quarkslab.com>
Thu, 19 Jul 2018 09:24:34 +0000 (09:24 +0000)
Reviewed By: Bigcheese
Differential Revision: https://reviews.llvm.org/D49298

llvm-svn: 337444

llvm/include/llvm/Support/Error.h
llvm/include/llvm/Support/ErrorOr.h

index b026dae..3ea567b 100644 (file)
@@ -429,7 +429,7 @@ template <class T> class LLVM_NODISCARD Expected {
 
   static const bool isRef = std::is_reference<T>::value;
 
-  using wrap = ReferenceStorage<typename std::remove_reference<T>::type>;
+  using wrap = std::reference_wrapper<typename std::remove_reference<T>::type>;
 
   using error_type = std::unique_ptr<ErrorInfoBase>;
 
index fdf2d6c..e6ce764 100644 (file)
 
 namespace llvm {
 
-/// Stores a reference that can be changed.
-template <typename T>
-class ReferenceStorage {
-  T *Storage;
-
-public:
-  ReferenceStorage(T &Ref) : Storage(&Ref) {}
-
-  operator T &() const { return *Storage; }
-  T &get() const { return *Storage; }
-};
-
 /// Represents either an error or a value T.
 ///
 /// ErrorOr<T> is a pointer-like class that represents the result of an
@@ -71,7 +59,7 @@ class ErrorOr {
 
   static const bool isRef = std::is_reference<T>::value;
 
-  using wrap = ReferenceStorage<typename std::remove_reference<T>::type>;
+  using wrap = std::reference_wrapper<typename std::remove_reference<T>::type>;
 
 public:
   using storage_type = typename std::conditional<isRef, wrap, T>::type;