17 constexpr explicit constexpr_ptr(
const from *ptr) noexcept : p(ptr) {}
19 constexpr to operator*()
const noexcept {
return static_cast<to
>(*p); }
21 constexpr constexpr_ptr &operator++()
noexcept {
26 constexpr constexpr_ptr operator++(
int)
noexcept {
32 constexpr constexpr_ptr &operator--()
noexcept {
37 constexpr constexpr_ptr operator--(
int)
noexcept {
43 constexpr constexpr_ptr &operator+=(std::ptrdiff_t n)
noexcept {
48 constexpr constexpr_ptr &operator-=(std::ptrdiff_t n)
noexcept {
53 constexpr constexpr_ptr operator+(std::ptrdiff_t n)
const noexcept {
54 return constexpr_ptr{p + n};
57 constexpr constexpr_ptr operator-(std::ptrdiff_t n)
const noexcept {
58 return constexpr_ptr{p - n};
61 constexpr std::ptrdiff_t operator-(
const constexpr_ptr &o)
const noexcept {
65 constexpr to operator[](std::ptrdiff_t n)
const noexcept {
66 return static_cast<to
>(*(p + n));
71 constexpr operator const void *()
const noexcept {
return p; }
101template <
typename SrcType,
typename TargetType>
struct constexpr_write_ptr {
102 constexpr explicit constexpr_write_ptr(TargetType *raw) : p(raw) {}
109 operator[](std::ptrdiff_t n)
const {
113 constexpr constexpr_write_ptr &operator++() {
118 constexpr constexpr_write_ptr operator++(
int) {
119 constexpr_write_ptr old = *
this;
124 constexpr std::ptrdiff_t operator-(
const constexpr_write_ptr &other)
const {