]> sourceware.org Git - libabigail.git/commitdiff
optional: minor improvements
authorGiuliano Procida <gprocida@google.com>
Mon, 13 Jun 2022 14:25:31 +0000 (15:25 +0100)
committerDodji Seketeli <dodji@redhat.com>
Thu, 30 Jun 2022 16:30:58 +0000 (18:30 +0200)
This change makes minor improvements to the optional class used with
pre-C++17 compilers.

- adds operator== and operator!=
- adds various missing noexcept (but not constexpr) decorations
- defines operator bool in terms of has_value

Note that some constexpr decorations would require C++17 anyway.

* include/abg-cxx-compat.h (optional): Add operator== and
operator!=. Add noexcept decorations. Tweak operator bool.

Reviewed-by: Matthias Maennich <maennich@google.com>
Signed-off-by: Giuliano Procida <gprocida@google.com>
include/abg-cxx-compat.h

index 77418944769f27ce83274b3e5e15934c40195907..b557922025618a82c6715a2b3bbbe965902c79e3 100644 (file)
@@ -45,7 +45,7 @@ public:
   optional(const T& value) : has_value_(true), value_(value) {}
 
   bool
-  has_value() const
+  has_value() const noexcept
   {
     return has_value_;
   }
@@ -67,19 +67,19 @@ public:
   }
 
   const T&
-  operator*() const
+  operator*() const& noexcept
   { return value_; }
 
   T&
-  operator*()
+  operator*() & noexcept
   { return value_; }
 
   const T*
-  operator->() const
+  operator->() const noexcept
   { return &value_; }
 
   T*
-  operator->()
+  operator->() noexcept
   { return &value_; }
 
   optional&
@@ -90,9 +90,27 @@ public:
     return *this;
   }
 
-  explicit operator bool() const { return has_value_; }
+  explicit operator bool() const noexcept { return has_value(); }
 };
 
+template <typename T, typename U>
+bool
+operator==(const optional<T>& lhs, const optional<U>& rhs)
+{
+  if (!lhs.has_value() && !rhs.has_value())
+    return true;
+  if (!lhs.has_value() || !rhs.has_value())
+    return false;
+  return lhs.value() == rhs.value();
+}
+
+template <typename T, typename U>
+bool
+operator!=(const optional<T>& lhs, const optional<U>& rhs)
+{
+  return !(lhs == rhs);
+}
+
 #endif
 }
 
This page took 0.035123 seconds and 5 git commands to generate.