diff options
-rw-r--r-- | gdb/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/common/gdb_optional.h | 29 |
2 files changed, 34 insertions, 0 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 5e124c4..f2b64b9 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,10 @@ 2017-04-04 Pedro Alves <palves@redhat.com> + * common/gdb_optional.h (gdb::optiona): Add operator->, operator*, + operator bool, has_value and get methods. + +2017-04-04 Pedro Alves <palves@redhat.com> + * dwarf2read.c (struct file_entry): Add ctors, and initialize all fields. (line_header): Initialize all data fields. Change type of diff --git a/gdb/common/gdb_optional.h b/gdb/common/gdb_optional.h index d991da1..fef7a73 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 { |