#ifndef __GBLIBCPP_MEMORY__ #define __GBLIBCPP_MEMORY__ #include #include #include #include #include namespace std { template constexpr T* addressof(T& arg) noexcept { return __builtin_addressof(arg); } // template // constexpr enable_if_t>, T*> // addressof(T& arg) noexcept // { // return &arg; // } // template // constexpr enable_if_t>, T*> // addressof(T& arg) noexcept // { // return reinterpret_cast( // &const_cast( // reinterpret_cast(arg) // ) // ); // } template const T* addressof(const T&&) = delete; namespace __helpers { template struct pointer_difference_type { using type = std::ptrdiff_t; }; template struct pointer_difference_type> { using type = typename Ptr::difference_type; }; template using pointer_difference_type_t = typename pointer_difference_type::type; template struct rebind; template