diff options
Diffstat (limited to 'include/mapbox/optional.hpp')
-rw-r--r-- | include/mapbox/optional.hpp | 74 |
1 files changed, 0 insertions, 74 deletions
diff --git a/include/mapbox/optional.hpp b/include/mapbox/optional.hpp deleted file mode 100644 index d84705c..0000000 --- a/include/mapbox/optional.hpp +++ /dev/null @@ -1,74 +0,0 @@ -#ifndef MAPBOX_UTIL_OPTIONAL_HPP -#define MAPBOX_UTIL_OPTIONAL_HPP - -#pragma message("This implementation of optional is deprecated. See https://github.com/mapbox/variant/issues/64.") - -#include <type_traits> -#include <utility> - -#include <mapbox/variant.hpp> - -namespace mapbox { -namespace util { - -template <typename T> -class optional -{ - static_assert(!std::is_reference<T>::value, "optional doesn't support references"); - - struct none_type - { - }; - - variant<none_type, T> variant_; - -public: - optional() = default; - - optional(optional const& rhs) - { - if (this != &rhs) - { // protect against invalid self-assignment - variant_ = rhs.variant_; - } - } - - optional(T const& v) { variant_ = v; } - - explicit operator bool() const noexcept { return variant_.template is<T>(); } - - T const& get() const { return variant_.template get<T>(); } - T& get() { return variant_.template get<T>(); } - - T const& operator*() const { return this->get(); } - T operator*() { return this->get(); } - - optional& operator=(T const& v) - { - variant_ = v; - return *this; - } - - optional& operator=(optional const& rhs) - { - if (this != &rhs) - { - variant_ = rhs.variant_; - } - return *this; - } - - template <typename... Args> - void emplace(Args&&... args) - { - variant_ = T{std::forward<Args>(args)...}; - } - - void reset() { variant_ = none_type{}; } - -}; // class optional - -} // namespace util -} // namespace mapbox - -#endif // MAPBOX_UTIL_OPTIONAL_HPP |