diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 5e124c46c4..f2b64b9e4d 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2017-04-04 Pedro Alves + + * common/gdb_optional.h (gdb::optiona): Add operator->, operator*, + operator bool, has_value and get methods. + 2017-04-04 Pedro Alves * dwarf2read.c (struct file_entry): Add ctors, and initialize all diff --git a/gdb/common/gdb_optional.h b/gdb/common/gdb_optional.h index d991da123c..fef7a73e02 100644 --- a/gdb/common/gdb_optional.h +++ b/gdb/common/gdb_optional.h @@ -61,6 +61,31 @@ public: m_instantiated = true; } + /* Observers. */ + constexpr const T *operator-> () const + { return std::addressof (this->get ()); } + + T *operator-> () + { return std::addressof (this->get ()); } + + constexpr const T &operator* () const & + { return this->get (); } + + T &operator* () & + { return this->get (); } + + T &&operator* () && + { return std::move (this->get ()); } + + constexpr const T &&operator* () const && + { return std::move (this->get ()); } + + constexpr explicit operator bool () const noexcept + { return m_instantiated; } + + constexpr bool has_value () const noexcept + { return m_instantiated; } + private: /* Destroy the object. */ @@ -71,6 +96,10 @@ private: m_item.~T (); } + /* The get operations have m_instantiated as a precondition. */ + T &get () noexcept { return m_item; } + constexpr const T &get () const noexcept { return m_item; } + /* The object. */ union {