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
{
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)
{
return __builtin_memcmp(a, b, static_cast<size_t>(size));

View File

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

View File

@ -7,6 +7,7 @@
#include "asl/base/utility.hpp"
#include "asl/base/meta.hpp"
#include "asl/base/functional.hpp"
#include "asl/memory/memory.hpp"
namespace asl
{
@ -43,7 +44,7 @@ public:
&& same_as<invoke_result_t<T, Args...>, R>
)
// 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>>}
{}
@ -56,7 +57,7 @@ public:
)
{
// 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>>;
return *this;

View File

@ -1 +1 @@
Separate memory and allocator