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
3#ifndef TETL_MEMORY_DEFAULT_DELETE_HPP
4#define TETL_MEMORY_DEFAULT_DELETE_HPP
5
6#include <etl/_config/all.hpp>
7
11
12namespace etl {
13
14template <typename T>
16 constexpr default_delete() noexcept = default;
17
18 template <typename U>
19 requires(is_convertible_v<U*, T*>)
20 default_delete(default_delete<U> const& /*unused*/) noexcept
21 {
22 }
23
24 auto operator()(T* ptr) const noexcept -> void { delete ptr; }
25
26private:
27 static_assert(!is_function_v<T>);
28 static_assert(!is_void_v<T>);
29 static_assert(sizeof(T));
30};
31
32template <typename T>
33struct default_delete<T[]> {
34 constexpr default_delete() noexcept = default;
35
36 template <typename U>
37 requires(is_convertible_v<U (*)[], T (*)[]>)
38 default_delete(default_delete<U[]> const& /*unused*/) noexcept
39 {
40 }
41
42 template <typename U>
43 requires(is_convertible_v<U (*)[], T (*)[]>)
44 auto operator()(U* ptr) const noexcept -> void
45 {
46 delete[] ptr;
47 }
48
49private:
50 static_assert(sizeof(T));
51 static_assert(not is_void_v<T>);
52};
53
54} // namespace etl
55
56#endif // TETL_MEMORY_DEFAULT_DELETE_HPP
Definition adjacent_find.hpp:8
constexpr bool is_void_v
Definition is_void.hpp:16
constexpr bool is_function_v
Checks whether T is a function type. Types like etl::inplace_function, lambdas, classes with overload...
Definition is_function.hpp:35
constexpr bool is_convertible_v
Definition is_convertible.hpp:46
auto operator()(U *ptr) const noexcept -> void
Definition default_delete.hpp:44
constexpr default_delete() noexcept=default
auto operator()(T *ptr) const noexcept -> void
Definition default_delete.hpp:24
constexpr default_delete() noexcept=default