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