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 static_assert(not is_function_v<T>);
18 static_assert(not is_void_v<T>);
19 static_assert(sizeof(T));
20
21 constexpr default_delete() noexcept = default;
22
23 template <typename U>
24 requires(is_convertible_v<U*, T*>)
25 default_delete(default_delete<U> const& /*unused*/) noexcept
26 {
27 }
28
29 auto operator()(T* ptr) const noexcept -> void
30 {
31 delete ptr;
32 }
33};
34
35template <typename T>
36struct default_delete<T[]> {
37 constexpr default_delete() noexcept = default;
38
39 template <typename U>
40 requires(is_convertible_v<U (*)[], T (*)[]>)
41 default_delete(default_delete<U[]> const& /*unused*/) noexcept
42 {
43 }
44
45 template <typename U>
46 requires(is_convertible_v<U (*)[], T (*)[]>)
47 auto operator()(U* ptr) const noexcept -> void
48 {
49 delete[] ptr;
50 }
51
52private:
53 static_assert(sizeof(T));
54 static_assert(not is_void_v<T>);
55};
56
57} // namespace etl
58
59#endif // TETL_MEMORY_DEFAULT_DELETE_HPP
Definition adjacent_find.hpp:9
default_delete(default_delete< U[]> const &) noexcept
Definition default_delete.hpp:41
auto operator()(U *ptr) const noexcept -> void
Definition default_delete.hpp:47
constexpr default_delete() noexcept=default
Definition default_delete.hpp:16
default_delete(default_delete< U > const &) noexcept
Definition default_delete.hpp:25
auto operator()(T *ptr) const noexcept -> void
Definition default_delete.hpp:29
constexpr default_delete() noexcept=default