69class PointerTo :
public PointerToBase<T> {
71 typedef typename PointerToBase<T>::To To;
73 ALWAYS_INLINE
constexpr PointerTo()
noexcept =
default;
74 ALWAYS_INLINE
explicit constexpr PointerTo(std::nullptr_t)
noexcept {}
75 ALWAYS_INLINE PointerTo(To *ptr)
noexcept;
76 INLINE PointerTo(
const PointerTo<T> ©);
79 INLINE PointerTo(PointerTo<T> &&from)
noexcept;
82 ALWAYS_INLINE
explicit PointerTo(Y *ptr)
noexcept;
84 ALWAYS_INLINE PointerTo(
const PointerTo<Y> &r)
noexcept;
86 ALWAYS_INLINE PointerTo(PointerTo<Y> &&r)
noexcept;
88 INLINE PointerTo<T> &operator = (PointerTo<T> &&from)
noexcept;
91 ALWAYS_INLINE PointerTo<T> &operator = (
const PointerTo<Y> &r)
noexcept;
93 ALWAYS_INLINE PointerTo<T> &operator = (PointerTo<Y> &&r)
noexcept;
95 constexpr To &operator *()
const noexcept;
96 constexpr To *operator -> ()
const noexcept;
98 constexpr operator T *()
const noexcept;
115 constexpr To *
p()
const noexcept;
117 INLINE PointerTo<T> &operator = (To *ptr);
118 INLINE PointerTo<T> &operator = (
const PointerTo<T> ©);
144class ConstPointerTo :
public PointerToBase<T> {
146 typedef typename PointerToBase<T>::To To;
148 ALWAYS_INLINE
constexpr ConstPointerTo()
noexcept =
default;
149 ALWAYS_INLINE
explicit constexpr ConstPointerTo(std::nullptr_t)
noexcept {}
150 ALWAYS_INLINE ConstPointerTo(
const To *ptr)
noexcept;
152 INLINE ConstPointerTo(
const ConstPointerTo<T> ©);
156 INLINE ConstPointerTo(ConstPointerTo<T> &&from)
noexcept;
159 ALWAYS_INLINE
explicit ConstPointerTo(
const Y *ptr)
noexcept;
161 ALWAYS_INLINE ConstPointerTo(
const PointerTo<Y> &r)
noexcept;
163 ALWAYS_INLINE ConstPointerTo(
const ConstPointerTo<Y> &r)
noexcept;
165 ALWAYS_INLINE ConstPointerTo(
PointerTo<Y> &&r)
noexcept;
167 ALWAYS_INLINE ConstPointerTo(ConstPointerTo<Y> &&r)
noexcept;
169 INLINE ConstPointerTo<T> &operator = (
PointerTo<T> &&from)
noexcept;
170 INLINE ConstPointerTo<T> &operator = (ConstPointerTo<T> &&from)
noexcept;
173 ALWAYS_INLINE ConstPointerTo<T> &operator = (
const PointerTo<Y> &r)
noexcept;
175 ALWAYS_INLINE ConstPointerTo<T> &operator = (
const ConstPointerTo<Y> &r)
noexcept;
177 ALWAYS_INLINE ConstPointerTo<T> &operator = (
PointerTo<Y> &&r)
noexcept;
179 ALWAYS_INLINE ConstPointerTo<T> &operator = (ConstPointerTo<Y> &&r)
noexcept;
181 constexpr const To &operator *()
const noexcept;
182 constexpr const To *operator -> ()
const noexcept;
183 constexpr operator const T *()
const noexcept;
188 constexpr const To *
p() const noexcept;
190 INLINE ConstPointerTo<T> &operator = (const To *ptr);
191 INLINE ConstPointerTo<T> &operator = (const
PointerTo<T> ©);
192 INLINE ConstPointerTo<T> &operator = (const ConstPointerTo<T> ©);