stdex
Additional custom or not Standard C++ covered algorithms
Loading...
Searching...
No Matches
memory.hpp
1/*
2 SPDX-License-Identifier: MIT
3 Copyright © 2023 Amebis
4*/
5
6#pragma once
7
8#include <memory>
9
10namespace stdex
11{
15 template <class T>
16 struct no_delete {
17 constexpr no_delete() noexcept = default;
18
19 template <class T2, std::enable_if_t<std::is_convertible_v<T2*, T*>, int> = 0>
20 inline no_delete(const no_delete<T2>&) noexcept {}
21
22 inline void operator()(T* p) const noexcept { p; }
23 };
24
28 template <class T>
29 struct no_delete<T[]> {
30 constexpr no_delete() noexcept = default;
31
32 template <class _Uty, std::enable_if_t<std::is_convertible_v<_Uty(*)[], T(*)[]>, int> = 0>
33 inline no_delete(const no_delete<_Uty[]>&) noexcept {}
34
35 template <class _Uty, std::enable_if_t<std::is_convertible_v<_Uty(*)[], T(*)[]>, int> = 0>
36 inline void operator()(_Uty* p) const noexcept { p; }
37 };
38
47 template <class T>
48 inline std::shared_ptr<T> make_shared_no_delete(_In_ T* p)
49 {
50 return std::shared_ptr<T>(p, no_delete<T>{});
51 }
52}
Noop deleter.
Definition: memory.hpp:16