Add address_of

This commit is contained in:
2025-03-26 18:54:49 +01:00
parent 95598e24e1
commit 2c457c4275
4 changed files with 16 additions and 3 deletions

View File

@ -17,6 +17,17 @@ constexpr void* operator new(size_t, void* ptr) noexcept
namespace asl namespace asl
{ {
template<typename T>
[[nodiscard]]
constexpr T* address_of(T& obj)
{
return __builtin_addressof(obj);
}
template<typename T>
void address_of(const T&& obj) = delete;
[[nodiscard]]
constexpr isize_t memcmp(const void* a, const void* b, isize_t size) constexpr isize_t memcmp(const void* a, const void* b, isize_t size)
{ {
return __builtin_memcmp(a, b, static_cast<size_t>(size)); return __builtin_memcmp(a, b, static_cast<size_t>(size));

View File

@ -97,6 +97,7 @@ cc_library(
], ],
deps = [ deps = [
"//asl/base", "//asl/base",
"//asl/memory",
], ],
visibility = ["//visibility:public"], visibility = ["//visibility:public"],
) )

View File

@ -7,6 +7,7 @@
#include "asl/base/utility.hpp" #include "asl/base/utility.hpp"
#include "asl/base/meta.hpp" #include "asl/base/meta.hpp"
#include "asl/base/functional.hpp" #include "asl/base/functional.hpp"
#include "asl/memory/memory.hpp"
namespace asl namespace asl
{ {
@ -43,7 +44,7 @@ public:
&& same_as<invoke_result_t<T, Args...>, R> && same_as<invoke_result_t<T, Args...>, R>
) )
// NOLINTNEXTLINE(*cast*) // NOLINTNEXTLINE(*cast*)
: m_obj{const_cast<void*>(reinterpret_cast<const void*>(&t))} : m_obj{const_cast<void*>(reinterpret_cast<const void*>(address_of(t)))}
, m_invoke{invoke<un_ref_t<T>>} , m_invoke{invoke<un_ref_t<T>>}
{} {}
@ -56,7 +57,7 @@ public:
) )
{ {
// NOLINTNEXTLINE(*cast*) // NOLINTNEXTLINE(*cast*)
m_obj = const_cast<void*>(reinterpret_cast<const void*>(&t)); m_obj = const_cast<void*>(reinterpret_cast<const void*>(address_of(t)));
m_invoke = invoke<un_ref_t<T>>; m_invoke = invoke<un_ref_t<T>>;
return *this; return *this;

View File

@ -1 +1 @@
Separate memory and allocator