From 97638f7ade201e175bfd81b7a5405c27182080a8 Mon Sep 17 00:00:00 2001 From: Bananymous Date: Mon, 12 Jun 2023 22:18:12 +0300 Subject: [PATCH] BAN: Add operator-> and operator* to Optional --- BAN/include/BAN/Optional.h | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/BAN/include/BAN/Optional.h b/BAN/include/BAN/Optional.h index c3304491f..7f31c2374 100644 --- a/BAN/include/BAN/Optional.h +++ b/BAN/include/BAN/Optional.h @@ -20,6 +20,12 @@ namespace BAN Optional& operator=(const Optional&); Optional& operator=(Optional&&); + T* operator->(); + const T* operator->() const; + + T& operator*(); + const T& operator*() const; + bool has_value() const; T&& release_value(); @@ -76,10 +82,38 @@ namespace BAN if (other.has_value) { m_has_value = true; - new (m_storage) T(BAN::move(other.relase_value())); + new (m_storage) T(BAN::move(other.release_value())); } } + template + T* Optional::operator->() + { + ASSERT(has_value()); + return &value(); + } + + template + const T* Optional::operator->() const + { + ASSERT(has_value()); + return &value(); + } + + template + T& Optional::operator*() + { + ASSERT(has_value()); + return value(); + } + + template + const T& Optional::operator*() const + { + ASSERT(has_value()); + return value(); + } + template bool Optional::has_value() const {