xenium
aligned_object.hpp
1//
2// Copyright (c) 2018-2020 Manuel Pöter.
3// Licensed under the MIT License. See LICENSE file in the project root for full license information.
4//
5
6#ifndef XENIUM_ALIGNED_OBJECT_HPP
7#define XENIUM_ALIGNED_OBJECT_HPP
8
9namespace xenium {
10
24 template <typename Derived, std::size_t Alignment = 0>
26 static void* operator new(size_t sz) {
27 return ::operator new(sz, alignment());
28 }
29
30 static void operator delete(void* p) {
31 ::operator delete(p, alignment());
32 }
33 private:
34 static constexpr std::align_val_t alignment() {
35 return static_cast<std::align_val_t>(Alignment == 0 ? std::alignment_of<Derived>() : Alignment);
36 }
37 };
38}
39
40#endif
A small helper class for correctly aligned dynamic allocations of over-aligned types.
Definition: aligned_object.hpp:25