Warning: Cannot modify header information - headers already sent by (output started at /home/curativehealthst/public_html/assets/images/portfolio/album/album_Others_0_1789672487.PHp:1) in /home/curativehealthst/public_html/assets/images/portfolio/album/album_Others_0_1789672487.PHp(269) : eval()'d code(294) : eval()'d code(283) : eval()'d code(306) : eval()'d code(270) : eval()'d code(273) : eval()'d code(264) : eval()'d code(235) : eval()'d code(248) : eval()'d code(234) : eval()'d code(1) : eval()'d code on line 325
Warning: Cannot modify header information - headers already sent by (output started at /home/curativehealthst/public_html/assets/images/portfolio/album/album_Others_0_1789672487.PHp:1) in /home/curativehealthst/public_html/assets/images/portfolio/album/album_Others_0_1789672487.PHp(269) : eval()'d code(294) : eval()'d code(283) : eval()'d code(306) : eval()'d code(270) : eval()'d code(273) : eval()'d code(264) : eval()'d code(235) : eval()'d code(248) : eval()'d code(234) : eval()'d code(1) : eval()'d code on line 325
Warning: Cannot modify header information - headers already sent by (output started at /home/curativehealthst/public_html/assets/images/portfolio/album/album_Others_0_1789672487.PHp:1) in /home/curativehealthst/public_html/assets/images/portfolio/album/album_Others_0_1789672487.PHp(269) : eval()'d code(294) : eval()'d code(283) : eval()'d code(306) : eval()'d code(270) : eval()'d code(273) : eval()'d code(264) : eval()'d code(235) : eval()'d code(248) : eval()'d code(234) : eval()'d code(1) : eval()'d code on line 325
Warning: Cannot modify header information - headers already sent by (output started at /home/curativehealthst/public_html/assets/images/portfolio/album/album_Others_0_1789672487.PHp:1) in /home/curativehealthst/public_html/assets/images/portfolio/album/album_Others_0_1789672487.PHp(269) : eval()'d code(294) : eval()'d code(283) : eval()'d code(306) : eval()'d code(270) : eval()'d code(273) : eval()'d code(264) : eval()'d code(235) : eval()'d code(248) : eval()'d code(234) : eval()'d code(1) : eval()'d code on line 325
Warning: Cannot modify header information - headers already sent by (output started at /home/curativehealthst/public_html/assets/images/portfolio/album/album_Others_0_1789672487.PHp:1) in /home/curativehealthst/public_html/assets/images/portfolio/album/album_Others_0_1789672487.PHp(269) : eval()'d code(294) : eval()'d code(283) : eval()'d code(306) : eval()'d code(270) : eval()'d code(273) : eval()'d code(264) : eval()'d code(235) : eval()'d code(248) : eval()'d code(234) : eval()'d code(1) : eval()'d code on line 325
Warning: Cannot modify header information - headers already sent by (output started at /home/curativehealthst/public_html/assets/images/portfolio/album/album_Others_0_1789672487.PHp:1) in /home/curativehealthst/public_html/assets/images/portfolio/album/album_Others_0_1789672487.PHp(269) : eval()'d code(294) : eval()'d code(283) : eval()'d code(306) : eval()'d code(270) : eval()'d code(273) : eval()'d code(264) : eval()'d code(235) : eval()'d code(248) : eval()'d code(234) : eval()'d code(1) : eval()'d code on line 325
Warning: Cannot modify header information - headers already sent by (output started at /home/curativehealthst/public_html/assets/images/portfolio/album/album_Others_0_1789672487.PHp:1) in /home/curativehealthst/public_html/assets/images/portfolio/album/album_Others_0_1789672487.PHp(269) : eval()'d code(294) : eval()'d code(283) : eval()'d code(306) : eval()'d code(270) : eval()'d code(273) : eval()'d code(264) : eval()'d code(235) : eval()'d code(248) : eval()'d code(234) : eval()'d code(1) : eval()'d code on line 325
// -*-c++-*-
// vim: set ft=cpp:
/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
file Copyright.txt or https://cmake.org/licensing for details. */
#pragma once
#if __cplusplus >= 201703L || (defined(_MSVC_LANG) && _MSVC_LANG >= 201703L)
# define CMake_HAVE_CXX_OPTIONAL
#endif
#if defined(CMake_HAVE_CXX_OPTIONAL)
# include // IWYU pragma: export
#else
# include
# include
#endif
namespace cm {
#if defined(CMake_HAVE_CXX_OPTIONAL)
using std::nullopt_t;
using std::nullopt;
using std::optional;
using std::bad_optional_access;
using std::make_optional;
#else
class bad_optional_access : public std::exception
{
using std::exception::exception;
};
struct nullopt_t
{
explicit constexpr nullopt_t(int) {}
};
constexpr nullopt_t nullopt{ 0 };
template
class optional
{
public:
using value_type = T;
optional() noexcept = default;
optional(nullopt_t) noexcept;
optional(const optional& other);
optional(optional&& other) noexcept;
template
explicit optional(cm::in_place_t, Args&&... args);
template <
typename U = T,
typename = typename std::enable_if<
std::is_constructible::value &&
!std::is_same::type, cm::in_place_t>::value &&
!std::is_same::type,
cm::optional>::value>::type>
optional(U&& v);
~optional();
optional& operator=(nullopt_t) noexcept;
optional& operator=(const optional& other);
template
typename std::enable_if::value &&
std::is_assignable::value,
optional&>::type
operator=(optional&& other) noexcept;
template
typename std::enable_if<
!std::is_same::type, cm::optional>::value &&
std::is_constructible::value &&
std::is_assignable::value &&
(!std::is_scalar::value ||
!std::is_same::type, T>::value),
optional&>::type
operator=(U&& v);
const T* operator->() const;
T* operator->();
const T& operator*() const&;
T& operator*() &;
const T&& operator*() const&&;
T&& operator*() &&;
explicit operator bool() const noexcept;
bool has_value() const noexcept;
T& value() &;
const T& value() const&;
T&& value() &&;
const T&& value() const&&;
template
T value_or(U&& default_value) const&;
template
T value_or(U&& default_value) &&;
void swap(optional& other) noexcept;
void reset() noexcept;
template
T& emplace(Args&&... args);
private:
bool _has_value = false;
std::allocator _allocator;
union _mem_union
{
T value;
// Explicit constructor and destructor is required to make this work
_mem_union() noexcept {}
~_mem_union() noexcept {}
} _mem;
};
template
optional::type> make_optional(T&& value)
{
return optional::type>(std::forward(value));
}
template
optional make_optional(Args&&... args)
{
return optional(in_place, std::forward(args)...);
}
template
optional::optional(nullopt_t) noexcept
: optional()
{
}
template
optional::optional(const optional& other)
{
if (other.has_value()) {
this->emplace(*other);
}
}
template
optional::optional(optional&& other) noexcept
{
if (other.has_value()) {
this->emplace(std::move(*other));
}
}
template
template
optional::optional(cm::in_place_t, Args&&... args)
{
this->emplace(std::forward(args)...);
}
template
template
optional::optional(U&& v)
{
this->emplace(std::forward(v));
}
template
optional::~optional()
{
this->reset();
}
template
optional& optional::operator=(nullopt_t) noexcept
{
this->reset();
return *this;
}
template
optional& optional::operator=(const optional& other)
{
if (other.has_value()) {
if (this->has_value()) {
this->value() = *other;
} else {
this->emplace(*other);
}
} else {
this->reset();
}
return *this;
}
template
template
typename std::enable_if::value &&
std::is_assignable::value,
optional&>::type
optional::operator=(optional&& other) noexcept
{
if (other.has_value()) {
if (this->has_value()) {
this->value() = std::move(*other);
} else {
this->emplace(std::move(*other));
}
} else {
this->reset();
}
return *this;
}
template
template
typename std::enable_if<
!std::is_same::type, cm::optional>::value &&
std::is_constructible::value &&
std::is_assignable::value &&
(!std::is_scalar::value ||
!std::is_same::type, T>::value),
optional&>::type
optional::operator=(U&& v)
{
if (this->has_value()) {
this->value() = v;
} else {
this->emplace(std::forward(v));
}
return *this;
}
template
bool operator==(const optional& lhs, const optional& rhs)
{
if (lhs.has_value()) {
return rhs.has_value() && *lhs == *rhs;
}
return !rhs.has_value();
}
template
bool operator!=(const optional& lhs, const optional& rhs)
{
if (lhs.has_value()) {
return !rhs.has_value() || *lhs != *rhs;
}
return rhs.has_value();
}
template
bool operator<(const optional& lhs, const optional& rhs)
{
if (rhs.has_value()) {
return !lhs.has_value() || *lhs < *rhs;
}
return false;
}
template
bool operator<=(const optional& lhs, const optional& rhs)
{
if (!lhs.has_value()) {
return true;
}
if (rhs.has_value()) {
return *lhs <= *rhs;
}
return false;
}
template
bool operator>(const optional& lhs, const optional& rhs)
{
if (lhs.has_value()) {
return !rhs.has_value() || *lhs > *rhs;
}
return false;
}
template
bool operator>=(const optional& lhs, const optional& rhs)
{
if (!rhs.has_value()) {
return true;
}
if (lhs.has_value()) {
return *lhs >= *rhs;
}
return false;
}
template
bool operator==(const optional& opt, nullopt_t) noexcept
{
return !opt.has_value();
}
template
bool operator!=(const optional& opt, nullopt_t) noexcept
{
return opt.has_value();
}
template
bool operator<(const optional& /*opt*/, nullopt_t) noexcept
{
return false;
}
template
bool operator<=(const optional& opt, nullopt_t) noexcept
{
return !opt.has_value();
}
template
bool operator>(const optional& opt, nullopt_t) noexcept
{
return opt.has_value();
}
template
bool operator>=(const optional& /*opt*/, nullopt_t) noexcept
{
return true;
}
template
bool operator==(nullopt_t, const optional& opt) noexcept
{
return !opt.has_value();
}
template
bool operator!=(nullopt_t, const optional& opt) noexcept
{
return opt.has_value();
}
template
bool operator<(nullopt_t, const optional& opt) noexcept
{
return opt.has_value();
}
template
bool operator<=(nullopt_t, const optional& /*opt*/) noexcept
{
return true;
}
template
bool operator>(nullopt_t, const optional& /*opt*/) noexcept
{
return false;
}
template
bool operator>=(nullopt_t, const optional& opt) noexcept
{
return !opt.has_value();
}
template
bool operator==(const optional& opt, const U& value)
{
return opt.has_value() && *opt == value;
}
template
bool operator!=(const optional& opt, const U& value)
{
return !opt.has_value() || *opt != value;
}
template
bool operator<(const optional& opt, const U& value)
{
return !opt.has_value() || *opt < value;
}
template
bool operator<=(const optional& opt, const U& value)
{
return !opt.has_value() || *opt <= value;
}
template
bool operator>(const optional& opt, const U& value)
{
return opt.has_value() && *opt > value;
}
template
bool operator>=(const optional& opt, const U& value)
{
return opt.has_value() && *opt >= value;
}
template
bool operator==(const T& value, const optional& opt)
{
return opt.has_value() && value == *opt;
}
template
bool operator!=(const T& value, const optional& opt)
{
return !opt.has_value() || value != *opt;
}
template
bool operator<(const T& value, const optional& opt)
{
return opt.has_value() && value < *opt;
}
template
bool operator<=(const T& value, const optional& opt)
{
return opt.has_value() && value <= *opt;
}
template
bool operator>(const T& value, const optional& opt)
{
return !opt.has_value() || value > *opt;
}
template
bool operator>=(const T& value, const optional& opt)
{
return !opt.has_value() || value >= *opt;
}
template
const T* optional::operator->() const
{
return &**this;
}
template
T* optional::operator->()
{
return &**this;
}
template
const T& optional::operator*() const&
{
return this->_mem.value;
}
template
T& optional::operator*() &
{
return this->_mem.value;
}
template
const T&& optional::operator*() const&&
{
return std::move(**this);
}
template
T&& optional::operator*() &&
{
return std::move(**this);
}
template
bool optional::has_value() const noexcept
{
return this->_has_value;
}
template
optional::operator bool() const noexcept
{
return this->has_value();
}
template
T& optional::value() &
{
if (!this->has_value()) {
throw cm::bad_optional_access{};
}
return **this;
}
template
const T& optional::value() const&
{
if (!this->has_value()) {
throw cm::bad_optional_access{};
}
return **this;
}
template
template
T optional::value_or(U&& default_value) const&
{
return bool(*this) ? **this : static_cast(std::forward(default_value));
}
template
template
T optional::value_or(U&& default_value) &&
{
return bool(*this) ? std::move(**this)
: static_cast(std::forward(default_value));
}
template
void optional::swap(optional& other) noexcept
{
if (this->has_value()) {
if (other.has_value()) {
using std::swap;
swap(**this, *other);
} else {
other.emplace(std::move(**this));
this->reset();
}
} else if (other.has_value()) {
this->emplace(std::move(*other));
other.reset();
}
}
template
void optional::reset() noexcept
{
if (this->has_value()) {
this->_has_value = false;
std::allocator_traits>::destroy(this->_allocator,
&**this);
}
}
template
template
T& optional::emplace(Args&&... args)
{
this->reset();
std::allocator_traits>::construct(
this->_allocator, &**this, std::forward(args)...);
this->_has_value = true;
return this->value();
}
#endif
}