34#ifndef _GLIBCXX_EXPERIMENTAL_MEMORY
35#define _GLIBCXX_EXPERIMENTAL_MEMORY 1
38#pragma GCC system_header
43#if __cplusplus >= 201402L
50namespace std _GLIBCXX_VISIBILITY(default)
52_GLIBCXX_BEGIN_NAMESPACE_VERSION
56inline namespace fundamentals_v2
58#define __cpp_lib_experimental_observer_ptr 201411
60 template <
typename _Tp>
65 using element_type = _Tp;
66 using __pointer = add_pointer_t<_Tp>;
67 using __reference = add_lvalue_reference_t<_Tp>;
71 constexpr observer_ptr() noexcept
76 constexpr observer_ptr(nullptr_t) noexcept
80 constexpr explicit observer_ptr(__pointer __p) noexcept
85 template <
typename _Up,
86 typename =
typename enable_if<
87 is_convertible<typename add_pointer<_Up>::type, __pointer
90 constexpr observer_ptr(observer_ptr<_Up> __p) noexcept
102 constexpr __reference
109 operator->() const noexcept
114 constexpr explicit operator bool() const noexcept
116 return get() !=
nullptr;
120 constexpr explicit operator __pointer() const noexcept
129 __pointer __tmp = get();
135 reset(__pointer __p =
nullptr) noexcept
141 swap(observer_ptr& __p)
noexcept
143 std::swap(__t, __p.__t);
150 template<
typename _Tp>
152 swap(observer_ptr<_Tp>& __p1, observer_ptr<_Tp>& __p2)
noexcept
157 template<
typename _Tp>
159 make_observer(_Tp* __p)
noexcept
161 return observer_ptr<_Tp>(__p);
164 template<
typename _Tp,
typename _Up>
166 operator==(observer_ptr<_Tp> __p1, observer_ptr<_Up> __p2)
168 return __p1.get() == __p2.get();
171 template<
typename _Tp,
typename _Up>
173 operator!=(observer_ptr<_Tp> __p1, observer_ptr<_Up> __p2)
175 return !(__p1 == __p2);
178 template<
typename _Tp>
180 operator==(observer_ptr<_Tp> __p, nullptr_t)
noexcept
185 template<
typename _Tp>
187 operator==(nullptr_t, observer_ptr<_Tp> __p)
noexcept
192 template<
typename _Tp>
194 operator!=(observer_ptr<_Tp> __p, nullptr_t)
noexcept
199 template<
typename _Tp>
201 operator!=(nullptr_t, observer_ptr<_Tp> __p)
noexcept
206 template<
typename _Tp,
typename _Up>
208 operator<(observer_ptr<_Tp> __p1, observer_ptr<_Up> __p2)
211 typename add_pointer<_Up>::type
213 >{}(__p1.get(), __p2.get());
216 template<
typename _Tp,
typename _Up>
218 operator>(observer_ptr<_Tp> __p1, observer_ptr<_Up> __p2)
223 template<
typename _Tp,
typename _Up>
225 operator<=(observer_ptr<_Tp> __p1, observer_ptr<_Up> __p2)
227 return !(__p2 < __p1);
230 template<
typename _Tp,
typename _Up>
232 operator>=(observer_ptr<_Tp> __p1, observer_ptr<_Up> __p2)
234 return !(__p1 < __p2);
239template <
typename _Tp>
240 struct hash<experimental::observer_ptr<_Tp>>
242 using result_type = size_t;
243 using argument_type = experimental::observer_ptr<_Tp>;
246 operator()(
const experimental::observer_ptr<_Tp>& __t)
const
247 noexcept(
noexcept(hash<typename add_pointer<_Tp>::type> {}(__t.get())))
249 return hash<typename add_pointer<_Tp>::type> {}(__t.get());
254_GLIBCXX_END_NAMESPACE_VERSION
constexpr bool operator<=(const duration< _Rep1, _Period1 > &__lhs, const duration< _Rep2, _Period2 > &__rhs)
constexpr bool operator>=(const duration< _Rep1, _Period1 > &__lhs, const duration< _Rep2, _Period2 > &__rhs)
constexpr bool operator<(const duration< _Rep1, _Period1 > &__lhs, const duration< _Rep2, _Period2 > &__rhs)
constexpr bool operator>(const duration< _Rep1, _Period1 > &__lhs, const duration< _Rep2, _Period2 > &__rhs)
constexpr complex< _Tp > operator*(const complex< _Tp > &__x, const complex< _Tp > &__y)
Return new complex value x times y.
ISO C++ entities toplevel namespace is std.
One of the comparison functors.