BAN: Implement Optional::value_or
This will return value specified in the argument if optional is not storing any value.
This commit is contained in:
parent
e905634343
commit
62003d96f3
|
@ -40,6 +40,8 @@ namespace BAN
|
|||
constexpr T release_value();
|
||||
constexpr T& value();
|
||||
constexpr const T& value() const;
|
||||
constexpr T& value_or(T&);
|
||||
constexpr const T& value_or(const T&) const;
|
||||
|
||||
constexpr void clear();
|
||||
|
||||
|
@ -112,7 +114,7 @@ namespace BAN
|
|||
{
|
||||
clear();
|
||||
m_has_value = other.has_value();
|
||||
if (other.has_value)
|
||||
if (other.has_value())
|
||||
new (m_storage) T(other.value());
|
||||
return *this;
|
||||
}
|
||||
|
@ -185,6 +187,22 @@ namespace BAN
|
|||
return (const T&)m_storage;
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
constexpr T& Optional<T>::value_or(T& empty)
|
||||
{
|
||||
if (!has_value())
|
||||
return empty;
|
||||
return (T&)m_storage;
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
constexpr const T& Optional<T>::value_or(const T& empty) const
|
||||
{
|
||||
if (!has_value())
|
||||
return empty;
|
||||
return (const T&)m_storage;
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
constexpr void Optional<T>::clear()
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue