diff options
author | Steven Le Rouzic <steven.lerouzic@gmail.com> | 2024-12-27 19:19:40 +0100 |
---|---|---|
committer | Steven Le Rouzic <steven.lerouzic@gmail.com> | 2024-12-28 12:53:01 +0100 |
commit | 5642cba31b5f7610eddf552b1acd984cf718340d (patch) | |
tree | 40dcec36191f4ed8040c6b6f7525cee978b18fa1 /asl/memory.hpp | |
parent | 006a09335306da53f32b4662ebc77866427b6841 (diff) |
Rework some metaprogramming stuff
Diffstat (limited to 'asl/memory.hpp')
-rw-r--r-- | asl/memory.hpp | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/asl/memory.hpp b/asl/memory.hpp index 7601a7f..0441c8c 100644 --- a/asl/memory.hpp +++ b/asl/memory.hpp @@ -56,24 +56,23 @@ constexpr void destruct_n(T* data, isize_t n) }
}
-template<typename T>
+template<move_constructible T>
constexpr void relocate_uninit_n(T* to, T* from, isize_t n)
{
- if constexpr (trivially_copyable<T>)
+ if constexpr (trivially_move_constructible<T>)
{
+ static_assert(trivially_destructible<T>);
memcpy(to, from, size_of<T> * n);
}
else
{
- static_assert(move_constructible<T>);
for (isize_t i = 0; i < n; ++i)
{
// NOLINTNEXTLINE(*-pointer-arithmetic)
construct_at<T>(to + i, ASL_MOVE(from[i]));
}
+ destruct_n(from, n);
}
-
- destruct_n(from, n);
}
} // namespace asl
|