| 32 | // copy & assign |
| 33 | template <typename Dst, typename Src> |
| 34 | SKR_INLINE void copy(Dst* dst, Src* src) |
| 35 | { |
| 36 | if ((void*)dst != (void*)src) |
| 37 | { |
| 38 | if constexpr (MemoryTraits<Dst, Src>::use_copy) |
| 39 | { |
| 40 | new (dst) Dst(*src); |
| 41 | } |
| 42 | else |
| 43 | { |
| 44 | static_assert(sizeof(Dst) == sizeof(Src)); |
| 45 | std::memcpy(dst, src, sizeof(Src)); |
| 46 | } |
| 47 | } |
| 48 | } |
| 49 | template <typename Dst, typename Src> |
| 50 | SKR_INLINE void assign(Dst* dst, Src* src) |
| 51 | { |