#include #include "pointer.h" namespace exopt::ptr { static_assert(address_bits_v == sizeof(address_t) * CHAR_BIT, "Bad CHAR_BIT: Must be 8"); std::runtime_error NullDerefException<>::as_runtime() &&noexcept { return std::runtime_error{std::string{message()} }; } namespace details [[gnu::visibility("internal")]] { [[gnu::const]] address_t hash(const opaque_t* ptr) noexcept { static_assert((address_bits_v & (64 | 32)) == address_bits_v, "Cannot hash pointer with address that is not 64 or 32 bits wide"); //TODO: Find good pointer hashing algorithm, or use crc64 (if constexpr(address_bits_v == 64), else crc32.) } } }