[libcxx] r323971 - Remove <experimental/optional>; use <optional> instead. See https://libcxx.llvm.org/TS_deprecation.html
Nico Weber via cfe-commits
cfe-commits at lists.llvm.org
Thu Feb 22 07:58:23 PST 2018
I have a small personal project where I used to use this. I tried switching
to <optional> instead, but that apparently requires -std=c++17. With that,
things build fine with my locally-built clang, but latest Xcode clang
doesn't accept that flag yet. So I tried -std=c++1z, but latest Xcode (9.2)
doesn't event include the <optional> header yet. So now I have no way of
being able to build my project with both trunk clang and Xcode clang. Maybe
a one-year deprecation period is too short?
(It's not a huge deal, I have a optional<> implementation in my project for
platforms that don't ship it yet, but things used to be fine on mac until
this change at least. It's also not an important project, I just thought
I'd point out that this makes life more complicated than it would be if the
deletion period was longer.)
On Thu, Feb 1, 2018 at 9:54 AM, Marshall Clow via cfe-commits <
cfe-commits at lists.llvm.org> wrote:
> Author: marshall
> Date: Thu Feb 1 06:54:25 2018
> New Revision: 323971
>
> URL: http://llvm.org/viewvc/llvm-project?rev=323971&view=rev
> Log:
> Remove <experimental/optional>; use <optional> instead. See
> https://libcxx.llvm.org/TS_deprecation.html
>
> Removed:
> libcxx/trunk/test/libcxx/experimental/optional/
> libcxx/trunk/test/std/experimental/optional/
> Modified:
> libcxx/trunk/include/experimental/optional
> libcxx/trunk/include/module.modulemap
> libcxx/trunk/src/optional.cpp
> libcxx/trunk/test/libcxx/double_include.sh.cpp
> libcxx/trunk/test/libcxx/min_max_macros.sh.cpp
>
> Modified: libcxx/trunk/include/experimental/optional
> URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/
> experimental/optional?rev=323971&r1=323970&r2=323971&view=diff
> ============================================================
> ==================
> --- libcxx/trunk/include/experimental/optional (original)
> +++ libcxx/trunk/include/experimental/optional Thu Feb 1 06:54:25 2018
> @@ -8,915 +8,4 @@
> //
> //===-------------------------------------------------------
> ---------------===//
>
> -#ifndef _LIBCPP_EXPERIMENTAL_OPTIONAL
> -#define _LIBCPP_EXPERIMENTAL_OPTIONAL
> -
> -/*
> - optional synopsis
> -
> -// C++1y
> -
> -namespace std { namespace experimental { inline namespace fundamentals_v1
> {
> -
> - // 5.3, optional for object types
> - template <class T> class optional;
> -
> - // 5.4, In-place construction
> - struct in_place_t{};
> - constexpr in_place_t in_place{};
> -
> - // 5.5, No-value state indicator
> - struct nullopt_t{see below};
> - constexpr nullopt_t nullopt(unspecified);
> -
> - // 5.6, Class bad_optional_access
> - class bad_optional_access;
> -
> - // 5.7, Relational operators
> - template <class T>
> - constexpr bool operator==(const optional<T>&, const optional<T>&);
> - template <class T>
> - constexpr bool operator!=(const optional<T>&, const optional<T>&);
> - template <class T>
> - constexpr bool operator<(const optional<T>&, const optional<T>&);
> - template <class T>
> - constexpr bool operator>(const optional<T>&, const optional<T>&);
> - template <class T>
> - constexpr bool operator<=(const optional<T>&, const optional<T>&);
> - template <class T>
> - constexpr bool operator>=(const optional<T>&, const optional<T>&);
> -
> - // 5.8, Comparison with nullopt
> - template <class T> constexpr bool operator==(const optional<T>&,
> nullopt_t) noexcept;
> - template <class T> constexpr bool operator==(nullopt_t, const
> optional<T>&) noexcept;
> - template <class T> constexpr bool operator!=(const optional<T>&,
> nullopt_t) noexcept;
> - template <class T> constexpr bool operator!=(nullopt_t, const
> optional<T>&) noexcept;
> - template <class T> constexpr bool operator<(const optional<T>&,
> nullopt_t) noexcept;
> - template <class T> constexpr bool operator<(nullopt_t, const
> optional<T>&) noexcept;
> - template <class T> constexpr bool operator<=(const optional<T>&,
> nullopt_t) noexcept;
> - template <class T> constexpr bool operator<=(nullopt_t, const
> optional<T>&) noexcept;
> - template <class T> constexpr bool operator>(const optional<T>&,
> nullopt_t) noexcept;
> - template <class T> constexpr bool operator>(nullopt_t, const
> optional<T>&) noexcept;
> - template <class T> constexpr bool operator>=(const optional<T>&,
> nullopt_t) noexcept;
> - template <class T> constexpr bool operator>=(nullopt_t, const
> optional<T>&) noexcept;
> -
> - // 5.9, Comparison with T
> - template <class T> constexpr bool operator==(const optional<T>&,
> const T&);
> - template <class T> constexpr bool operator==(const T&, const
> optional<T>&);
> - template <class T> constexpr bool operator!=(const optional<T>&,
> const T&);
> - template <class T> constexpr bool operator!=(const T&, const
> optional<T>&);
> - template <class T> constexpr bool operator<(const optional<T>&, const
> T&);
> - template <class T> constexpr bool operator<(const T&, const
> optional<T>&);
> - template <class T> constexpr bool operator<=(const optional<T>&,
> const T&);
> - template <class T> constexpr bool operator<=(const T&, const
> optional<T>&);
> - template <class T> constexpr bool operator>(const optional<T>&, const
> T&);
> - template <class T> constexpr bool operator>(const T&, const
> optional<T>&);
> - template <class T> constexpr bool operator>=(const optional<T>&,
> const T&);
> - template <class T> constexpr bool operator>=(const T&, const
> optional<T>&);
> -
> - // 5.10, Specialized algorithms
> - template <class T> void swap(optional<T>&, optional<T>&) noexcept(see
> below);
> - template <class T> constexpr optional<see below> make_optional(T&&);
> -
> - template <class T>
> - class optional
> - {
> - public:
> - typedef T value_type;
> -
> - // 5.3.1, Constructors
> - constexpr optional() noexcept;
> - constexpr optional(nullopt_t) noexcept;
> - optional(const optional&);
> - optional(optional&&) noexcept(see below);
> - constexpr optional(const T&);
> - constexpr optional(T&&);
> - template <class... Args> constexpr explicit optional(in_place_t,
> Args&&...);
> - template <class U, class... Args>
> - constexpr explicit optional(in_place_t,
> initializer_list<U>, Args&&...);
> -
> - // 5.3.2, Destructor
> - ~optional();
> -
> - // 5.3.3, Assignment
> - optional& operator=(nullopt_t) noexcept;
> - optional& operator=(const optional&);
> - optional& operator=(optional&&) noexcept(see below);
> - template <class U> optional& operator=(U&&);
> - template <class... Args> void emplace(Args&&...);
> - template <class U, class... Args>
> - void emplace(initializer_list<U>, Args&&...);
> -
> - // 5.3.4, Swap
> - void swap(optional&) noexcept(see below);
> -
> - // 5.3.5, Observers
> - constexpr T const* operator ->() const;
> - constexpr T* operator ->();
> - constexpr T const& operator *() const &;
> - constexpr T& operator *() &;
> - constexpr T&& operator *() &&;
> - constexpr const T&& operator *() const &&;
> - constexpr explicit operator bool() const noexcept;
> - constexpr T const& value() const &;
> - constexpr T& value() &;
> - constexpr T&& value() &&;
> - constexpr const T&& value() const &&;
> - template <class U> constexpr T value_or(U&&) const &;
> - template <class U> constexpr T value_or(U&&) &&;
> -
> - private:
> - T* val; // exposition only
> - };
> -
> - } // namespace fundamentals_v1
> - } // namespace experimental
> -
> - // 5.11, Hash support
> - template <class T> struct hash;
> - template <class T> struct hash<experimental::optional<T>>;
> -
> -} // namespace std
> -
> -*/
> -
> -#include <experimental/__config>
> -#include <functional>
> -#include <stdexcept>
> -#if _LIBCPP_STD_VER > 11
> -#include <initializer_list>
> -#include <type_traits>
> -#include <new>
> -#include <__functional_base>
> -#include <__debug>
> -#endif
> -
> -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
> -#pragma GCC system_header
> -#endif
> -
> -_LIBCPP_PUSH_MACROS
> -#include <__undef_macros>
> -
> -
> -_LIBCPP_BEGIN_NAMESPACE_EXPERIMENTAL
> -class _LIBCPP_EXCEPTION_ABI _LIBCPP_AVAILABILITY_BAD_OPTIONAL_ACCESS
> bad_optional_access
> - : public std::logic_error
> -{
> -public:
> - bad_optional_access() : std::logic_error("Bad optional Access") {}
> -
> -// Get the key function ~bad_optional_access() into the dylib
> - virtual ~bad_optional_access() _NOEXCEPT;
> -};
> -
> -_LIBCPP_END_NAMESPACE_EXPERIMENTAL
> -
> -
> -#if _LIBCPP_STD_VER > 11
> -
> -_LIBCPP_BEGIN_NAMESPACE_LFTS
> -
> -struct in_place_t {};
> -constexpr in_place_t in_place{};
> -
> -struct nullopt_t
> -{
> - explicit constexpr nullopt_t(int) noexcept {}
> -};
> -
> -constexpr nullopt_t nullopt{0};
> -
> -template <class _Tp, bool = is_trivially_destructible<_Tp>::value>
> -class __optional_storage
> -{
> -protected:
> - typedef _Tp value_type;
> - union
> - {
> - char __null_state_;
> - value_type __val_;
> - };
> - bool __engaged_ = false;
> -
> - _LIBCPP_INLINE_VISIBILITY
> - ~__optional_storage()
> - {
> - if (__engaged_)
> - __val_.~value_type();
> - }
> -
> - _LIBCPP_INLINE_VISIBILITY
> - constexpr __optional_storage() noexcept
> - : __null_state_('\0') {}
> -
> - _LIBCPP_INLINE_VISIBILITY
> - __optional_storage(const __optional_storage& __x)
> - : __engaged_(__x.__engaged_)
> - {
> - if (__engaged_)
> - ::new((void*)_VSTD::addressof(__val_))
> value_type(__x.__val_);
> - }
> -
> - _LIBCPP_INLINE_VISIBILITY
> - __optional_storage(__optional_storage&& __x)
> - noexcept(is_nothrow_move_
> constructible<value_type>::value)
> - : __engaged_(__x.__engaged_)
> - {
> - if (__engaged_)
> - ::new((void*)_VSTD::addressof(__val_))
> value_type(_VSTD::move(__x.__val_));
> - }
> -
> - _LIBCPP_INLINE_VISIBILITY
> - constexpr __optional_storage(const value_type& __v)
> - : __val_(__v),
> - __engaged_(true) {}
> -
> - _LIBCPP_INLINE_VISIBILITY
> - constexpr __optional_storage(value_type&& __v)
> - : __val_(_VSTD::move(__v)),
> - __engaged_(true) {}
> -
> - template <class... _Args>
> - _LIBCPP_INLINE_VISIBILITY
> - constexpr
> - explicit __optional_storage(in_place_t, _Args&&... __args)
> - : __val_(_VSTD::forward<_Args>(__args)...),
> - __engaged_(true) {}
> -};
> -
> -template <class _Tp>
> -class __optional_storage<_Tp, true>
> -{
> -protected:
> - typedef _Tp value_type;
> - union
> - {
> - char __null_state_;
> - value_type __val_;
> - };
> - bool __engaged_ = false;
> -
> - _LIBCPP_INLINE_VISIBILITY
> - constexpr __optional_storage() noexcept
> - : __null_state_('\0') {}
> -
> - _LIBCPP_INLINE_VISIBILITY
> - __optional_storage(const __optional_storage& __x)
> - : __engaged_(__x.__engaged_)
> - {
> - if (__engaged_)
> - ::new((void*)_VSTD::addressof(__val_))
> value_type(__x.__val_);
> - }
> -
> - _LIBCPP_INLINE_VISIBILITY
> - __optional_storage(__optional_storage&& __x)
> - noexcept(is_nothrow_move_
> constructible<value_type>::value)
> - : __engaged_(__x.__engaged_)
> - {
> - if (__engaged_)
> - ::new((void*)_VSTD::addressof(__val_))
> value_type(_VSTD::move(__x.__val_));
> - }
> -
> - _LIBCPP_INLINE_VISIBILITY
> - constexpr __optional_storage(const value_type& __v)
> - : __val_(__v),
> - __engaged_(true) {}
> -
> - _LIBCPP_INLINE_VISIBILITY
> - constexpr __optional_storage(value_type&& __v)
> - : __val_(_VSTD::move(__v)),
> - __engaged_(true) {}
> -
> - template <class... _Args>
> - _LIBCPP_INLINE_VISIBILITY
> - constexpr
> - explicit __optional_storage(in_place_t, _Args&&... __args)
> - : __val_(_VSTD::forward<_Args>(__args)...),
> - __engaged_(true) {}
> -};
> -
> -template <class _Tp>
> -class optional
> - : private __optional_storage<_Tp>
> -{
> - typedef __optional_storage<_Tp> __base;
> -public:
> - typedef _Tp value_type;
> -
> - static_assert(!is_reference<value_type>::value,
> - "Instantiation of optional with a reference type is
> ill-formed.");
> - static_assert(!is_same<typename remove_cv<value_type>::type,
> in_place_t>::value,
> - "Instantiation of optional with a in_place_t type is
> ill-formed.");
> - static_assert(!is_same<typename remove_cv<value_type>::type,
> nullopt_t>::value,
> - "Instantiation of optional with a nullopt_t type is
> ill-formed.");
> - static_assert(is_object<value_type>::value,
> - "Instantiation of optional with a non-object type is undefined
> behavior.");
> - static_assert(is_nothrow_destructible<value_type>::value,
> - "Instantiation of optional with an object type that is not
> noexcept destructible is undefined behavior.");
> -
> - _LIBCPP_INLINE_VISIBILITY constexpr optional() noexcept {}
> - _LIBCPP_INLINE_VISIBILITY optional(const optional&) = default;
> - _LIBCPP_INLINE_VISIBILITY optional(optional&&) = default;
> - _LIBCPP_INLINE_VISIBILITY ~optional() = default;
> - _LIBCPP_INLINE_VISIBILITY constexpr optional(nullopt_t) noexcept {}
> - _LIBCPP_INLINE_VISIBILITY constexpr optional(const value_type& __v)
> - : __base(__v) {}
> - _LIBCPP_INLINE_VISIBILITY constexpr optional(value_type&& __v)
> - : __base(_VSTD::move(__v)) {}
> -
> - template <class... _Args,
> - class = typename enable_if
> - <
> - is_constructible<value_type, _Args...>::value
> - >::type
> - >
> - _LIBCPP_INLINE_VISIBILITY
> - constexpr
> - explicit optional(in_place_t, _Args&&... __args)
> - : __base(in_place, _VSTD::forward<_Args>(__args)...) {}
> -
> - template <class _Up, class... _Args,
> - class = typename enable_if
> - <
> - is_constructible<value_type,
> initializer_list<_Up>&, _Args...>::value
> - >::type
> - >
> - _LIBCPP_INLINE_VISIBILITY
> - constexpr
> - explicit optional(in_place_t, initializer_list<_Up> __il, _Args&&...
> __args)
> - : __base(in_place, __il, _VSTD::forward<_Args>(__args)...) {}
> -
> - _LIBCPP_INLINE_VISIBILITY
> - optional& operator=(nullopt_t) noexcept
> - {
> - if (this->__engaged_)
> - {
> - this->__val_.~value_type();
> - this->__engaged_ = false;
> - }
> - return *this;
> - }
> -
> - _LIBCPP_INLINE_VISIBILITY
> - optional&
> - operator=(const optional& __opt)
> - {
> - if (this->__engaged_ == __opt.__engaged_)
> - {
> - if (this->__engaged_)
> - this->__val_ = __opt.__val_;
> - }
> - else
> - {
> - if (this->__engaged_)
> - this->__val_.~value_type();
> - else
> - ::new((void*)_VSTD::addressof(this->__val_))
> value_type(__opt.__val_);
> - this->__engaged_ = __opt.__engaged_;
> - }
> - return *this;
> - }
> -
> - _LIBCPP_INLINE_VISIBILITY
> - optional&
> - operator=(optional&& __opt)
> - noexcept(is_nothrow_move_assignable<value_type>::value &&
> - is_nothrow_move_constructible<value_type>::value)
> - {
> - if (this->__engaged_ == __opt.__engaged_)
> - {
> - if (this->__engaged_)
> - this->__val_ = _VSTD::move(__opt.__val_);
> - }
> - else
> - {
> - if (this->__engaged_)
> - this->__val_.~value_type();
> - else
> - ::new((void*)_VSTD::addressof(this->__val_))
> - value_type(_VSTD::move(__opt.__val_));
> - this->__engaged_ = __opt.__engaged_;
> - }
> - return *this;
> - }
> -
> - template <class _Up,
> - class = typename enable_if
> - <
> - is_same<typename remove_reference<_Up>::type,
> value_type>::value &&
> - is_constructible<value_type, _Up>::value &&
> - is_assignable<value_type&, _Up>::value
> - >::type
> - >
> - _LIBCPP_INLINE_VISIBILITY
> - optional&
> - operator=(_Up&& __v)
> - {
> - if (this->__engaged_)
> - this->__val_ = _VSTD::forward<_Up>(__v);
> - else
> - {
> - ::new((void*)_VSTD::addressof(this->__val_))
> value_type(_VSTD::forward<_Up>(__v));
> - this->__engaged_ = true;
> - }
> - return *this;
> - }
> -
> - template <class... _Args,
> - class = typename enable_if
> - <
> - is_constructible<value_type, _Args...>::value
> - >::type
> - >
> - _LIBCPP_INLINE_VISIBILITY
> - void
> - emplace(_Args&&... __args)
> - {
> - *this = nullopt;
> - ::new((void*)_VSTD::addressof(this->__val_))
> - value_type(_VSTD::forward<_Args>(__args)...);
> - this->__engaged_ = true;
> - }
> -
> - template <class _Up, class... _Args,
> - class = typename enable_if
> - <
> - is_constructible<value_type,
> initializer_list<_Up>&, _Args...>::value
> - >::type
> - >
> - _LIBCPP_INLINE_VISIBILITY
> - void
> - emplace(initializer_list<_Up> __il, _Args&&... __args)
> - {
> - *this = nullopt;
> - ::new((void*)_VSTD::addressof(this->__val_))
> - value_type(__il, _VSTD::forward<_Args>(__args)...);
> - this->__engaged_ = true;
> - }
> -
> - _LIBCPP_INLINE_VISIBILITY
> - void
> - swap(optional& __opt)
> - noexcept(is_nothrow_move_constructible<value_type>::value &&
> - __is_nothrow_swappable<value_type>::value)
> - {
> - using _VSTD::swap;
> - if (this->__engaged_ == __opt.__engaged_)
> - {
> - if (this->__engaged_)
> - swap(this->__val_, __opt.__val_);
> - }
> - else
> - {
> - if (this->__engaged_)
> - {
> - ::new((void*)_VSTD::addressof(__opt.__val_))
> - value_type(_VSTD::move(this->__val_));
> - this->__val_.~value_type();
> - }
> - else
> - {
> - ::new((void*)_VSTD::addressof(this->__val_))
> - value_type(_VSTD::move(__opt.__val_));
> - __opt.__val_.~value_type();
> - }
> - swap(this->__engaged_, __opt.__engaged_);
> - }
> - }
> -
> - _LIBCPP_INLINE_VISIBILITY
> - constexpr
> - value_type const*
> - operator->() const
> - {
> - _LIBCPP_ASSERT(this->__engaged_, "optional operator-> called for
> disengaged value");
> -#ifndef _LIBCPP_HAS_NO_BUILTIN_ADDRESSOF
> - return __builtin_addressof(this->__val_);
> -#else
> - return __operator_arrow(__has_operator_addressof<value_type>{});
> -#endif
> - }
> -
> - _LIBCPP_INLINE_VISIBILITY
> - value_type*
> - operator->()
> - {
> - _LIBCPP_ASSERT(this->__engaged_, "optional operator-> called for
> disengaged value");
> - return _VSTD::addressof(this->__val_);
> - }
> -
> - _LIBCPP_INLINE_VISIBILITY
> - constexpr
> - const value_type&
> - operator*() const
> - {
> - _LIBCPP_ASSERT(this->__engaged_, "optional operator* called for
> disengaged value");
> - return this->__val_;
> - }
> -
> - _LIBCPP_INLINE_VISIBILITY
> - value_type&
> - operator*()
> - {
> - _LIBCPP_ASSERT(this->__engaged_, "optional operator* called for
> disengaged value");
> - return this->__val_;
> - }
> -
> - _LIBCPP_INLINE_VISIBILITY
> - constexpr explicit operator bool() const noexcept {return
> this->__engaged_;}
> -
> - _LIBCPP_NORETURN _LIBCPP_INLINE_VISIBILITY
> -#ifndef _LIBCPP_NO_EXCEPTIONS
> -_LIBCPP_AVAILABILITY_BAD_OPTIONAL_ACCESS
> -#endif
> - constexpr void __throw_bad_optional_access() const
> - {
> -#ifndef _LIBCPP_NO_EXCEPTIONS
> - throw bad_optional_access();
> -#else
> - _VSTD::abort();
> -#endif
> - }
> -
> - _LIBCPP_INLINE_VISIBILITY _LIBCPP_AVAILABILITY_BAD_OPTIONAL_ACCESS
> - constexpr value_type const& value() const
> - {
> - if (!this->__engaged_)
> - __throw_bad_optional_access();
> - return this->__val_;
> - }
> -
> - _LIBCPP_INLINE_VISIBILITY _LIBCPP_AVAILABILITY_BAD_OPTIONAL_ACCESS
> - value_type& value()
> - {
> - if (!this->__engaged_)
> - __throw_bad_optional_access();
> - return this->__val_;
> - }
> -
> - template <class _Up>
> - _LIBCPP_INLINE_VISIBILITY
> - constexpr value_type value_or(_Up&& __v) const&
> - {
> - static_assert(is_copy_constructible<value_type>::value,
> - "optional<T>::value_or: T must be copy
> constructible");
> - static_assert(is_convertible<_Up, value_type>::value,
> - "optional<T>::value_or: U must be convertible to
> T");
> - return this->__engaged_ ? this->__val_ :
> - static_cast<value_type>(_VSTD:
> :forward<_Up>(__v));
> - }
> -
> - template <class _Up>
> - _LIBCPP_INLINE_VISIBILITY
> - value_type value_or(_Up&& __v) &&
> - {
> - static_assert(is_move_constructible<value_type>::value,
> - "optional<T>::value_or: T must be move
> constructible");
> - static_assert(is_convertible<_Up, value_type>::value,
> - "optional<T>::value_or: U must be convertible to
> T");
> - return this->__engaged_ ? _VSTD::move(this->__val_) :
> - static_cast<value_type>(_VSTD:
> :forward<_Up>(__v));
> - }
> -
> -private:
> - _LIBCPP_INLINE_VISIBILITY
> - value_type const*
> - __operator_arrow(true_type) const
> - {
> - return _VSTD::addressof(this->__val_);
> - }
> -
> - _LIBCPP_INLINE_VISIBILITY
> - constexpr
> - value_type const*
> - __operator_arrow(false_type) const
> - {
> - return &this->__val_;
> - }
> -};
> -
> -// Comparisons between optionals
> -template <class _Tp>
> -inline _LIBCPP_INLINE_VISIBILITY
> -constexpr
> -bool
> -operator==(const optional<_Tp>& __x, const optional<_Tp>& __y)
> -{
> - if (static_cast<bool>(__x) != static_cast<bool>(__y))
> - return false;
> - if (!static_cast<bool>(__x))
> - return true;
> - return *__x == *__y;
> -}
> -
> -template <class _Tp>
> -inline _LIBCPP_INLINE_VISIBILITY
> -constexpr
> -bool
> -operator!=(const optional<_Tp>& __x, const optional<_Tp>& __y)
> -{
> - return !(__x == __y);
> -}
> -
> -template <class _Tp>
> -inline _LIBCPP_INLINE_VISIBILITY
> -constexpr
> -bool
> -operator<(const optional<_Tp>& __x, const optional<_Tp>& __y)
> -{
> - if (!static_cast<bool>(__y))
> - return false;
> - if (!static_cast<bool>(__x))
> - return true;
> - return *__x < *__y;
> -}
> -
> -template <class _Tp>
> -inline _LIBCPP_INLINE_VISIBILITY
> -constexpr
> -bool
> -operator>(const optional<_Tp>& __x, const optional<_Tp>& __y)
> -{
> - return __y < __x;
> -}
> -
> -template <class _Tp>
> -inline _LIBCPP_INLINE_VISIBILITY
> -constexpr
> -bool
> -operator<=(const optional<_Tp>& __x, const optional<_Tp>& __y)
> -{
> - return !(__y < __x);
> -}
> -
> -template <class _Tp>
> -inline _LIBCPP_INLINE_VISIBILITY
> -constexpr
> -bool
> -operator>=(const optional<_Tp>& __x, const optional<_Tp>& __y)
> -{
> - return !(__x < __y);
> -}
> -
> -
> -// Comparisons with nullopt
> -template <class _Tp>
> -inline _LIBCPP_INLINE_VISIBILITY
> -constexpr
> -bool
> -operator==(const optional<_Tp>& __x, nullopt_t) noexcept
> -{
> - return !static_cast<bool>(__x);
> -}
> -
> -template <class _Tp>
> -inline _LIBCPP_INLINE_VISIBILITY
> -constexpr
> -bool
> -operator==(nullopt_t, const optional<_Tp>& __x) noexcept
> -{
> - return !static_cast<bool>(__x);
> -}
> -
> -template <class _Tp>
> -inline _LIBCPP_INLINE_VISIBILITY
> -constexpr
> -bool
> -operator!=(const optional<_Tp>& __x, nullopt_t) noexcept
> -{
> - return static_cast<bool>(__x);
> -}
> -
> -template <class _Tp>
> -inline _LIBCPP_INLINE_VISIBILITY
> -constexpr
> -bool
> -operator!=(nullopt_t, const optional<_Tp>& __x) noexcept
> -{
> - return static_cast<bool>(__x);
> -}
> -
> -template <class _Tp>
> -inline _LIBCPP_INLINE_VISIBILITY
> -constexpr
> -bool
> -operator<(const optional<_Tp>&, nullopt_t) noexcept
> -{
> - return false;
> -}
> -
> -template <class _Tp>
> -inline _LIBCPP_INLINE_VISIBILITY
> -constexpr
> -bool
> -operator<(nullopt_t, const optional<_Tp>& __x) noexcept
> -{
> - return static_cast<bool>(__x);
> -}
> -
> -template <class _Tp>
> -inline _LIBCPP_INLINE_VISIBILITY
> -constexpr
> -bool
> -operator<=(const optional<_Tp>& __x, nullopt_t) noexcept
> -{
> - return !static_cast<bool>(__x);
> -}
> -
> -template <class _Tp>
> -inline _LIBCPP_INLINE_VISIBILITY
> -constexpr
> -bool
> -operator<=(nullopt_t, const optional<_Tp>&) noexcept
> -{
> - return true;
> -}
> -
> -template <class _Tp>
> -inline _LIBCPP_INLINE_VISIBILITY
> -constexpr
> -bool
> -operator>(const optional<_Tp>& __x, nullopt_t) noexcept
> -{
> - return static_cast<bool>(__x);
> -}
> -
> -template <class _Tp>
> -inline _LIBCPP_INLINE_VISIBILITY
> -constexpr
> -bool
> -operator>(nullopt_t, const optional<_Tp>&) noexcept
> -{
> - return false;
> -}
> -
> -template <class _Tp>
> -inline _LIBCPP_INLINE_VISIBILITY
> -constexpr
> -bool
> -operator>=(const optional<_Tp>&, nullopt_t) noexcept
> -{
> - return true;
> -}
> -
> -template <class _Tp>
> -inline _LIBCPP_INLINE_VISIBILITY
> -constexpr
> -bool
> -operator>=(nullopt_t, const optional<_Tp>& __x) noexcept
> -{
> - return !static_cast<bool>(__x);
> -}
> -
> -// Comparisons with T
> -template <class _Tp>
> -inline _LIBCPP_INLINE_VISIBILITY
> -constexpr
> -bool
> -operator==(const optional<_Tp>& __x, const _Tp& __v)
> -{
> - return static_cast<bool>(__x) ? *__x == __v : false;
> -}
> -
> -template <class _Tp>
> -inline _LIBCPP_INLINE_VISIBILITY
> -constexpr
> -bool
> -operator==(const _Tp& __v, const optional<_Tp>& __x)
> -{
> - return static_cast<bool>(__x) ? *__x == __v : false;
> -}
> -
> -template <class _Tp>
> -inline _LIBCPP_INLINE_VISIBILITY
> -constexpr
> -bool
> -operator!=(const optional<_Tp>& __x, const _Tp& __v)
> -{
> - return static_cast<bool>(__x) ? !(*__x == __v) : true;
> -}
> -
> -template <class _Tp>
> -inline _LIBCPP_INLINE_VISIBILITY
> -constexpr
> -bool
> -operator!=(const _Tp& __v, const optional<_Tp>& __x)
> -{
> - return static_cast<bool>(__x) ? !(*__x == __v) : true;
> -}
> -
> -template <class _Tp>
> -inline _LIBCPP_INLINE_VISIBILITY
> -constexpr
> -bool
> -operator<(const optional<_Tp>& __x, const _Tp& __v)
> -{
> - return static_cast<bool>(__x) ? less<_Tp>{}(*__x, __v) : true;
> -}
> -
> -template <class _Tp>
> -inline _LIBCPP_INLINE_VISIBILITY
> -constexpr
> -bool
> -operator<(const _Tp& __v, const optional<_Tp>& __x)
> -{
> - return static_cast<bool>(__x) ? less<_Tp>{}(__v, *__x) : false;
> -}
> -
> -template <class _Tp>
> -inline _LIBCPP_INLINE_VISIBILITY
> -constexpr
> -bool
> -operator<=(const optional<_Tp>& __x, const _Tp& __v)
> -{
> - return !(__x > __v);
> -}
> -
> -template <class _Tp>
> -inline _LIBCPP_INLINE_VISIBILITY
> -constexpr
> -bool
> -operator<=(const _Tp& __v, const optional<_Tp>& __x)
> -{
> - return !(__v > __x);
> -}
> -
> -template <class _Tp>
> -inline _LIBCPP_INLINE_VISIBILITY
> -constexpr
> -bool
> -operator>(const optional<_Tp>& __x, const _Tp& __v)
> -{
> - return static_cast<bool>(__x) ? __v < __x : false;
> -}
> -
> -template <class _Tp>
> -inline _LIBCPP_INLINE_VISIBILITY
> -constexpr
> -bool
> -operator>(const _Tp& __v, const optional<_Tp>& __x)
> -{
> - return static_cast<bool>(__x) ? __x < __v : true;
> -}
> -
> -template <class _Tp>
> -inline _LIBCPP_INLINE_VISIBILITY
> -constexpr
> -bool
> -operator>=(const optional<_Tp>& __x, const _Tp& __v)
> -{
> - return !(__x < __v);
> -}
> -
> -template <class _Tp>
> -inline _LIBCPP_INLINE_VISIBILITY
> -constexpr
> -bool
> -operator>=(const _Tp& __v, const optional<_Tp>& __x)
> -{
> - return !(__v < __x);
> -}
> -
> -
> -template <class _Tp>
> -inline _LIBCPP_INLINE_VISIBILITY
> -void
> -swap(optional<_Tp>& __x, optional<_Tp>& __y) noexcept(noexcept(__x.swap(__
> y)))
> -{
> - __x.swap(__y);
> -}
> -
> -template <class _Tp>
> -inline _LIBCPP_INLINE_VISIBILITY
> -constexpr
> -optional<typename decay<_Tp>::type>
> -make_optional(_Tp&& __v)
> -{
> - return optional<typename decay<_Tp>::type>(_VSTD::forward<_Tp>(__v));
> -}
> -
> -_LIBCPP_END_NAMESPACE_LFTS
> -
> -_LIBCPP_BEGIN_NAMESPACE_STD
> -
> -template <class _Tp>
> -struct _LIBCPP_TEMPLATE_VIS hash<std::experimental::optional<_Tp> >
> -{
> - typedef std::experimental::optional<_Tp> argument_type;
> - typedef size_t result_type;
> -
> - _LIBCPP_INLINE_VISIBILITY
> - result_type operator()(const argument_type& __opt) const _NOEXCEPT
> - {
> - return static_cast<bool>(__opt) ? hash<_Tp>()(*__opt) : 0;
> - }
> -};
> -
> -_LIBCPP_END_NAMESPACE_STD
> -
> -#endif // _LIBCPP_STD_VER > 11
> -
> -_LIBCPP_POP_MACROS
> -
> -#endif // _LIBCPP_EXPERIMENTAL_OPTIONAL
> +#error "<experimental/optional> has been removed. Use <optional> instead."
>
> Modified: libcxx/trunk/include/module.modulemap
> URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/
> module.modulemap?rev=323971&r1=323970&r2=323971&view=diff
> ============================================================
> ==================
> --- libcxx/trunk/include/module.modulemap (original)
> +++ libcxx/trunk/include/module.modulemap Thu Feb 1 06:54:25 2018
> @@ -546,10 +546,6 @@ module std [system] {
> header "experimental/numeric"
> export *
> }
> - module optional {
> - header "experimental/optional"
> - export *
> - }
> module propagate_const {
> header "experimental/propagate_const"
> export *
>
> Modified: libcxx/trunk/src/optional.cpp
> URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/src/
> optional.cpp?rev=323971&r1=323970&r2=323971&view=diff
> ============================================================
> ==================
> --- libcxx/trunk/src/optional.cpp (original)
> +++ libcxx/trunk/src/optional.cpp Thu Feb 1 06:54:25 2018
> @@ -8,7 +8,6 @@
> //===-------------------------------------------------------
> ---------------===//
>
> #include "optional"
> -#include "experimental/optional"
>
> namespace std
> {
> @@ -21,8 +20,3 @@ const char* bad_optional_access::what()
>
> } // std
>
> -_LIBCPP_BEGIN_NAMESPACE_EXPERIMENTAL
> -
> -bad_optional_access::~bad_optional_access() _NOEXCEPT = default;
> -
> -_LIBCPP_END_NAMESPACE_EXPERIMENTAL
>
> Modified: libcxx/trunk/test/libcxx/double_include.sh.cpp
> URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/
> libcxx/double_include.sh.cpp?rev=323971&r1=323970&r2=323971&view=diff
> ============================================================
> ==================
> --- libcxx/trunk/test/libcxx/double_include.sh.cpp (original)
> +++ libcxx/trunk/test/libcxx/double_include.sh.cpp Thu Feb 1 06:54:25
> 2018
> @@ -150,7 +150,6 @@
> #include <experimental/map>
> #include <experimental/memory_resource>
> #include <experimental/numeric>
> -#include <experimental/optional>
> #include <experimental/propagate_const>
> #include <experimental/ratio>
> #include <experimental/regex>
>
> Modified: libcxx/trunk/test/libcxx/min_max_macros.sh.cpp
> URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/
> libcxx/min_max_macros.sh.cpp?rev=323971&r1=323970&r2=323971&view=diff
> ============================================================
> ==================
> --- libcxx/trunk/test/libcxx/min_max_macros.sh.cpp (original)
> +++ libcxx/trunk/test/libcxx/min_max_macros.sh.cpp Thu Feb 1 06:54:25
> 2018
> @@ -261,8 +261,6 @@ TEST_MACROS();
> TEST_MACROS();
> #include <experimental/numeric>
> TEST_MACROS();
> -#include <experimental/optional>
> -TEST_MACROS();
> #include <experimental/propagate_const>
> TEST_MACROS();
> #include <experimental/ratio>
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20180222/9bba6778/attachment-0001.html>
More information about the cfe-commits
mailing list