Add address_of
This commit is contained in:
@ -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));
|
||||
|
@ -97,6 +97,7 @@ cc_library(
|
||||
],
|
||||
deps = [
|
||||
"//asl/base",
|
||||
"//asl/memory",
|
||||
],
|
||||
visibility = ["//visibility:public"],
|
||||
)
|
||||
|
@ -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;
|
||||
|
Reference in New Issue
Block a user