di 0.1.0
Loading...
Searching...
No Matches
deallocate.h
Go to the documentation of this file.
1#pragma once
2
4#include "di/types/prelude.h"
5
6namespace di::container {
7namespace detail {
8 struct DeallocateFunction {
9 template<typename A>
10 constexpr void operator()(A& allocator, void* data, usize size, usize alignment) const
11 requires(concepts::TagInvocable<DeallocateFunction, A&, void*, usize, usize> ||
12 requires { allocator.deallocate(data, size, alignment); })
13 {
14 if constexpr (concepts::TagInvocable<DeallocateFunction, A&, void*, usize, usize>) {
15 (void) function::tag_invoke(*this, allocator, data, size, alignment);
16 } else {
17 (void) allocator.deallocate(data, size, alignment);
18 }
19 }
20 };
21}
22
23constexpr inline auto deallocate = detail::DeallocateFunction {};
24}
25
26namespace di {
28}
Definition sequence.h:12
constexpr auto deallocate
Definition deallocate.h:23
constexpr auto size
Definition size.h:62
constexpr auto data
Definition data.h:51
constexpr tag_invoke_detail::TagInvokeFn tag_invoke
Definition tag_invoke.h:22
size_t usize
Definition integers.h:33
Definition any_storable.h:9