diff --git a/include/fast-lib/optional.hpp b/include/fast-lib/optional.hpp index 32f6d13..0bde570 100644 --- a/include/fast-lib/optional.hpp +++ b/include/fast-lib/optional.hpp @@ -43,10 +43,14 @@ class Optional : T & get(); const T & get() const; + + constexpr const T & get_or(const T &default_value) const; + T & operator*(); const T & operator*() const; + T * operator->(); - T * operator->() const; + const T * operator->() const; std::string get_tag() const; @@ -170,6 +174,12 @@ const T & Optional::get() const return *ptr; } +template +constexpr const T & Optional::get_or(const T &default_value) const +{ + return valid ? get() : default_value; +} + template T & Optional::operator*() { @@ -183,13 +193,13 @@ const T & Optional::operator*() const } template -T * Optional::operator->() const +T * Optional::operator->() { return &get(); } template -T * Optional::operator->() +const T * Optional::operator->() const { return &get(); }