tetl 0.1.0
Embedded Template Library
Loading...
Searching...
No Matches
default_delete.hpp
Go to the documentation of this file.
1// SPDX-License-Identifier: BSL-1.0
2// SPDX-FileCopyrightText: Copyright (C) 2019 Tobias Hienzsch
3
4#ifndef TETL_MEMORY_DEFAULT_DELETE_HPP
5#define TETL_MEMORY_DEFAULT_DELETE_HPP
6
7#include <etl/_config/all.hpp>
8
9#include <etl/_type_traits/is_convertible.hpp>
10#include <etl/_type_traits/is_function.hpp>
11#include <etl/_type_traits/is_void.hpp>
12
13namespace etl {
14
15template <typename T>
17 constexpr default_delete() noexcept = default;
18
19 template <typename U>
20 requires(is_convertible_v<U*, T*>)
21 default_delete(default_delete<U> const& /*unused*/) noexcept
22 {
23 }
24
25 auto operator()(T* ptr) const noexcept -> void
26 {
27 delete ptr;
28 }
29
30private:
31 static_assert(!is_function_v<T>);
32 static_assert(!is_void_v<T>);
33 static_assert(sizeof(T));
34};
35
36template <typename T>
37struct default_delete<T[]> {
38 constexpr default_delete() noexcept = default;
39
40 template <typename U>
41 requires(is_convertible_v<U (*)[], T (*)[]>)
42 default_delete(default_delete<U[]> const& /*unused*/) noexcept
43 {
44 }
45
46 template <typename U>
47 requires(is_convertible_v<U (*)[], T (*)[]>)
48 auto operator()(U* ptr) const noexcept -> void
49 {
50 delete[] ptr;
51 }
52
53private:
54 static_assert(sizeof(T));
55 static_assert(not is_void_v<T>);
56};
57
58} // namespace etl
59
60#endif // TETL_MEMORY_DEFAULT_DELETE_HPP
Definition adjacent_find.hpp:9
default_delete(default_delete< U[]> const &) noexcept
Definition default_delete.hpp:42
auto operator()(U *ptr) const noexcept -> void
Definition default_delete.hpp:48
constexpr default_delete() noexcept=default
Definition default_delete.hpp:16
default_delete(default_delete< U > const &) noexcept
Definition default_delete.hpp:21
auto operator()(T *ptr) const noexcept -> void
Definition default_delete.hpp:25
constexpr default_delete() noexcept=default