inline constexpr unsigned max_pointer_bits_available = see below;
constexpr unsigned pointer_bits_available(size_t alignment);
template<class T> constexpr unsigned tag-bit-width(T v) noexcept;
constexpr pointer_tag_pair() noexcept;
template<tagging-compatible-pointee<pointer_type, bits_requested> U>
constexpr pointer_tag_pair(U* p, tag_type t);
constexpr pointer_tag_pair(nullptr_t p, tag_type t);
template<size_t PromisedAlignment,
tagging-compatible-pointee<pointer_type, bits_requested, PromisedAlignment> U>
static constexpr pointer_tag_pair from_overaligned(U* p, tag_type t);
using tagged_pointer_type = see below;
tagged_pointer_type tagged_pointer() const noexcept;
static pointer_tag_pair from_tagged(tagged_pointer_type p) noexcept;
constexpr pointer_type pointer() const noexcept;
constexpr tag_type tag() const noexcept;
constexpr void swap(pointer_tag_pair& o) noexcept;
friend constexpr auto operator<=>(pointer_tag_pair lhs, pointer_tag_pair rhs)
noexcept requires three_way_comparable<tag_type>;
friend constexpr bool operator==(pointer_tag_pair lhs, pointer_tag_pair rhs)
noexcept requires equality_comparable<tag_type>;
template<class Ptr, unsigned BitsRequested, class TagT>
constexpr tuple_element_t<I, pointer_tag_pair<Ptr, BitsRequested, TagT>>
get(pointer_tag_pair<Ptr, BitsRequested, TagT> p) noexcept;