From a39db64cafd94d3ec376a178eddab0e3a6926166 Mon Sep 17 00:00:00 2001 From: Tim Ohliger Date: Thu, 30 Mar 2017 14:58:12 +0200 Subject: [PATCH 1/3] Added get_or to optional. --- include/fast-lib/optional.hpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/include/fast-lib/optional.hpp b/include/fast-lib/optional.hpp index 32f6d13..0e2401b 100644 --- a/include/fast-lib/optional.hpp +++ b/include/fast-lib/optional.hpp @@ -43,8 +43,13 @@ class Optional : T & get(); const T & get() const; + + template + constexpr const T & get_or(U &&default_value) const; + T & operator*(); const T & operator*() const; + T * operator->(); T * operator->() const; @@ -170,6 +175,13 @@ const T & Optional::get() const return *ptr; } +template +template +constexpr const T & Optional::get_or(U &&default_value) const +{ + return valid ? get() : default_value; +} + template T & Optional::operator*() { From cfb18a77b16dfd2cc69e21e769beffbae06d1ee2 Mon Sep 17 00:00:00 2001 From: Tim Ohliger Date: Thu, 30 Mar 2017 15:14:26 +0200 Subject: [PATCH 2/3] Fixed const operator-> in optional. --- include/fast-lib/optional.hpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/include/fast-lib/optional.hpp b/include/fast-lib/optional.hpp index 0e2401b..73ce53b 100644 --- a/include/fast-lib/optional.hpp +++ b/include/fast-lib/optional.hpp @@ -51,7 +51,7 @@ class Optional : const T & operator*() const; T * operator->(); - T * operator->() const; + const T * operator->() const; std::string get_tag() const; @@ -195,13 +195,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(); } From 3115dc71df8a8e6f1e509d40a3ef3ba56efd73f7 Mon Sep 17 00:00:00 2001 From: Tim Ohliger Date: Thu, 30 Mar 2017 15:32:37 +0200 Subject: [PATCH 3/3] Fix for get_or in optional. --- include/fast-lib/optional.hpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/include/fast-lib/optional.hpp b/include/fast-lib/optional.hpp index 73ce53b..0bde570 100644 --- a/include/fast-lib/optional.hpp +++ b/include/fast-lib/optional.hpp @@ -44,8 +44,7 @@ class Optional : T & get(); const T & get() const; - template - constexpr const T & get_or(U &&default_value) const; + constexpr const T & get_or(const T &default_value) const; T & operator*(); const T & operator*() const; @@ -176,8 +175,7 @@ const T & Optional::get() const } template -template -constexpr const T & Optional::get_or(U &&default_value) const +constexpr const T & Optional::get_or(const T &default_value) const { return valid ? get() : default_value; }