\hypertarget{memory_8h_source}{}\doxysection{memory.\+h}
\label{memory_8h_source}\index{kblib/memory.h@{kblib/memory.h}}
\mbox{\hyperlink{memory_8h}{Go to the documentation of this file.}}
\begin{DoxyCode}{0}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00001}00001 \textcolor{comment}{/* *****************************************************************************}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00002}00002 \textcolor{comment}{ * kblib is a general utility library for C++14 and C++17, intended to provide}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00003}00003 \textcolor{comment}{ * performant high-\/level abstractions and more expressive ways to do simple}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00004}00004 \textcolor{comment}{ * things.}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00005}00005 \textcolor{comment}{ *}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00006}00006 \textcolor{comment}{ * Copyright (c) 2021 killerbee}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00007}00007 \textcolor{comment}{ *}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00008}00008 \textcolor{comment}{ * This program is free software: you can redistribute it and/or modify}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00009}00009 \textcolor{comment}{ * it under the terms of the GNU General Public License as published by}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00010}00010 \textcolor{comment}{ * the Free Software Foundation, either version 3 of the License, or}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00011}00011 \textcolor{comment}{ * (at your option) any later version.}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00012}00012 \textcolor{comment}{ *}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00013}00013 \textcolor{comment}{ * This program is distributed in the hope that it will be useful,}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00014}00014 \textcolor{comment}{ * but WITHOUT ANY WARRANTY; without even the implied warranty of}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00015}00015 \textcolor{comment}{ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00016}00016 \textcolor{comment}{ * GNU General Public License for more details.}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00017}00017 \textcolor{comment}{ *}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00018}00018 \textcolor{comment}{ * You should have received a copy of the GNU General Public License}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00019}00019 \textcolor{comment}{ * along with this program.  If not, see <https://www.gnu.org/licenses/>.}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00020}00020 \textcolor{comment}{ * ****************************************************************************/}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00021}00021 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00032}00032 \textcolor{preprocessor}{\#ifndef MEMORY\_H}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00033}00033 \textcolor{preprocessor}{\#define MEMORY\_H}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00034}00034 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00035}00035 \textcolor{preprocessor}{\#include "{}\mbox{\hyperlink{algorithm_8h}{algorithm.h}}"{}}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00036}00036 \textcolor{preprocessor}{\#include "{}\mbox{\hyperlink{tdecl_8h}{tdecl.h}}"{}}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00037}00037 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00038}00038 \textcolor{preprocessor}{\#include <utility>}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00039}00039 \textcolor{preprocessor}{\#include <vector>}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00040}00040 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00041}00041 \textcolor{keyword}{namespace }\mbox{\hyperlink{tdecl_8h_a4b5c574c663a392148218cd4410fd7a1}{KBLIB\_NS}} \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00042}00042 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00043}00043 template <typename T, bool = std::is\_class<T>::value>}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00044}\mbox{\hyperlink{structkblib_1_1null__construct}{00044}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1null__construct}{null\_construct}} \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00045}\mbox{\hyperlink{structkblib_1_1null__construct_a2d097c45a82e425a3201bd26eacb5a07}{00045}}    \mbox{\hyperlink{structkblib_1_1null__construct_a2d097c45a82e425a3201bd26eacb5a07}{null\_construct}}() noexcept(\mbox{\hyperlink{namespacestd}{std}}::is\_nothrow\_default\_constructible<T>::value)}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00046}00046        : t\{\} \{\}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00047}00047 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00048}\mbox{\hyperlink{structkblib_1_1null__construct_a58a339ea344341ab5769c0552416a23a}{00048}}    T \mbox{\hyperlink{structkblib_1_1null__construct_a58a339ea344341ab5769c0552416a23a}{t}};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00049}00049 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00050}\mbox{\hyperlink{structkblib_1_1null__construct_a0a19a0c2f94149d17353e2e31dba00e8}{00050}}    \textcolor{keyword}{operator} T\&() \textcolor{keyword}{noexcept} \{ \textcolor{keywordflow}{return} t; \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00051}\mbox{\hyperlink{structkblib_1_1null__construct_a9fe1ada8417770787b628c72e1985f9a}{00051}}    \textcolor{keyword}{operator} \textcolor{keyword}{const} T\&() \textcolor{keyword}{const} \textcolor{keyword}{noexcept} \{ \textcolor{keywordflow}{return} t; \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00052}00052 \};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00053}00053 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00054}00054 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00055}\mbox{\hyperlink{structkblib_1_1null__construct_3_01_t_00_01true_01_4}{00055}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1null__construct}{null\_construct}}<T, true> : \textcolor{keyword}{public} T \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00056}\mbox{\hyperlink{structkblib_1_1null__construct_3_01_t_00_01true_01_4_a2c8ba778cd139d4afa1c8d08b0bd88e8}{00056}}    \mbox{\hyperlink{structkblib_1_1null__construct_3_01_t_00_01true_01_4_a2c8ba778cd139d4afa1c8d08b0bd88e8}{null\_construct}}() noexcept(\mbox{\hyperlink{namespacestd}{std}}::is\_nothrow\_default\_constructible<T>::value)}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00057}00057        : T\{\} \{\}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00058}00058 \};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00059}00059 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00060}00060 \textcolor{preprocessor}{\#if \_\_cpp\_nontype\_template\_parameter\_auto}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00061}00061 \textcolor{keyword}{template} <auto FunPtr>}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00062}00062 \textcolor{keyword}{struct }fun\_ptr\_deleter;}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00063}00063 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00064}00064 \textcolor{keyword}{template} <\textcolor{keyword}{typename} Arg, \textcolor{keywordtype}{void} (*FunPtr)(Arg)>}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00065}00065 \textcolor{keyword}{struct }fun\_ptr\_deleter<FunPtr> \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00066}00066    \textcolor{keyword}{auto} operator()(Arg arg) \textcolor{keyword}{const} -\/> \textcolor{keywordtype}{void} \{ \textcolor{keywordflow}{return} FunPtr(arg); \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00067}00067 \};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00068}00068 \textcolor{preprocessor}{\#endif}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00069}00069 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00070}\mbox{\hyperlink{namespacekblib_1_1detail__memory}{00070}} \textcolor{keyword}{namespace }detail\_memory \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00071}00071 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00072}00072    \textcolor{keyword}{template} <\textcolor{keyword}{typename} D, \textcolor{keyword}{typename} T, \textcolor{keyword}{typename} V = \textcolor{keywordtype}{void}>}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00073}\mbox{\hyperlink{structkblib_1_1detail__memory_1_1filter__deleter__pointer}{00073}}    \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1detail__memory_1_1filter__deleter__pointer}{filter\_deleter\_pointer}} \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00074}\mbox{\hyperlink{structkblib_1_1detail__memory_1_1filter__deleter__pointer_afe3a51f067bf509c22726611ba2af8a4}{00074}}       \textcolor{keyword}{using }\mbox{\hyperlink{structkblib_1_1detail__memory_1_1filter__deleter__pointer_afe3a51f067bf509c22726611ba2af8a4}{type}} = T*;}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00075}00075    \};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00076}00076 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00077}00077    \textcolor{keyword}{template} <\textcolor{keyword}{typename} D, \textcolor{keyword}{typename} T>}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00078}\mbox{\hyperlink{structkblib_1_1detail__memory_1_1filter__deleter__pointer_3_01_d_00_01_t_00_01void__t_3_01typename_01_d_1_1pointer_01_4_01_4}{00078}}    \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1detail__memory_1_1filter__deleter__pointer}{filter\_deleter\_pointer}}<D, T, \mbox{\hyperlink{namespacekblib_1_1fakestd_a2df414d5a1a1f59c8f33520890755f84}{void\_t}}<typename D::pointer>> \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00079}\mbox{\hyperlink{structkblib_1_1detail__memory_1_1filter__deleter__pointer_3_01_d_00_01_t_00_01void__t_3_01typename_01_d_1_1pointer_01_4_01_4_a32bc26bab0c22c247e88e58b98c6d78e}{00079}}       \textcolor{keyword}{using }\mbox{\hyperlink{structkblib_1_1detail__memory_1_1filter__deleter__pointer_3_01_d_00_01_t_00_01void__t_3_01typename_01_d_1_1pointer_01_4_01_4_a32bc26bab0c22c247e88e58b98c6d78e}{type}} = \textcolor{keyword}{typename} std::remove\_reference<D>::type::pointer;}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00080}00080    \};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00081}00081 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00082}00082    \textcolor{keyword}{template} <\textcolor{keyword}{typename} D, \textcolor{keyword}{typename} T>}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00083}\mbox{\hyperlink{namespacekblib_1_1detail__memory_a9cb8ba19f19eee413f3cb3a221bb3a60}{00083}}    \textcolor{keyword}{using }\mbox{\hyperlink{namespacekblib_1_1detail__memory_a9cb8ba19f19eee413f3cb3a221bb3a60}{filter\_deleter\_pointer\_t}} = \textcolor{keyword}{typename} \mbox{\hyperlink{structkblib_1_1detail__memory_1_1filter__deleter__pointer_afe3a51f067bf509c22726611ba2af8a4}{filter\_deleter\_pointer<D, T>::type}};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00084}00084 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00085}00085    \textcolor{keyword}{template} <\textcolor{keyword}{typename} T,}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00086}00086              \textcolor{keywordtype}{bool} = std::is\_class<T>::value and not std::is\_final<T>::value,}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00087}00087              \textcolor{keywordtype}{bool}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00088}00088              = std::is\_object<typename std::remove\_reference<T>::type>::value>}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00089}\mbox{\hyperlink{structkblib_1_1detail__memory_1_1as__base__class}{00089}}    \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1detail__memory_1_1as__base__class}{as\_base\_class}};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00090}00090 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00091}00091    \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00092}\mbox{\hyperlink{structkblib_1_1detail__memory_1_1as__base__class_3_01_t_00_01false_00_01true_01_4}{00092}}    \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1detail__memory_1_1as__base__class}{as\_base\_class}}<T, false, true> \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00093}\mbox{\hyperlink{structkblib_1_1detail__memory_1_1as__base__class_3_01_t_00_01false_00_01true_01_4_a6aebd9a1e04ce74b05e02ea97fbbdb37}{00093}}       T \mbox{\hyperlink{structkblib_1_1detail__memory_1_1as__base__class_3_01_t_00_01false_00_01true_01_4_a6aebd9a1e04ce74b05e02ea97fbbdb37}{base\_}};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00094}\mbox{\hyperlink{structkblib_1_1detail__memory_1_1as__base__class_3_01_t_00_01false_00_01true_01_4_ae11c5edc7f51c9edf23d76cde2eee624}{00094}}       \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1detail__memory_1_1as__base__class_3_01_t_00_01false_00_01true_01_4_ae11c5edc7f51c9edf23d76cde2eee624}{base}}() noexcept -\/> T\& \{ \textcolor{keywordflow}{return} base\_; \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00095}\mbox{\hyperlink{structkblib_1_1detail__memory_1_1as__base__class_3_01_t_00_01false_00_01true_01_4_a829d0a4219d2143b88e6bf8b88e6baab}{00095}}       \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1detail__memory_1_1as__base__class_3_01_t_00_01false_00_01true_01_4_a829d0a4219d2143b88e6bf8b88e6baab}{base}}() const noexcept -\/> const T\& \{ \textcolor{keywordflow}{return} base\_; \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00096}\mbox{\hyperlink{structkblib_1_1detail__memory_1_1as__base__class_3_01_t_00_01false_00_01true_01_4_a90d44857dd841cb99ae27fc512eb4f76}{00096}}       \textcolor{keyword}{explicit} \textcolor{keyword}{operator} T\&() \textcolor{keyword}{noexcept} \{ \textcolor{keywordflow}{return} base(); \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00097}\mbox{\hyperlink{structkblib_1_1detail__memory_1_1as__base__class_3_01_t_00_01false_00_01true_01_4_a4ff19aae7057bf6149c76b25f6bb3d8a}{00097}}       \textcolor{keyword}{explicit} \textcolor{keyword}{operator} \textcolor{keyword}{const} T\&() \textcolor{keyword}{const} \textcolor{keyword}{noexcept} \{ \textcolor{keywordflow}{return} base(); \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00098}00098    \};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00099}00099 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00100}00100    \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00101}\mbox{\hyperlink{structkblib_1_1detail__memory_1_1as__base__class_3_01_t_00_01true_00_01true_01_4}{00101}}    \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1detail__memory_1_1as__base__class}{as\_base\_class}}<T, true, true> : T \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00102}\mbox{\hyperlink{structkblib_1_1detail__memory_1_1as__base__class_3_01_t_00_01true_00_01true_01_4_adfbe77847b3fae55334326ffdaf726ec}{00102}}       \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1detail__memory_1_1as__base__class_3_01_t_00_01true_00_01true_01_4_adfbe77847b3fae55334326ffdaf726ec}{base}}() noexcept -\/> T\& \{ \textcolor{keywordflow}{return} *\textcolor{keyword}{this}; \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00103}\mbox{\hyperlink{structkblib_1_1detail__memory_1_1as__base__class_3_01_t_00_01true_00_01true_01_4_ab2c8152737598d031ae7715fd710313b}{00103}}       \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1detail__memory_1_1as__base__class_3_01_t_00_01true_00_01true_01_4_ab2c8152737598d031ae7715fd710313b}{base}}() const noexcept -\/> const T\& \{ \textcolor{keywordflow}{return} *\textcolor{keyword}{this}; \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00104}00104       \textcolor{keyword}{using }T::T;}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00105}\mbox{\hyperlink{structkblib_1_1detail__memory_1_1as__base__class_3_01_t_00_01true_00_01true_01_4_ab2e374d52ae25d5f39c93f698dec3293}{00105}}       \mbox{\hyperlink{structkblib_1_1detail__memory_1_1as__base__class_3_01_t_00_01true_00_01true_01_4_ab2e374d52ae25d5f39c93f698dec3293}{as\_base\_class}}(\textcolor{keyword}{const} T\& t,}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00106}00106                     \mbox{\hyperlink{namespacekblib_a366272ad8baad19be4ccf8128afb04a3}{enable\_if\_t}}<std::is\_copy\_constructible<T>::value,}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00107}00107                                 \mbox{\hyperlink{structkblib_1_1detail__memory_1_1as__base__class}{as\_base\_class}}*> = \textcolor{keyword}{nullptr}) \textcolor{comment}{//}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00108}00108           noexcept(\mbox{\hyperlink{namespacestd}{std}}::is\_nothrow\_copy\_constructible<T>::value)}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00109}00109           : T(t) \{\}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00110}\mbox{\hyperlink{structkblib_1_1detail__memory_1_1as__base__class_3_01_t_00_01true_00_01true_01_4_a3751d627005a35cc2a828b4b18bfe4a8}{00110}}       \mbox{\hyperlink{structkblib_1_1detail__memory_1_1as__base__class_3_01_t_00_01true_00_01true_01_4_a3751d627005a35cc2a828b4b18bfe4a8}{as\_base\_class}}(T\&\& t, \mbox{\hyperlink{namespacekblib_a366272ad8baad19be4ccf8128afb04a3}{enable\_if\_t}}<std::is\_move\_constructible<T>::value,}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00111}00111                                        \mbox{\hyperlink{structkblib_1_1detail__memory_1_1as__base__class}{as\_base\_class}}*> = \textcolor{keyword}{nullptr}) \textcolor{comment}{//}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00112}00112           noexcept(\mbox{\hyperlink{namespacestd}{std}}::is\_nothrow\_move\_constructible<T>::value)}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00113}00113           : T(\mbox{\hyperlink{namespacestd}{std}}::move(t)) \{\}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00114}00114    \};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00115}00115 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00116}00116 \textcolor{preprocessor}{\#if KBLIB\_USE\_CXX17}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00117}00117    \textcolor{keyword}{template} <\textcolor{keyword}{typename} R, \textcolor{keyword}{typename} A, \textcolor{keywordtype}{bool} E>}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00118}\mbox{\hyperlink{structkblib_1_1detail__memory_1_1as__base__class_3_01_r_07_6_08_07_a_08_01noexcept_07_e_08_00_01false_00_01false_01_4}{00118}}    \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1detail__memory_1_1as__base__class}{as\_base\_class}}<R (\&)(A) \textcolor{keyword}{noexcept}(E), \textcolor{keyword}{false}, \textcolor{keyword}{false}> \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00119}\mbox{\hyperlink{structkblib_1_1detail__memory_1_1as__base__class_3_01_r_07_6_08_07_a_08_01noexcept_07_e_08_00_01false_00_01false_01_4_ace555224ce1b510752add3aa0d2e967c}{00119}}       \textcolor{keyword}{using }\mbox{\hyperlink{structkblib_1_1detail__memory_1_1as__base__class_3_01_r_07_6_08_07_a_08_01noexcept_07_e_08_00_01false_00_01false_01_4_ace555224ce1b510752add3aa0d2e967c}{type}} = R(A) \textcolor{keyword}{noexcept}(E);}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00120}\mbox{\hyperlink{structkblib_1_1detail__memory_1_1as__base__class_3_01_r_07_6_08_07_a_08_01noexcept_07_e_08_00_01false_00_01false_01_4_aa676ad57074084345e09858fffd7db29}{00120}}       \mbox{\hyperlink{structkblib_1_1detail__memory_1_1as__base__class_3_01_r_07_6_08_07_a_08_01noexcept_07_e_08_00_01false_00_01false_01_4_ace555224ce1b510752add3aa0d2e967c}{type}}* \mbox{\hyperlink{structkblib_1_1detail__memory_1_1as__base__class_3_01_r_07_6_08_07_a_08_01noexcept_07_e_08_00_01false_00_01false_01_4_aa676ad57074084345e09858fffd7db29}{base\_}};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00121}\mbox{\hyperlink{structkblib_1_1detail__memory_1_1as__base__class_3_01_r_07_6_08_07_a_08_01noexcept_07_e_08_00_01false_00_01false_01_4_a7269ddae17df6c2131f0d92b6984e9ef}{00121}}       \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1detail__memory_1_1as__base__class_3_01_r_07_6_08_07_a_08_01noexcept_07_e_08_00_01false_00_01false_01_4_a7269ddae17df6c2131f0d92b6984e9ef}{base}}() const noexcept -\/> \mbox{\hyperlink{structkblib_1_1detail__memory_1_1as__base__class_3_01_r_07_6_08_07_a_08_01noexcept_07_e_08_00_01false_00_01false_01_4_ace555224ce1b510752add3aa0d2e967c}{type}}\& \{ \textcolor{keywordflow}{return} *base\_; \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00122}\mbox{\hyperlink{structkblib_1_1detail__memory_1_1as__base__class_3_01_r_07_6_08_07_a_08_01noexcept_07_e_08_00_01false_00_01false_01_4_a0e4c1e599d7aae80637bccd2f37ecd80}{00122}}       \textcolor{keyword}{explicit} \textcolor{keyword}{operator} \mbox{\hyperlink{structkblib_1_1detail__memory_1_1as__base__class_3_01_r_07_6_08_07_a_08_01noexcept_07_e_08_00_01false_00_01false_01_4_ace555224ce1b510752add3aa0d2e967c}{type}}\&() \textcolor{keyword}{const} \textcolor{keyword}{noexcept} \{ \textcolor{keywordflow}{return} base(); \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00123}00123    \};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00124}00124 \textcolor{preprocessor}{\#else}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00125}00125    \textcolor{keyword}{template} <\textcolor{keyword}{typename} R, \textcolor{keyword}{typename} A>}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00126}00126    \textcolor{keyword}{struct }as\_base\_class<R (\&)(A), \textcolor{keyword}{false}, \textcolor{keyword}{false}> \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00127}00127       \textcolor{keyword}{using }type = R(A);}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00128}00128       type* base\_;}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00129}00129       \textcolor{keyword}{auto} base() const noexcept -\/> type\& \{ \textcolor{keywordflow}{return} *base\_; \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00130}00130       \textcolor{keyword}{explicit} \textcolor{keyword}{operator} type\&() \textcolor{keyword}{const} \textcolor{keyword}{noexcept} \{ \textcolor{keywordflow}{return} base(); \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00131}00131    \};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00132}00132 \textcolor{preprocessor}{\#endif}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00133}00133 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00134}00134    \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00135}\mbox{\hyperlink{structkblib_1_1detail__memory_1_1as__base__class_3_01_t_01_6_00_01false_00_01true_01_4}{00135}}    \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1detail__memory_1_1as__base__class}{as\_base\_class}}<T\&, \textcolor{keyword}{false}, \textcolor{keyword}{true}> \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00136}\mbox{\hyperlink{structkblib_1_1detail__memory_1_1as__base__class_3_01_t_01_6_00_01false_00_01true_01_4_a9096bb4def135f1f180774e54977cb08}{00136}}       std::reference\_wrapper<T> \mbox{\hyperlink{structkblib_1_1detail__memory_1_1as__base__class_3_01_t_01_6_00_01false_00_01true_01_4_a9096bb4def135f1f180774e54977cb08}{base\_}};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00137}00137 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00138}\mbox{\hyperlink{structkblib_1_1detail__memory_1_1as__base__class_3_01_t_01_6_00_01false_00_01true_01_4_ac2b5bafcfec960bf2c1c73a21b0c4781}{00138}}       \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1detail__memory_1_1as__base__class_3_01_t_01_6_00_01false_00_01true_01_4_ac2b5bafcfec960bf2c1c73a21b0c4781}{base}}() noexcept -\/> T\& \{ \textcolor{keywordflow}{return} base\_; \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00139}\mbox{\hyperlink{structkblib_1_1detail__memory_1_1as__base__class_3_01_t_01_6_00_01false_00_01true_01_4_a997672d6d51378b0e961088581e9fac9}{00139}}       \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1detail__memory_1_1as__base__class_3_01_t_01_6_00_01false_00_01true_01_4_a997672d6d51378b0e961088581e9fac9}{base}}() const noexcept -\/> const T\& \{ \textcolor{keywordflow}{return} base\_; \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00140}00140 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00141}\mbox{\hyperlink{structkblib_1_1detail__memory_1_1as__base__class_3_01_t_01_6_00_01false_00_01true_01_4_af9a634b02ab8466241c8170978d47b5d}{00141}}       \textcolor{keyword}{explicit} \textcolor{keyword}{operator} T\&() \textcolor{keyword}{noexcept} \{ \textcolor{keywordflow}{return} base(); \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00142}\mbox{\hyperlink{structkblib_1_1detail__memory_1_1as__base__class_3_01_t_01_6_00_01false_00_01true_01_4_a88e866166f46ce2c57b07a9e18862a1d}{00142}}       \textcolor{keyword}{explicit} \textcolor{keyword}{operator} \textcolor{keyword}{const} T\&() \textcolor{keyword}{const} \textcolor{keyword}{noexcept} \{ \textcolor{keywordflow}{return} base(); \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00143}00143    \};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00144}00144 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00145}\mbox{\hyperlink{structkblib_1_1detail__memory_1_1noop__t}{00145}}    \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1detail__memory_1_1noop__t}{noop\_t}} \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00146}\mbox{\hyperlink{structkblib_1_1detail__memory_1_1noop__t_af7b932c2296b13d63c73d42bb1487bda}{00146}}       \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1detail__memory_1_1noop__t_af7b932c2296b13d63c73d42bb1487bda}{operator()}}() const noexcept -\/> \textcolor{keywordtype}{void} \{\}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00147}00147    \};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00148}\mbox{\hyperlink{structkblib_1_1detail__memory_1_1value__init}{00148}}    \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1detail__memory_1_1value__init}{value\_init}} \{\};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00149}00149 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00150}00150    \textcolor{keyword}{template} <\textcolor{keyword}{typename} T, \textcolor{keyword}{typename} Construct = noop\_t, \textcolor{keyword}{typename} Destroy = noop\_t>}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00151}\mbox{\hyperlink{structkblib_1_1detail__memory_1_1rule__zero}{00151}}    \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1detail__memory_1_1rule__zero}{rule\_zero}} : \mbox{\hyperlink{structkblib_1_1detail__memory_1_1as__base__class}{as\_base\_class}}<T> \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00152}00152       \textcolor{keyword}{template} <\textcolor{keyword}{typename}... Args>}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00153}\mbox{\hyperlink{structkblib_1_1detail__memory_1_1rule__zero_a4e9f88e35fa831824c1e6c62fd55043a}{00153}}       \mbox{\hyperlink{structkblib_1_1detail__memory_1_1rule__zero_a4e9f88e35fa831824c1e6c62fd55043a}{rule\_zero}}(Args\&\&... args)}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00154}00154           : \mbox{\hyperlink{structkblib_1_1detail__memory_1_1as__base__class}{as\_base\_class}}<T>(\mbox{\hyperlink{namespacestd}{std}}::forward<Args>(args)...) \{\}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00155}00155    \};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00156}00156 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00157}00157    \textcolor{keyword}{template} <\textcolor{keyword}{typename} T, \textcolor{keyword}{typename} D>}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00158}\mbox{\hyperlink{structkblib_1_1detail__memory_1_1on__destroy}{00158}}    \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1detail__memory_1_1on__destroy}{on\_destroy}}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00159}00159        : \mbox{\hyperlink{structkblib_1_1detail__memory_1_1as__base__class}{as\_base\_class}}<T>}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00160}00160        , \mbox{\hyperlink{structkblib_1_1detail__memory_1_1as__base__class}{as\_base\_class}}<D> \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00161}\mbox{\hyperlink{structkblib_1_1detail__memory_1_1on__destroy_a97c0c44afcdae9b505bc958190d73804}{00161}}       \mbox{\hyperlink{structkblib_1_1detail__memory_1_1on__destroy_a97c0c44afcdae9b505bc958190d73804}{on\_destroy}}() noexcept = default;}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00162}\mbox{\hyperlink{structkblib_1_1detail__memory_1_1on__destroy_a2b8a3d967a8dbdacce405d4b719818bb}{00162}}       \mbox{\hyperlink{structkblib_1_1detail__memory_1_1on__destroy}{on\_destroy}}(const \mbox{\hyperlink{structkblib_1_1detail__memory_1_1on__destroy}{on\_destroy}}\&) noexcept(}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00163}00163           \mbox{\hyperlink{namespacestd}{std}}::is\_nothrow\_copy\_constructible<T>::value and}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00164}00164               \mbox{\hyperlink{namespacestd}{std}}::is\_nothrow\_copy\_constructible<D>::value)}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00165}00165           = default;}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00166}\mbox{\hyperlink{structkblib_1_1detail__memory_1_1on__destroy_a32b46388bb256858dd226c1990ea4ac3}{00166}}       \mbox{\hyperlink{structkblib_1_1detail__memory_1_1on__destroy}{on\_destroy}}(\mbox{\hyperlink{structkblib_1_1detail__memory_1_1on__destroy}{on\_destroy}}\&\&) noexcept(}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00167}00167           \mbox{\hyperlink{namespacestd}{std}}::is\_nothrow\_move\_constructible<T>::value and}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00168}00168               \mbox{\hyperlink{namespacestd}{std}}::is\_nothrow\_move\_constructible<D>::value)}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00169}00169           = default;}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00170}\mbox{\hyperlink{structkblib_1_1detail__memory_1_1on__destroy_a81d0909b41ed8bc973c84a0ca120200a}{00170}}       \mbox{\hyperlink{structkblib_1_1detail__memory_1_1on__destroy}{on\_destroy}}\& operator=(const \mbox{\hyperlink{structkblib_1_1detail__memory_1_1on__destroy}{on\_destroy}}\&) noexcept(}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00171}00171           \mbox{\hyperlink{namespacestd}{std}}::is\_nothrow\_copy\_assignable<T>::value and}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00172}00172               \mbox{\hyperlink{namespacestd}{std}}::is\_nothrow\_copy\_assignable<D>::value)}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00173}00173           = default;}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00174}\mbox{\hyperlink{structkblib_1_1detail__memory_1_1on__destroy_afcf89e357884090937dc14b9a7c8573e}{00174}}       \mbox{\hyperlink{structkblib_1_1detail__memory_1_1on__destroy}{on\_destroy}}\& operator=(\mbox{\hyperlink{structkblib_1_1detail__memory_1_1on__destroy}{on\_destroy}}\&\&) noexcept(}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00175}00175           \mbox{\hyperlink{namespacestd}{std}}::is\_nothrow\_move\_assignable<T>::value and}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00176}00176               \mbox{\hyperlink{namespacestd}{std}}::is\_nothrow\_move\_assignable<D>::value)}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00177}00177           = default;}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00178}00178 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00179}00179       using \mbox{\hyperlink{structkblib_1_1detail__memory_1_1as__base__class}{as\_base\_class}}<T>::base;}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00180}\mbox{\hyperlink{structkblib_1_1detail__memory_1_1on__destroy_ac034ef585f1cb76f96f445d831fc2d01}{00180}}       operator T\&() noexcept \{ \textcolor{keywordflow}{return} base(); \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00181}\mbox{\hyperlink{structkblib_1_1detail__memory_1_1on__destroy_a22d7fa9918b58780c0fe9db3480f9cec}{00181}}       \textcolor{keyword}{operator} \textcolor{keyword}{const} T\&() \textcolor{keyword}{const} \textcolor{keyword}{noexcept} \{ \textcolor{keywordflow}{return} base(); \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00182}00182 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00183}\mbox{\hyperlink{structkblib_1_1detail__memory_1_1on__destroy_afd4a6ad450ac6cc6404af81539344c0e}{00183}}       \mbox{\hyperlink{structkblib_1_1detail__memory_1_1on__destroy_afd4a6ad450ac6cc6404af81539344c0e}{\string~on\_destroy}}() \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00184}00184          (\mbox{\hyperlink{namespacekblib_a9b10acd2ddaea118b990e1177f626722}{invoke}})(\textcolor{keyword}{static\_cast<}D\&\&\textcolor{keyword}{>}(*\textcolor{keyword}{this}), \textcolor{keyword}{static\_cast<}T\&\&\textcolor{keyword}{>}(*this));}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00185}00185       \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00186}00186    \};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00187}00187 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00188}00188 \} \textcolor{comment}{// namespace detail\_memory}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00189}00189 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00190}00190 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00191}00191 \textcolor{keyword}{class }live\_ptr;}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00192}00192 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00193}00193 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00194}\mbox{\hyperlink{classkblib_1_1live__wrapper}{00194}} \textcolor{keyword}{class }\mbox{\hyperlink{classkblib_1_1live__wrapper}{live\_wrapper}} \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00195}00195  \textcolor{keyword}{public}:}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00196}\mbox{\hyperlink{classkblib_1_1live__wrapper_a155457ec67348b3ba60dd9e7823cf85a}{00196}}    \mbox{\hyperlink{classkblib_1_1live__ptr}{live\_ptr<T>}} \mbox{\hyperlink{classkblib_1_1live__wrapper_a155457ec67348b3ba60dd9e7823cf85a}{ref}}();}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00197}\mbox{\hyperlink{classkblib_1_1live__wrapper_a5f020934e4ba45bdd6643dcc7485898c}{00197}}    \mbox{\hyperlink{classkblib_1_1live__ptr}{live\_ptr<const T>}} \mbox{\hyperlink{classkblib_1_1live__wrapper_a5f020934e4ba45bdd6643dcc7485898c}{ref}}() \textcolor{keyword}{const};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00198}\mbox{\hyperlink{classkblib_1_1live__wrapper_a5aa3612056f131b9c2c1b380f6ebac19}{00198}}    \mbox{\hyperlink{classkblib_1_1live__ptr}{live\_ptr<const T>}} \mbox{\hyperlink{classkblib_1_1live__wrapper_a5aa3612056f131b9c2c1b380f6ebac19}{cref}}() \textcolor{keyword}{const};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00199}00199 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00200}\mbox{\hyperlink{classkblib_1_1live__wrapper_a5e14adbe9ee8796c1d08add9de48b07c}{00200}}    T \mbox{\hyperlink{classkblib_1_1live__wrapper_a5e14adbe9ee8796c1d08add9de48b07c}{data}};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00201}00201 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00202}\mbox{\hyperlink{structkblib_1_1live__wrapper_1_1__destroy}{00202}}    \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1live__wrapper_1_1__destroy}{\_destroy}} \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00203}\mbox{\hyperlink{structkblib_1_1live__wrapper_1_1__destroy_aae79ae06128fe5a570961821fc37bf6f}{00203}}       \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1live__wrapper_1_1__destroy_aae79ae06128fe5a570961821fc37bf6f}{operator()}}(std::vector<live\_wrapper**>\&\& self) \textcolor{keyword}{const} \textcolor{keyword}{noexcept}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00204}00204           -\/> \textcolor{keywordtype}{void} \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00205}00205          \textcolor{keywordflow}{for} (\textcolor{keyword}{auto} p : self) \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00206}00206             \textcolor{keywordflow}{if} (p) \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00207}00207                *p = \textcolor{keyword}{nullptr};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00208}00208             \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00209}00209          \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00210}00210       \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00211}00211    \};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00212}00212 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00213}00213    \mbox{\hyperlink{structkblib_1_1null__construct}{null\_construct}}<}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00214}00214        \mbox{\hyperlink{structkblib_1_1detail__memory_1_1on__destroy}{detail\_memory::on\_destroy<std::vector<live\_wrapper**>}}, \_destroy>>}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00215}\mbox{\hyperlink{classkblib_1_1live__wrapper_adb24815bc1536416d9a5b6cc37949a1e}{00215}}        \_observers\{\};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00216}00216 \};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00217}00217 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00218}00218 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00219}\mbox{\hyperlink{classkblib_1_1live__wrapper_3_01const_01_t_01_4}{00219}} \textcolor{keyword}{class }\mbox{\hyperlink{classkblib_1_1live__wrapper}{live\_wrapper}}<const T> : \textcolor{keyword}{public} \mbox{\hyperlink{classkblib_1_1live__wrapper}{live\_wrapper}}<T> \{\};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00220}00220 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00221}00221 \textcolor{keyword}{namespace }detail\_memory \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00222}00222 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00223}00223    \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00224}\mbox{\hyperlink{structkblib_1_1detail__memory_1_1template__param}{00224}}    \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1detail__memory_1_1template__param}{template\_param}};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00225}00225    \textcolor{keyword}{template} <\textcolor{keyword}{template} <\textcolor{keyword}{typename} T> \textcolor{keyword}{class }C, \textcolor{keyword}{typename} T>}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00226}\mbox{\hyperlink{structkblib_1_1detail__memory_1_1template__param_3_01_c_3_01_t_01_4_01_4}{00226}}    \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1detail__memory_1_1template__param}{template\_param}}<C<T>> \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00227}\mbox{\hyperlink{structkblib_1_1detail__memory_1_1template__param_3_01_c_3_01_t_01_4_01_4_add2263395b94337aac194fbdbaf842e9}{00227}}       \textcolor{keyword}{using }\mbox{\hyperlink{structkblib_1_1detail__memory_1_1template__param_3_01_c_3_01_t_01_4_01_4_add2263395b94337aac194fbdbaf842e9}{type}} = T;}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00228}00228    \};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00229}00229 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00230}00230    \textcolor{keyword}{template} <\textcolor{keyword}{typename} D>}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00231}\mbox{\hyperlink{structkblib_1_1detail__memory_1_1live__ptr__base}{00231}}    \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1detail__memory_1_1live__ptr__base}{live\_ptr\_base}} \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00232}00232     \textcolor{keyword}{private}:}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00233}00233       \textcolor{keyword}{using }T = \textcolor{keyword}{typename} \mbox{\hyperlink{structkblib_1_1detail__memory_1_1template__param}{template\_param<D>::type}};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00234}00234       \textcolor{keyword}{using }mT = \textcolor{keyword}{typename} std::remove\_const<T>::type;}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00235}00235 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00236}00236     \textcolor{keyword}{public}:}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00237}\mbox{\hyperlink{structkblib_1_1detail__memory_1_1live__ptr__base_ace0b9f609289104c07cf37e3278eb3e5}{00237}}       \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1detail__memory_1_1live__ptr__base_ace0b9f609289104c07cf37e3278eb3e5}{operator*}}() noexcept -\/> T\& \{ \textcolor{keywordflow}{return} obj-\/>data; \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00238}\mbox{\hyperlink{structkblib_1_1detail__memory_1_1live__ptr__base_a8ee9580872e56b2bb11be5ccafe73870}{00238}}       \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1detail__memory_1_1live__ptr__base_a8ee9580872e56b2bb11be5ccafe73870}{operator*}}() const noexcept -\/> const T\& \{ \textcolor{keywordflow}{return} obj-\/>data; \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00239}00239 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00240}\mbox{\hyperlink{structkblib_1_1detail__memory_1_1live__ptr__base_a1ccb5f474f39af09fba78b72b2f416db}{00240}}       \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1detail__memory_1_1live__ptr__base_a1ccb5f474f39af09fba78b72b2f416db}{operator-\/>}}() noexcept -\/> T* \{ \textcolor{keywordflow}{return} \&obj-\/>data; \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00241}\mbox{\hyperlink{structkblib_1_1detail__memory_1_1live__ptr__base_a159a55eb1ce198564d1921b5558adf87}{00241}}       \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1detail__memory_1_1live__ptr__base_a159a55eb1ce198564d1921b5558adf87}{operator-\/>}}() const noexcept -\/> const T* \{ \textcolor{keywordflow}{return} \&obj-\/>data; \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00242}00242 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00243}\mbox{\hyperlink{structkblib_1_1detail__memory_1_1live__ptr__base_a1b1604209cf8060fee86eede601c3131}{00243}}       \textcolor{keyword}{operator} bool() const noexcept \{ \textcolor{keywordflow}{return} obj; \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00244}00244 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00245}\mbox{\hyperlink{structkblib_1_1detail__memory_1_1live__ptr__base_ac512dd470000f7642222bff23baad7e8}{00245}}       \textcolor{keyword}{friend} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1detail__memory_1_1live__ptr__base_ac512dd470000f7642222bff23baad7e8}{operator==}}(\textcolor{keyword}{const} D\& lhs, std::nullptr\_t) -\/> \textcolor{keywordtype}{bool} \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00246}00246          \textcolor{keywordflow}{return} not lhs;}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00247}00247       \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00248}\mbox{\hyperlink{structkblib_1_1detail__memory_1_1live__ptr__base_a7a96f74ac6998a4a468f13c147f65e41}{00248}}       \textcolor{keyword}{friend} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1detail__memory_1_1live__ptr__base_a7a96f74ac6998a4a468f13c147f65e41}{operator==}}(std::nullptr\_t, \textcolor{keyword}{const} D\& rhs) -\/> \textcolor{keywordtype}{bool} \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00249}00249          \textcolor{keywordflow}{return} not rhs;}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00250}00250       \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00251}00251 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00252}\mbox{\hyperlink{structkblib_1_1detail__memory_1_1live__ptr__base_a384d82eaebc14341a3f0d232af9e363b}{00252}}       \textcolor{keyword}{friend} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1detail__memory_1_1live__ptr__base_a384d82eaebc14341a3f0d232af9e363b}{operator==}}(\textcolor{keyword}{const} D\& lhs, \textcolor{keyword}{const} D\& rhs) -\/> \textcolor{keywordtype}{bool} \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00253}00253          \textcolor{keywordflow}{return} lhs.obj == rhs.obj;}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00254}00254       \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00255}00255 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00256}\mbox{\hyperlink{structkblib_1_1detail__memory_1_1live__ptr__base_ab91dcd0321f3b199ced5b4cb99fbfac7}{00256}}       \textcolor{keyword}{friend} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1detail__memory_1_1live__ptr__base_ab91dcd0321f3b199ced5b4cb99fbfac7}{operator==}}(\textcolor{keyword}{const} D\& lhs, \textcolor{keyword}{const} T* rhs) -\/> \textcolor{keywordtype}{bool} \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00257}00257          \textcolor{keywordflow}{if} (not lhs and not rhs) \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00258}00258             \textcolor{keywordflow}{return} \textcolor{keyword}{true};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00259}00259          \} \textcolor{keywordflow}{else} \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00260}00260             \textcolor{keywordflow}{return} lhs and \&lhs.obj-\/>data == rhs;}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00261}00261          \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00262}00262       \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00263}\mbox{\hyperlink{structkblib_1_1detail__memory_1_1live__ptr__base_a1ac457911dc727d5be0bc862549612e4}{00263}}       \textcolor{keyword}{friend} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1detail__memory_1_1live__ptr__base_a1ac457911dc727d5be0bc862549612e4}{operator==}}(\textcolor{keyword}{const} T* lhs, \textcolor{keyword}{const} D\& rhs) -\/> \textcolor{keywordtype}{bool} \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00264}00264          \textcolor{keywordflow}{if} (not rhs and not lhs) \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00265}00265             \textcolor{keywordflow}{return} \textcolor{keyword}{true};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00266}00266          \} \textcolor{keywordflow}{else} \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00267}00267             \textcolor{keywordflow}{return} rhs and \&rhs.obj-\/>data == lhs;}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00268}00268          \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00269}00269       \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00270}00270 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00271}\mbox{\hyperlink{structkblib_1_1detail__memory_1_1live__ptr__base_a2f84c409b3dbd9744191703b69013d71}{00271}}       \mbox{\hyperlink{structkblib_1_1detail__memory_1_1live__ptr__base_a2f84c409b3dbd9744191703b69013d71}{live\_ptr\_base}}() noexcept = default;}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00272}\mbox{\hyperlink{structkblib_1_1detail__memory_1_1live__ptr__base_aa462c4a95e3bc2f3985780fdc24add82}{00272}}       \mbox{\hyperlink{structkblib_1_1detail__memory_1_1live__ptr__base}{live\_ptr\_base}}(\mbox{\hyperlink{classkblib_1_1live__wrapper}{live\_wrapper}}<mT>* p)}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00273}00273           : obj\{p\} \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00274}00274          add();}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00275}00275       \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00276}\mbox{\hyperlink{structkblib_1_1detail__memory_1_1live__ptr__base_a94b3552380747ce4502cc9a3a029ec5e}{00276}}       \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1detail__memory_1_1live__ptr__base_a94b3552380747ce4502cc9a3a029ec5e}{operator=}}(\textcolor{keyword}{const} \mbox{\hyperlink{structkblib_1_1detail__memory_1_1live__ptr__base}{live\_ptr\_base}}\& o) \textcolor{keyword}{noexcept} -\/> \mbox{\hyperlink{structkblib_1_1detail__memory_1_1live__ptr__base}{live\_ptr\_base}}\& \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00277}00277          rem();}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00278}00278          obj = o.obj;}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00279}00279          add();}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00280}00280          \textcolor{keywordflow}{return} *\textcolor{keyword}{this};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00281}00281       \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00282}\mbox{\hyperlink{structkblib_1_1detail__memory_1_1live__ptr__base_a8298ecc2eecf1c6f866c5af135251aa2}{00282}}       \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1detail__memory_1_1live__ptr__base_a8298ecc2eecf1c6f866c5af135251aa2}{operator=}}(\mbox{\hyperlink{structkblib_1_1detail__memory_1_1live__ptr__base}{live\_ptr\_base}}\&\& o) \textcolor{keyword}{noexcept} -\/> \mbox{\hyperlink{structkblib_1_1detail__memory_1_1live__ptr__base}{live\_ptr\_base}}\& \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00283}00283          rem();}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00284}00284          \mbox{\hyperlink{namespacekblib_a2cc6d0e618d41f45deaaa5c6c357ed7aa3734a903022249b3010be1897042568e}{move}}(o);}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00285}00285          \textcolor{keywordflow}{return} *\textcolor{keyword}{this};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00286}00286       \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00287}00287 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00288}\mbox{\hyperlink{structkblib_1_1detail__memory_1_1live__ptr__base_a50ebe1175399bebb8a48d560b7179962}{00288}}       \mbox{\hyperlink{structkblib_1_1detail__memory_1_1live__ptr__base_a50ebe1175399bebb8a48d560b7179962}{live\_ptr\_base}}(\textcolor{keyword}{const} \mbox{\hyperlink{structkblib_1_1detail__memory_1_1live__ptr__base}{live\_ptr\_base}}\& o)}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00289}00289           : obj\{o.obj\} \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00290}00290          add();}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00291}00291       \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00292}\mbox{\hyperlink{structkblib_1_1detail__memory_1_1live__ptr__base_ad7594fc7cef145f89aae448e3de796f1}{00292}}       \mbox{\hyperlink{structkblib_1_1detail__memory_1_1live__ptr__base_ad7594fc7cef145f89aae448e3de796f1}{live\_ptr\_base}}(\mbox{\hyperlink{structkblib_1_1detail__memory_1_1live__ptr__base}{live\_ptr\_base}}\&\& o) \textcolor{keyword}{noexcept} \{ \mbox{\hyperlink{namespacekblib_a2cc6d0e618d41f45deaaa5c6c357ed7aa3734a903022249b3010be1897042568e}{move}}(o.as\_D()); \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00293}\mbox{\hyperlink{structkblib_1_1detail__memory_1_1live__ptr__base_a84c2dff4a8b615f5116561aa00a82a22}{00293}}       \mbox{\hyperlink{structkblib_1_1detail__memory_1_1live__ptr__base_a84c2dff4a8b615f5116561aa00a82a22}{\string~live\_ptr\_base}}() \{ rem(); \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00294}00294 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00295}\mbox{\hyperlink{structkblib_1_1detail__memory_1_1live__ptr__base_ab566814ec51ffae2eb002fbc725567f0}{00295}}       \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1detail__memory_1_1live__ptr__base_ab566814ec51ffae2eb002fbc725567f0}{operator=}}(\textcolor{keyword}{const} D\& o) -\/> D\& \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00296}00296          rem();}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00297}00297          obj = o.obj;}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00298}00298          add();}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00299}00299          \textcolor{keywordflow}{return} as\_D();}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00300}00300       \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00301}\mbox{\hyperlink{structkblib_1_1detail__memory_1_1live__ptr__base_a643edec2c1834870594214ba33c30429}{00301}}       \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1detail__memory_1_1live__ptr__base_a643edec2c1834870594214ba33c30429}{operator=}}(D\&\& o) \textcolor{keyword}{noexcept} -\/> D\& \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00302}00302          this-\/>rem();}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00303}00303          this-\/>\mbox{\hyperlink{namespacekblib_a2cc6d0e618d41f45deaaa5c6c357ed7aa3734a903022249b3010be1897042568e}{move}}(o);}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00304}00304          \textcolor{keywordflow}{return} as\_D();}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00305}00305       \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00306}00306 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00307}00307     \textcolor{keyword}{protected}:}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00308}\mbox{\hyperlink{structkblib_1_1detail__memory_1_1live__ptr__base_a9efec1b8c3e744e3ae421222edd13d11}{00308}}       \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1detail__memory_1_1live__ptr__base_a9efec1b8c3e744e3ae421222edd13d11}{add}}() -\/> \textcolor{keywordtype}{void} \{ obj-\/>\_observers.base().push\_back(\&obj); \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00309}\mbox{\hyperlink{structkblib_1_1detail__memory_1_1live__ptr__base_afaa6ea1a8bd59abb036c282ba51df63a}{00309}}       \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1detail__memory_1_1live__ptr__base_afaa6ea1a8bd59abb036c282ba51df63a}{rem}}() -\/> \textcolor{keywordtype}{void} \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00310}00310          \textcolor{keywordflow}{if} (obj) \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00311}00311             \mbox{\hyperlink{namespacekblib_aa760b40ea7f60976c66be6d77345317b}{erase}}(obj-\/>\_observers.base(), \&obj);}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00312}00312          \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00313}00313       \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00314}\mbox{\hyperlink{structkblib_1_1detail__memory_1_1live__ptr__base_a701f8d581c099c142c85ad2207b00cfb}{00314}}       \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1detail__memory_1_1live__ptr__base_a701f8d581c099c142c85ad2207b00cfb}{move}}(D\& o) -\/> \textcolor{keywordtype}{void} \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00315}00315          \textcolor{keywordflow}{if} ((obj = \mbox{\hyperlink{namespacekblib_a0c3f29dc7d19ffe01f977ce294ee537a}{std::exchange}}(o.obj, \textcolor{keyword}{nullptr}))) \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00316}00316             std::replace(obj-\/>\_observers.base().begin(),}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00317}00317                          obj-\/>\_observers.base().end(), \&o.obj, \&obj);}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00318}00318          \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00319}00319       \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00320}\mbox{\hyperlink{structkblib_1_1detail__memory_1_1live__ptr__base_abfc7591ca8cca1717eb89344bbd7518c}{00320}}       \textcolor{keyword}{mutable} \mbox{\hyperlink{classkblib_1_1live__wrapper}{live\_wrapper<mT>}}* obj = \textcolor{keyword}{nullptr};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00321}00321 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00322}00322     \textcolor{keyword}{private}:}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00323}00323       \textcolor{keyword}{auto} as\_D() noexcept -\/> D\& \{ \textcolor{keywordflow}{return} \textcolor{keyword}{static\_cast<}D\&\textcolor{keyword}{>}(*this); \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00324}00324       \textcolor{keyword}{auto} as\_D() const noexcept -\/> const D\& \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00325}00325          \textcolor{keywordflow}{return} \textcolor{keyword}{static\_cast<}\textcolor{keyword}{const }D\&\textcolor{keyword}{>}(*this);}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00326}00326       \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00327}00327    \};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00328}00328 \} \textcolor{comment}{// namespace detail\_memory}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00329}00329 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00330}00330 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00331}\mbox{\hyperlink{classkblib_1_1live__ptr}{00331}} \textcolor{keyword}{class }\mbox{\hyperlink{classkblib_1_1live__ptr}{live\_ptr}} : \textcolor{keyword}{public} \mbox{\hyperlink{structkblib_1_1detail__memory_1_1live__ptr__base}{detail\_memory::live\_ptr\_base}}<live\_ptr<T>> \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00332}00332    \textcolor{keyword}{using }\mbox{\hyperlink{structkblib_1_1detail__memory_1_1live__ptr__base}{base}} = \mbox{\hyperlink{structkblib_1_1detail__memory_1_1live__ptr__base}{detail\_memory::live\_ptr\_base<live\_ptr<T>}}>;}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00333}00333 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00334}00334  \textcolor{keyword}{public}:}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00335}\mbox{\hyperlink{classkblib_1_1live__ptr_aa70fadabd288d0656b83a1ea75e9993f}{00335}}    \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1live__ptr_aa70fadabd288d0656b83a1ea75e9993f}{value\_type}} = T;}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00336}00336 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00337}\mbox{\hyperlink{classkblib_1_1live__ptr_a74533a8063712833bf6de9d1c1169903}{00337}}    \mbox{\hyperlink{classkblib_1_1live__ptr_a74533a8063712833bf6de9d1c1169903}{live\_ptr}}() = \textcolor{keywordflow}{default};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00338}\mbox{\hyperlink{classkblib_1_1live__ptr_a8ce53569192d499b9f5b20d55e094b7c}{00338}}    \mbox{\hyperlink{classkblib_1_1live__ptr_a8ce53569192d499b9f5b20d55e094b7c}{live\_ptr}}(\textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1live__ptr}{live\_ptr}}\& o) = \textcolor{keywordflow}{default};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00339}\mbox{\hyperlink{classkblib_1_1live__ptr_a64c8ceecb7892916a01fcdb72359897b}{00339}}    \mbox{\hyperlink{classkblib_1_1live__ptr_a64c8ceecb7892916a01fcdb72359897b}{live\_ptr}}(\mbox{\hyperlink{classkblib_1_1live__ptr}{live\_ptr}}\&\& o) \textcolor{keyword}{noexcept} = \textcolor{keywordflow}{default};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00340}\mbox{\hyperlink{classkblib_1_1live__ptr_ab65ba9cb4c8a8877785c36dc3e7990df}{00340}}    \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1live__ptr_ab65ba9cb4c8a8877785c36dc3e7990df}{operator=}}(\textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1live__ptr}{live\_ptr}}\& o) -\/> \mbox{\hyperlink{classkblib_1_1live__ptr}{live\_ptr}}\& = \textcolor{keywordflow}{default};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00341}\mbox{\hyperlink{classkblib_1_1live__ptr_a0f3545a63d05349866c81de724df1192}{00341}}    \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1live__ptr_a0f3545a63d05349866c81de724df1192}{operator=}}(\mbox{\hyperlink{classkblib_1_1live__ptr}{live\_ptr}}\&\& o) \textcolor{keyword}{noexcept} -\/> \mbox{\hyperlink{classkblib_1_1live__ptr}{live\_ptr}}\& = \textcolor{keywordflow}{default};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00342}00342 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00343}\mbox{\hyperlink{classkblib_1_1live__ptr_ac75eda47666974f76eb03f9d47419da0}{00343}}    \textcolor{keyword}{explicit} \mbox{\hyperlink{classkblib_1_1live__ptr_ac75eda47666974f76eb03f9d47419da0}{live\_ptr}}(\mbox{\hyperlink{classkblib_1_1live__wrapper}{live\_wrapper<T>}}\& o)}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00344}00344        : \mbox{\hyperlink{structkblib_1_1detail__memory_1_1live__ptr__base}{base}}\{\&o\} \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00345}00345       this-\/>add();}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00346}00346    \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00347}\mbox{\hyperlink{classkblib_1_1live__ptr_a5cd54e179672d80147fdd270fbc9543c}{00347}}    \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1live__ptr_a5cd54e179672d80147fdd270fbc9543c}{operator=}}(\mbox{\hyperlink{classkblib_1_1live__wrapper}{live\_wrapper<T>}}\& o) -\/> \mbox{\hyperlink{classkblib_1_1live__ptr}{live\_ptr}}\& \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00348}00348       this-\/>rem();}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00349}00349       this-\/>obj = \&o;}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00350}00350       this-\/>add();}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00351}00351       \textcolor{keywordflow}{return} *\textcolor{keyword}{this};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00352}00352    \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00353}00353 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00354}\mbox{\hyperlink{classkblib_1_1live__ptr_aa19e183c305fa8e0a10924d78a125846}{00354}}    \mbox{\hyperlink{classkblib_1_1live__ptr}{\string~live\_ptr}}() = \textcolor{keywordflow}{default};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00355}00355 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00356}00356  \textcolor{keyword}{private}:}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00357}00357    \textcolor{keyword}{friend} \textcolor{keyword}{class }\mbox{\hyperlink{classkblib_1_1live__ptr}{live\_ptr}}<const T>;}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00358}00358 \};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00359}00359 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00360}00360 \textcolor{keyword}{template} <\textcolor{keyword}{typename} mT>}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00361}\mbox{\hyperlink{classkblib_1_1live__ptr_3_01const_01m_t_01_4}{00361}} \textcolor{keyword}{class }\mbox{\hyperlink{classkblib_1_1live__ptr}{live\_ptr}}<const mT>}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00362}00362     : \textcolor{keyword}{public} \mbox{\hyperlink{structkblib_1_1detail__memory_1_1live__ptr__base}{detail\_memory::live\_ptr\_base}}<live\_ptr<const mT>> \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00363}00363    \textcolor{keyword}{using }\mbox{\hyperlink{structkblib_1_1detail__memory_1_1live__ptr__base}{base}} = \mbox{\hyperlink{structkblib_1_1detail__memory_1_1live__ptr__base}{detail\_memory::live\_ptr\_base<live\_ptr<const mT>}}>;}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00364}00364 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00365}00365  \textcolor{keyword}{public}:}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00366}\mbox{\hyperlink{classkblib_1_1live__ptr_3_01const_01m_t_01_4_a82ae643e471de671a16111e6b6baa181}{00366}}    \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1live__ptr_3_01const_01m_t_01_4_a82ae643e471de671a16111e6b6baa181}{T}} = \textcolor{keyword}{const} mT;}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00367}\mbox{\hyperlink{classkblib_1_1live__ptr_3_01const_01m_t_01_4_ade66908ad7c1eea999c28d56a7f24417}{00367}}    \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1live__ptr_3_01const_01m_t_01_4_ade66908ad7c1eea999c28d56a7f24417}{value\_type}} = \mbox{\hyperlink{classkblib_1_1live__ptr_3_01const_01m_t_01_4_a82ae643e471de671a16111e6b6baa181}{T}};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00368}\mbox{\hyperlink{classkblib_1_1live__ptr_3_01const_01m_t_01_4_aa5a3d2ea8931bf775f0acc43dcbdc164}{00368}}    \mbox{\hyperlink{classkblib_1_1live__ptr_3_01const_01m_t_01_4_aa5a3d2ea8931bf775f0acc43dcbdc164}{live\_ptr}}() = \textcolor{keywordflow}{default};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00369}\mbox{\hyperlink{classkblib_1_1live__ptr_3_01const_01m_t_01_4_a25eba11120374b06a269fc04177d2042}{00369}}    \mbox{\hyperlink{classkblib_1_1live__ptr_3_01const_01m_t_01_4_a25eba11120374b06a269fc04177d2042}{live\_ptr}}(\textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1live__ptr}{live\_ptr<T>}}\& o) = \textcolor{keywordflow}{default};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00370}\mbox{\hyperlink{classkblib_1_1live__ptr_3_01const_01m_t_01_4_a56b83c021aca82321a98403812841f2d}{00370}}    \mbox{\hyperlink{classkblib_1_1live__ptr_3_01const_01m_t_01_4_a56b83c021aca82321a98403812841f2d}{live\_ptr}}(\textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1live__ptr}{live\_ptr<mT>}}\& o)}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00371}00371        : \mbox{\hyperlink{structkblib_1_1detail__memory_1_1live__ptr__base}{base}}\{o.obj\} \{\}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00372}\mbox{\hyperlink{classkblib_1_1live__ptr_3_01const_01m_t_01_4_ab396612a706db0e73da86a05a8713665}{00372}}    \mbox{\hyperlink{classkblib_1_1live__ptr_3_01const_01m_t_01_4_ab396612a706db0e73da86a05a8713665}{live\_ptr}}(\mbox{\hyperlink{classkblib_1_1live__ptr}{live\_ptr<T>}}\&\& o) \textcolor{keyword}{noexcept} = \textcolor{keywordflow}{default};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00373}\mbox{\hyperlink{classkblib_1_1live__ptr_3_01const_01m_t_01_4_a824785be41bb6d006a1d09c9cc3dc7e8}{00373}}    \mbox{\hyperlink{classkblib_1_1live__ptr_3_01const_01m_t_01_4_a824785be41bb6d006a1d09c9cc3dc7e8}{live\_ptr}}(\mbox{\hyperlink{classkblib_1_1live__ptr}{live\_ptr<mT>}}\&\& o) \textcolor{keyword}{noexcept} \{ this-\/>\mbox{\hyperlink{namespacekblib_a2cc6d0e618d41f45deaaa5c6c357ed7aa3734a903022249b3010be1897042568e}{move}}(o); \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00374}\mbox{\hyperlink{classkblib_1_1live__ptr_3_01const_01m_t_01_4_a392dfc1fefa450dcbdfce9fcf2c5254f}{00374}}    \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1live__ptr_3_01const_01m_t_01_4_a392dfc1fefa450dcbdfce9fcf2c5254f}{operator=}}(\textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1live__ptr}{live\_ptr<T>}}\& o) -\/> \mbox{\hyperlink{classkblib_1_1live__ptr}{live\_ptr}}\& = \textcolor{keywordflow}{default};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00375}\mbox{\hyperlink{classkblib_1_1live__ptr_3_01const_01m_t_01_4_a3e22c29fe7d3c978514f8dc8c6730a79}{00375}}    \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1live__ptr_3_01const_01m_t_01_4_a3e22c29fe7d3c978514f8dc8c6730a79}{operator=}}(\mbox{\hyperlink{classkblib_1_1live__ptr}{live\_ptr<T>}}\&\& o) \textcolor{keyword}{noexcept} -\/> \mbox{\hyperlink{classkblib_1_1live__ptr}{live\_ptr}}\& = \textcolor{keywordflow}{default};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00376}00376 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00377}\mbox{\hyperlink{classkblib_1_1live__ptr_3_01const_01m_t_01_4_a1a2a91dcae950006611d3852a87d2515}{00377}}    \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1live__ptr_3_01const_01m_t_01_4_a1a2a91dcae950006611d3852a87d2515}{operator=}}(\textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1live__ptr}{live\_ptr<mT>}}\& o) -\/> \mbox{\hyperlink{classkblib_1_1live__ptr}{live\_ptr}}\& \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00378}00378       this-\/>obj = o.\mbox{\hyperlink{structkblib_1_1detail__memory_1_1live__ptr__base_abfc7591ca8cca1717eb89344bbd7518c}{obj}};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00379}00379       this-\/>add();}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00380}00380       \textcolor{keywordflow}{return} *\textcolor{keyword}{this};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00381}00381    \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00382}\mbox{\hyperlink{classkblib_1_1live__ptr_3_01const_01m_t_01_4_a8ef2b2f703852278cca005f79782a350}{00382}}    \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1live__ptr_3_01const_01m_t_01_4_a8ef2b2f703852278cca005f79782a350}{operator=}}(\mbox{\hyperlink{classkblib_1_1live__ptr}{live\_ptr<mT>}}\&\& o) \textcolor{keyword}{noexcept} -\/> \mbox{\hyperlink{classkblib_1_1live__ptr}{live\_ptr}}\& \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00383}00383       this-\/>obj = o.\mbox{\hyperlink{structkblib_1_1detail__memory_1_1live__ptr__base_abfc7591ca8cca1717eb89344bbd7518c}{obj}};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00384}00384       this-\/>add();}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00385}00385       \textcolor{keywordflow}{return} *\textcolor{keyword}{this};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00386}00386    \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00387}00387 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00388}\mbox{\hyperlink{classkblib_1_1live__ptr_3_01const_01m_t_01_4_a8ad61015540b06f500734dbf6a12a613}{00388}}    \textcolor{keyword}{explicit} \mbox{\hyperlink{classkblib_1_1live__ptr_3_01const_01m_t_01_4_a8ad61015540b06f500734dbf6a12a613}{live\_ptr}}(\textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1live__wrapper}{live\_wrapper<mT>}}\& o)}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00389}00389        : \mbox{\hyperlink{structkblib_1_1detail__memory_1_1live__ptr__base}{base}}\{\&o\} \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00390}00390       this-\/>add();}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00391}00391    \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00392}\mbox{\hyperlink{classkblib_1_1live__ptr_3_01const_01m_t_01_4_afd4a08c1df8f3fa3d7203d6b66d73546}{00392}}    \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1live__ptr_3_01const_01m_t_01_4_afd4a08c1df8f3fa3d7203d6b66d73546}{operator=}}(\textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1live__wrapper}{live\_wrapper<mT>}}\& o) -\/> \mbox{\hyperlink{classkblib_1_1live__ptr}{live\_ptr}}\& \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00393}00393       this-\/>rem();}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00394}00394       this-\/>obj = \&o;}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00395}00395       this-\/>add();}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00396}00396       \textcolor{keywordflow}{return} *\textcolor{keyword}{this};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00397}00397    \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00398}00398 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00399}\mbox{\hyperlink{classkblib_1_1live__ptr_3_01const_01m_t_01_4_aab2c4dc0f285c9032c86bdc5334de28d}{00399}}    \mbox{\hyperlink{classkblib_1_1live__ptr_3_01const_01m_t_01_4_aab2c4dc0f285c9032c86bdc5334de28d}{\string~live\_ptr}}() = \textcolor{keywordflow}{default};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00400}00400 \};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00401}00401 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00402}00402 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00403}\mbox{\hyperlink{classkblib_1_1live__wrapper_a155457ec67348b3ba60dd9e7823cf85a}{00403}} \mbox{\hyperlink{classkblib_1_1live__ptr}{live\_ptr<T>}} \mbox{\hyperlink{classkblib_1_1live__wrapper}{live\_wrapper<T>::ref}}() \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00404}00404    \textcolor{keywordflow}{return} \mbox{\hyperlink{classkblib_1_1live__ptr}{live\_ptr<T>}}\{*\textcolor{keyword}{this}\};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00405}00405 \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00406}00406 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00407}00407 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00408}\mbox{\hyperlink{classkblib_1_1live__wrapper_a5f020934e4ba45bdd6643dcc7485898c}{00408}} \mbox{\hyperlink{classkblib_1_1live__ptr}{live\_ptr<const T>}} \mbox{\hyperlink{classkblib_1_1live__wrapper}{live\_wrapper<T>::ref}}()\textcolor{keyword}{ const }\{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00409}00409    \textcolor{keywordflow}{return} \mbox{\hyperlink{classkblib_1_1live__ptr}{live\_ptr<const T>}}\{*\textcolor{keyword}{this}\};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00410}00410 \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00411}00411 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00412}00412 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00413}\mbox{\hyperlink{classkblib_1_1live__wrapper_a5aa3612056f131b9c2c1b380f6ebac19}{00413}} \mbox{\hyperlink{classkblib_1_1live__ptr}{live\_ptr<const T>}} \mbox{\hyperlink{classkblib_1_1live__wrapper}{live\_wrapper<T>::cref}}()\textcolor{keyword}{ const }\{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00414}00414    \textcolor{keywordflow}{return} \mbox{\hyperlink{classkblib_1_1live__ptr}{live\_ptr<const T>}}\{*\textcolor{keyword}{this}\};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00415}00415 \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00416}00416 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00417}00417 \textcolor{comment}{// cond\_ptr: A pointer which can either uniquely own its referent, or which can}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00418}00418 \textcolor{comment}{// be a non-\/owning reference. Note that custom deleter support is not present;}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00419}00419 \textcolor{comment}{// however it will not implicitly strip a deleter from a unique\_ptr.}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00420}00420 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00421}00421 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T, \textcolor{keyword}{typename} Deleter = std::default\_delete<T>>}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00422}\mbox{\hyperlink{classkblib_1_1cond__ptr}{00422}} \textcolor{keyword}{class }\mbox{\hyperlink{classkblib_1_1cond__ptr}{cond\_ptr}} : \textcolor{keyword}{private} \mbox{\hyperlink{structkblib_1_1detail__memory_1_1as__base__class}{detail\_memory::as\_base\_class}}<Deleter> \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00423}00423    \textcolor{keyword}{using }\mbox{\hyperlink{structkblib_1_1detail__memory_1_1as__base__class}{d\_base}} = \mbox{\hyperlink{structkblib_1_1detail__memory_1_1as__base__class}{detail\_memory::as\_base\_class<Deleter>}};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00424}00424 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00425}00425  \textcolor{keyword}{public}:}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00426}\mbox{\hyperlink{classkblib_1_1cond__ptr_ae2f122e7a4096237e00a5f1cbc7e487d}{00426}}    \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1cond__ptr_ae2f122e7a4096237e00a5f1cbc7e487d}{pointer}} = \mbox{\hyperlink{namespacekblib_1_1detail__memory_a9cb8ba19f19eee413f3cb3a221bb3a60}{detail\_memory::filter\_deleter\_pointer\_t<Deleter, T>}};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00427}\mbox{\hyperlink{classkblib_1_1cond__ptr_a7b63afcf80c825f1306bb54bcec71637}{00427}}    \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1cond__ptr_a7b63afcf80c825f1306bb54bcec71637}{element\_type}} = T;}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00428}\mbox{\hyperlink{classkblib_1_1cond__ptr_a6bcd0bfc4aa82aa486846912c0559d4f}{00428}}    \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1cond__ptr_a6bcd0bfc4aa82aa486846912c0559d4f}{deleter\_type}} = Deleter;}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00429}00429 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00430}00430 \textcolor{preprocessor}{\#if 0}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00431}00431    \textcolor{keyword}{static\_assert}(std::is\_nothrow\_invocable<Deleter\&, pointer>::value,}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00432}00432                  \textcolor{stringliteral}{"{}cond\_ptr<T> requires that get\_deleter not throw exceptions."{}});}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00433}00433 \textcolor{preprocessor}{\#endif}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00434}00434 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00435}\mbox{\hyperlink{classkblib_1_1cond__ptr_a4df32829014a485bd76ec1398454161a}{00435}}    \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1cond__ptr_a4df32829014a485bd76ec1398454161a}{unique}} = std::unique\_ptr<T, Deleter>;}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00436}00436 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00437}\mbox{\hyperlink{classkblib_1_1cond__ptr_aac6b1d399fa73d06508b46a5aa076cab}{00437}}    \mbox{\hyperlink{classkblib_1_1cond__ptr_aac6b1d399fa73d06508b46a5aa076cab}{cond\_ptr}}() noexcept = default;}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00438}\mbox{\hyperlink{classkblib_1_1cond__ptr_a90368b6e23bfb184e3c0707c90600b82}{00438}}    \mbox{\hyperlink{classkblib_1_1cond__ptr}{cond\_ptr}}(\mbox{\hyperlink{namespacestd}{std}}::nullptr\_t) noexcept \{\}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00439}00439 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00440}\mbox{\hyperlink{classkblib_1_1cond__ptr_a524a265215e1ca03b5929864a0bc41cd}{00440}}    \textcolor{keyword}{explicit} \mbox{\hyperlink{classkblib_1_1cond__ptr_a524a265215e1ca03b5929864a0bc41cd}{cond\_ptr}}(T* p, \textcolor{keywordtype}{bool} owner = \textcolor{keyword}{false},}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00441}00441                      std::decay\_t<Deleter> del = \{\}) \textcolor{keyword}{noexcept}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00442}00442        : d\_base\{std::move(del)\}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00443}00443        , ptr\_(p)}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00444}00444        , owns\_(owner) \{\}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00445}\mbox{\hyperlink{classkblib_1_1cond__ptr_a621a7ad8d3d84241eecf4d94fdc58d4a}{00445}}    \textcolor{keyword}{explicit} \mbox{\hyperlink{classkblib_1_1cond__ptr_a621a7ad8d3d84241eecf4d94fdc58d4a}{cond\_ptr}}(T* p, std::decay\_t<Deleter> del) noexcept}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00446}00446        : \mbox{\hyperlink{structkblib_1_1detail__memory_1_1as__base__class}{d\_base}}\{std::move(del)\}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00447}00447        , ptr\_(p) \{\}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00448}00448 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00449}\mbox{\hyperlink{classkblib_1_1cond__ptr_a9ba1534e6e693ee770b9fb30631a748a}{00449}}    \mbox{\hyperlink{classkblib_1_1cond__ptr_a9ba1534e6e693ee770b9fb30631a748a}{cond\_ptr}}(\mbox{\hyperlink{classkblib_1_1cond__ptr_a4df32829014a485bd76ec1398454161a}{unique}}\&\& p) noexcept}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00450}00450        : \mbox{\hyperlink{structkblib_1_1detail__memory_1_1as__base__class}{d\_base}}\{p.get\_deleter()\}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00451}00451        , ptr\_(p.release())}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00452}00452        , owns\_(ptr\_) \{\}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00453}00453 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00454}\mbox{\hyperlink{classkblib_1_1cond__ptr_a6d313c971dd198e1f60b2b469f13fb28}{00454}}    \mbox{\hyperlink{classkblib_1_1cond__ptr_a6d313c971dd198e1f60b2b469f13fb28}{cond\_ptr}}(\textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1cond__ptr}{cond\_ptr}}\& other) = \textcolor{keyword}{delete};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00455}00455    \textcolor{comment}{// cond\_ptr(const cond\_ptr\& other) noexcept}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00456}00456    \textcolor{comment}{//     : d\_base\{other.get\_deleter()\}, ptr\_(other.ptr\_) \{\}}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00457}\mbox{\hyperlink{classkblib_1_1cond__ptr_afee522bce600526a781a54300709801c}{00457}}    \mbox{\hyperlink{classkblib_1_1cond__ptr_afee522bce600526a781a54300709801c}{cond\_ptr}}(\mbox{\hyperlink{classkblib_1_1cond__ptr}{cond\_ptr}}\&\& other) noexcept}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00458}00458        : \mbox{\hyperlink{structkblib_1_1detail__memory_1_1as__base__class}{d\_base}}\{other.get\_deleter()\}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00459}00459        , ptr\_(other.ptr\_)}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00460}00460        , owns\_(\mbox{\hyperlink{namespacekblib_a0c3f29dc7d19ffe01f977ce294ee537a}{std::exchange}}(other.owns\_, \textcolor{keyword}{false})) \{\}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00461}00461 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00462}\mbox{\hyperlink{classkblib_1_1cond__ptr_ac0a4d3eed94e5ca93e69fcf9b8792c20}{00462}}    \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{static} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1cond__ptr_ac0a4d3eed94e5ca93e69fcf9b8792c20}{adopt}}(T* p) \textcolor{keyword}{noexcept} -\/> \mbox{\hyperlink{classkblib_1_1cond__ptr}{cond\_ptr}} \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00463}00463       \textcolor{keywordflow}{return} \{p, \textcolor{keyword}{true}\};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00464}00464    \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00465}\mbox{\hyperlink{classkblib_1_1cond__ptr_a214971a17b5ba7f8bac9cdb338d3679a}{00465}}    \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{static} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1cond__ptr_a214971a17b5ba7f8bac9cdb338d3679a}{adopt}}(T* p, \mbox{\hyperlink{classkblib_1_1cond__ptr_a6bcd0bfc4aa82aa486846912c0559d4f}{deleter\_type}} del) \textcolor{keyword}{noexcept}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00466}00466        -\/> \mbox{\hyperlink{classkblib_1_1cond__ptr}{cond\_ptr}} \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00467}00467       \textcolor{keywordflow}{return} \{p, \textcolor{keyword}{true}, del\};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00468}00468    \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00469}00469 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00470}\mbox{\hyperlink{classkblib_1_1cond__ptr_a19e5d2c5635cc58baa90f8c69339394b}{00470}}    \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1cond__ptr_a19e5d2c5635cc58baa90f8c69339394b}{operator=}}(\textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1cond__ptr}{cond\_ptr}}\& rhs) \& -\/> \mbox{\hyperlink{classkblib_1_1cond__ptr}{cond\_ptr}}\& = \textcolor{keyword}{delete};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00471}00471    \textcolor{comment}{//  auto operator=(const cond\_ptr\& rhs) \& noexcept -\/> cond\_ptr\& \{}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00472}00472    \textcolor{comment}{//    if (owns\_) \{}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00473}00473    \textcolor{comment}{//       get\_deleter()(ptr\_);}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00474}00474    \textcolor{comment}{//    \}}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00475}00475    \textcolor{comment}{//    owns\_ = false;}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00476}00476    \textcolor{comment}{//    ptr\_ = rhs.release();}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00477}00477    \textcolor{comment}{//    return *this;}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00478}00478    \textcolor{comment}{// \}}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00479}\mbox{\hyperlink{classkblib_1_1cond__ptr_a86b830b4462e4ab421817034b37ddd5b}{00479}}    \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1cond__ptr_a86b830b4462e4ab421817034b37ddd5b}{operator=}}(\mbox{\hyperlink{classkblib_1_1cond__ptr}{cond\_ptr}}\&\& rhs) \& \textcolor{keyword}{noexcept} -\/> \mbox{\hyperlink{classkblib_1_1cond__ptr}{cond\_ptr}}\& \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00480}00480       \textcolor{keywordflow}{if} (owns\_) \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00481}00481          get\_deleter()(ptr\_);}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00482}00482       \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00483}00483       owns\_ = rhs.\mbox{\hyperlink{classkblib_1_1cond__ptr_a518feab723272e3a07bfe33c7d1ac69a}{owns}}();}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00484}00484       \textcolor{keyword}{static\_cast<}\mbox{\hyperlink{structkblib_1_1detail__memory_1_1as__base__class}{d\_base}}\&\textcolor{keyword}{>}(*this) = \{std::move(rhs.get\_deleter())\};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00485}00485       ptr\_ = rhs.release();}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00486}00486       \textcolor{keywordflow}{return} *\textcolor{keyword}{this};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00487}00487    \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00488}\mbox{\hyperlink{classkblib_1_1cond__ptr_a82a6bdb60a59c2ae44612e458c7f0026}{00488}}    \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1cond__ptr_a82a6bdb60a59c2ae44612e458c7f0026}{operator=}}(\mbox{\hyperlink{classkblib_1_1cond__ptr_a4df32829014a485bd76ec1398454161a}{unique}}\&\& rhs) -\/> \mbox{\hyperlink{classkblib_1_1cond__ptr}{cond\_ptr}}\& \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00489}00489       \textcolor{keyword}{static\_cast<}\mbox{\hyperlink{structkblib_1_1detail__memory_1_1as__base__class}{d\_base}}\&\textcolor{keyword}{>}(*this) = \{std::move(rhs.get\_deleter())\};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00490}00490       ptr\_ = rhs.release();}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00491}00491       owns\_ = bool(ptr\_);}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00492}00492       \textcolor{keywordflow}{return} *\textcolor{keyword}{this};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00493}00493    \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00494}00494 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00505}\mbox{\hyperlink{classkblib_1_1cond__ptr_ab3bbf0c8c3223f83971fb2c2928042e6}{00505}}    \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1cond__ptr_ab3bbf0c8c3223f83971fb2c2928042e6}{to\_unique}}() \&\& \textcolor{keyword}{noexcept} -\/> \mbox{\hyperlink{classkblib_1_1cond__ptr_a4df32829014a485bd76ec1398454161a}{unique}} \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00506}00506       \textcolor{keywordflow}{if} (owns\_) \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00507}00507          \textcolor{keywordflow}{return} \{release(), std::move(get\_deleter())\};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00508}00508       \} \textcolor{keywordflow}{else} \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00509}00509          \textcolor{keywordflow}{return} \{\textcolor{keyword}{nullptr}, get\_deleter()\};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00510}00510       \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00511}00511    \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00512}00512 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00513}\mbox{\hyperlink{classkblib_1_1cond__ptr_a01c0993059485a01a450bbf4df40fb84}{00513}}    \textcolor{keyword}{explicit} \textcolor{keyword}{operator} \mbox{\hyperlink{classkblib_1_1cond__ptr_a4df32829014a485bd76ec1398454161a}{unique}}() \&\& \textcolor{keyword}{noexcept} \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00514}00514       \textcolor{keywordflow}{return} std::move(*this).to\_unique();}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00515}00515    \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00516}00516 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00517}\mbox{\hyperlink{classkblib_1_1cond__ptr_a5aac6c6de760ec559f9ecf0e7f9f85f6}{00517}}    \mbox{\hyperlink{classkblib_1_1cond__ptr_a5aac6c6de760ec559f9ecf0e7f9f85f6}{\string~cond\_ptr}}() noexcept \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00518}00518       \textcolor{keywordflow}{if} (owns\_ and ptr\_) \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00519}00519          get\_deleter()(ptr\_);}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00520}00520       \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00521}00521    \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00522}00522 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00523}\mbox{\hyperlink{classkblib_1_1cond__ptr_adce65161246e16e2b8e2b0c77a9a9ed6}{00523}}    \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1cond__ptr_adce65161246e16e2b8e2b0c77a9a9ed6}{weak}}() const\& noexcept -\/> \mbox{\hyperlink{classkblib_1_1cond__ptr}{cond\_ptr}} \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00524}00524       \textcolor{keywordflow}{return} \mbox{\hyperlink{classkblib_1_1cond__ptr}{cond\_ptr}}\{ptr\_, \textcolor{keyword}{false}\};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00525}00525    \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00526}00526 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00527}\mbox{\hyperlink{classkblib_1_1cond__ptr_a518feab723272e3a07bfe33c7d1ac69a}{00527}}    \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1cond__ptr_a518feab723272e3a07bfe33c7d1ac69a}{owns}}() const noexcept -\/> \textcolor{keywordtype}{bool} \{ \textcolor{keywordflow}{return} owns\_; \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00528}\mbox{\hyperlink{classkblib_1_1cond__ptr_a44a71791e46c1c3a0539116399ea602f}{00528}}    \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1cond__ptr_a44a71791e46c1c3a0539116399ea602f}{release}}() \& \textcolor{keyword}{noexcept} -\/> T* \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00529}00529       owns\_ = \textcolor{keyword}{false};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00530}00530       \textcolor{keywordflow}{return} \mbox{\hyperlink{namespacekblib_a0c3f29dc7d19ffe01f977ce294ee537a}{std::exchange}}(ptr\_, \textcolor{keyword}{nullptr});}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00531}00531    \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00532}00532 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00533}\mbox{\hyperlink{classkblib_1_1cond__ptr_a72205c4d0a79021139d8294692fc54df}{00533}}    \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1cond__ptr_a72205c4d0a79021139d8294692fc54df}{get\_deleter}}() noexcept -\/> Deleter\& \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00534}00534       \textcolor{keywordflow}{return} this-\/>d\_base::base();}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00535}00535    \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00536}00536 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00537}\mbox{\hyperlink{classkblib_1_1cond__ptr_a87e9cbd850657dbe09a0dffe9b9752d8}{00537}}    \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1cond__ptr_a87e9cbd850657dbe09a0dffe9b9752d8}{get\_deleter}}() const noexcept -\/> const Deleter\& \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00538}00538       \textcolor{keywordflow}{return} this-\/>d\_base::base();}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00539}00539    \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00540}00540 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00541}\mbox{\hyperlink{classkblib_1_1cond__ptr_a25d228af46d3ff9d4c84b783add5a760}{00541}}    \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1cond__ptr_a25d228af46d3ff9d4c84b783add5a760}{reset}}(T* p = \textcolor{keyword}{nullptr}, \textcolor{keywordtype}{bool} owner = \textcolor{keyword}{false},}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00542}00542               std::decay\_t<Deleter> del = \{\}) \& \textcolor{keyword}{noexcept} -\/> \textcolor{keywordtype}{void} \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00543}00543       \textcolor{keywordflow}{if} (owns\_) \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00544}00544          get\_deleter()(ptr\_);}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00545}00545       \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00546}00546       ptr\_ = p;}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00547}00547       owns\_ = owner;}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00548}00548       get\_deleter() = std::move(del);}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00549}00549    \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00550}\mbox{\hyperlink{classkblib_1_1cond__ptr_afc1f9b1d78436d3ca9b5f361ca12a1f4}{00550}}    \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1cond__ptr_afc1f9b1d78436d3ca9b5f361ca12a1f4}{reset}}(T* p, std::decay\_t<Deleter> del = \{\}) \& \textcolor{keyword}{noexcept} -\/> \textcolor{keywordtype}{void} \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00551}00551       \textcolor{keywordflow}{if} (owns\_) \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00552}00552          get\_deleter()(ptr\_);}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00553}00553       \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00554}00554       ptr\_ = p;}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00555}00555       owns\_ = \textcolor{keyword}{false};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00556}00556       get\_deleter() = std::move(del);}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00557}00557    \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00558}00558 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00559}\mbox{\hyperlink{classkblib_1_1cond__ptr_a5eaa86091ee75715679fda3a7e034a94}{00559}}    \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1cond__ptr_a5eaa86091ee75715679fda3a7e034a94}{swap}}(\mbox{\hyperlink{classkblib_1_1cond__ptr}{cond\_ptr}}\& other) \textcolor{keyword}{noexcept}(}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00560}00560        \mbox{\hyperlink{structkblib_1_1fakestd_1_1is__nothrow__swappable}{fakestd::is\_nothrow\_swappable<Deleter>::value}}) -\/> \textcolor{keywordtype}{void} \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00561}00561       \textcolor{keyword}{using }\mbox{\hyperlink{namespacekblib_a4aadfdece3872e99551aa812ac3bac27}{std::swap}};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00562}00562       \mbox{\hyperlink{namespacekblib_a4aadfdece3872e99551aa812ac3bac27}{swap}}(ptr\_, other.ptr\_);}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00563}00563       \mbox{\hyperlink{namespacekblib_a4aadfdece3872e99551aa812ac3bac27}{swap}}(owns\_, other.owns\_);}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00564}00564       \mbox{\hyperlink{namespacekblib_a4aadfdece3872e99551aa812ac3bac27}{swap}}(get\_deleter(), other.get\_deleter());}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00565}00565    \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00566}00566 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00567}\mbox{\hyperlink{classkblib_1_1cond__ptr_a63ab9e5f1b4056f14fa8b56a6df9c2fa}{00567}}    \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1cond__ptr_a63ab9e5f1b4056f14fa8b56a6df9c2fa}{get}}() \& \textcolor{keyword}{noexcept} -\/> T* \{ \textcolor{keywordflow}{return} ptr\_; \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00568}00568 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00569}\mbox{\hyperlink{classkblib_1_1cond__ptr_a9d978f8cc1cd2bf3dbd7ec799a0ce52b}{00569}}    \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1cond__ptr_a9d978f8cc1cd2bf3dbd7ec799a0ce52b}{get}}() const\& noexcept -\/> const T* \{ \textcolor{keywordflow}{return} ptr\_; \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00570}00570 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00571}\mbox{\hyperlink{classkblib_1_1cond__ptr_a275f10e73f15a16e85c15d1a2c95cc07}{00571}}    \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{explicit} \textcolor{keyword}{operator} bool() const noexcept \{ \textcolor{keywordflow}{return} ptr\_; \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00572}00572 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00573}\mbox{\hyperlink{classkblib_1_1cond__ptr_a445411035d442cc40c988cbf87881ee5}{00573}}    \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1cond__ptr_a445411035d442cc40c988cbf87881ee5}{operator*}}() \& \textcolor{keyword}{noexcept} -\/> T\& \{ \textcolor{keywordflow}{return} *ptr\_; \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00574}00574 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00575}\mbox{\hyperlink{classkblib_1_1cond__ptr_a2defdf9d5dcfd8c6438d657beedc6a67}{00575}}    \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1cond__ptr_a2defdf9d5dcfd8c6438d657beedc6a67}{operator*}}() const\& noexcept -\/> const T\& \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00576}00576       \textcolor{keywordflow}{return} *ptr\_;}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00577}00577    \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00578}00578 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00579}\mbox{\hyperlink{classkblib_1_1cond__ptr_a2f1047a357e163499f526c22d2284f15}{00579}}    \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1cond__ptr_a2f1047a357e163499f526c22d2284f15}{operator-\/>}}() \& \textcolor{keyword}{noexcept} -\/> T* \{ \textcolor{keywordflow}{return} ptr\_; \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00580}00580 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00581}\mbox{\hyperlink{classkblib_1_1cond__ptr_ac19a5760b889244462fe72579cf23789}{00581}}    \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1cond__ptr_ac19a5760b889244462fe72579cf23789}{operator-\/>}}() const\& noexcept -\/> const T* \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00582}00582       \textcolor{keywordflow}{return} ptr\_;}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00583}00583    \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00584}00584 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00585}\mbox{\hyperlink{classkblib_1_1cond__ptr_af61e5b452edde39ca5d0cdde94fd65ea}{00585}}    \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{friend} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1cond__ptr_af61e5b452edde39ca5d0cdde94fd65ea}{operator==}}(}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00586}00586        \textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1cond__ptr}{cond\_ptr}}\& lhs, \textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1cond__ptr}{cond\_ptr}}\& rhs) \textcolor{keyword}{noexcept} -\/> \textcolor{keywordtype}{bool} \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00587}00587       \textcolor{keywordflow}{return} lhs.ptr\_ == rhs.ptr\_;}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00588}00588    \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00589}00589 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00590}\mbox{\hyperlink{classkblib_1_1cond__ptr_a92b1d18c8db327093cb7978c80a2a00a}{00590}}    \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{friend} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1cond__ptr_a92b1d18c8db327093cb7978c80a2a00a}{operator==}}(}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00591}00591        \textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1cond__ptr_a4df32829014a485bd76ec1398454161a}{unique}}\& lhs, \textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1cond__ptr}{cond\_ptr}}\& rhs) \textcolor{keyword}{noexcept} -\/> \textcolor{keywordtype}{bool} \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00592}00592       \textcolor{keywordflow}{return} lhs.get() == rhs.ptr\_;}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00593}00593    \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00594}00594 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00595}\mbox{\hyperlink{classkblib_1_1cond__ptr_ae57a614a50b0c04e6958395ef8898e25}{00595}}    \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{friend} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1cond__ptr_ae57a614a50b0c04e6958395ef8898e25}{operator==}}(\textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1cond__ptr}{cond\_ptr}}\& lhs,}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00596}00596                                                     \textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1cond__ptr_a4df32829014a485bd76ec1398454161a}{unique}}\& rhs) \textcolor{keyword}{noexcept}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00597}00597        -\/> \textcolor{keywordtype}{bool} \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00598}00598       \textcolor{keywordflow}{return} lhs.ptr\_ == rhs.get();}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00599}00599    \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00600}00600 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00601}00601  \textcolor{keyword}{private}:}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00602}00602    T* ptr\_ = \textcolor{keyword}{nullptr};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00603}00603    \textcolor{keywordtype}{bool} owns\_ = \textcolor{keyword}{false};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00604}00604 \};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00605}00605 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00606}00606 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T, \textcolor{keyword}{typename} Deleter>}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00607}\mbox{\hyperlink{classkblib_1_1cond__ptr_3_01_t_0f_0e_00_01_deleter_01_4}{00607}} \textcolor{keyword}{class }\mbox{\hyperlink{classkblib_1_1cond__ptr}{cond\_ptr}}<T[], Deleter> : \textcolor{keyword}{private} \mbox{\hyperlink{structkblib_1_1detail__memory_1_1as__base__class}{detail\_memory::as\_base\_class}}<Deleter> \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00608}00608    \textcolor{keyword}{using }\mbox{\hyperlink{structkblib_1_1detail__memory_1_1as__base__class}{d\_base}} = \mbox{\hyperlink{structkblib_1_1detail__memory_1_1as__base__class}{detail\_memory::as\_base\_class<Deleter>}};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00609}00609 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00610}00610  \textcolor{keyword}{public}:}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00611}\mbox{\hyperlink{classkblib_1_1cond__ptr_3_01_t_0f_0e_00_01_deleter_01_4_a48c12083d8301dad80a1f1644c427841}{00611}}    \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1cond__ptr_3_01_t_0f_0e_00_01_deleter_01_4_a48c12083d8301dad80a1f1644c427841}{pointer}} = \mbox{\hyperlink{namespacekblib_1_1detail__memory_a9cb8ba19f19eee413f3cb3a221bb3a60}{detail\_memory::filter\_deleter\_pointer\_t<Deleter, T>}};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00612}\mbox{\hyperlink{classkblib_1_1cond__ptr_3_01_t_0f_0e_00_01_deleter_01_4_a9bcd4894e8a1c90a2e3dddf1d7903c90}{00612}}    \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1cond__ptr_3_01_t_0f_0e_00_01_deleter_01_4_a9bcd4894e8a1c90a2e3dddf1d7903c90}{element\_type}} = T;}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00613}\mbox{\hyperlink{classkblib_1_1cond__ptr_3_01_t_0f_0e_00_01_deleter_01_4_a3150c6330dbd2ac80a4d30864c67d7a4}{00613}}    \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1cond__ptr_3_01_t_0f_0e_00_01_deleter_01_4_a3150c6330dbd2ac80a4d30864c67d7a4}{deleter\_type}} = Deleter;}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00614}00614 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00615}00615 \textcolor{preprocessor}{\#if 0}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00616}00616    \textcolor{keyword}{static\_assert}(std::is\_nothrow\_invocable<Deleter\&, pointer>::value,}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00617}00617                  \textcolor{stringliteral}{"{}cond\_ptr<T[]> requires that deleter not throw exceptions."{}});}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00618}00618 \textcolor{preprocessor}{\#endif}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00619}00619 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00620}\mbox{\hyperlink{classkblib_1_1cond__ptr_3_01_t_0f_0e_00_01_deleter_01_4_a7b455396685d4d6c8ee6095af7defe7d}{00620}}    \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1cond__ptr_3_01_t_0f_0e_00_01_deleter_01_4_a7b455396685d4d6c8ee6095af7defe7d}{unique}} = std::unique\_ptr<T[], Deleter>;}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00621}00621 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00622}\mbox{\hyperlink{classkblib_1_1cond__ptr_3_01_t_0f_0e_00_01_deleter_01_4_a6dd759ef278c5bd1361b187d612da8b5}{00622}}    \mbox{\hyperlink{classkblib_1_1cond__ptr_3_01_t_0f_0e_00_01_deleter_01_4_a6dd759ef278c5bd1361b187d612da8b5}{cond\_ptr}}() noexcept = default;}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00623}\mbox{\hyperlink{classkblib_1_1cond__ptr_3_01_t_0f_0e_00_01_deleter_01_4_af36f8d74ab016b573fa7a36a53bac483}{00623}}    \mbox{\hyperlink{classkblib_1_1cond__ptr}{cond\_ptr}}(\mbox{\hyperlink{namespacestd}{std}}::nullptr\_t) noexcept \{\}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00624}00624 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00625}\mbox{\hyperlink{classkblib_1_1cond__ptr_3_01_t_0f_0e_00_01_deleter_01_4_aedbffcbfcd8e57960dc26610a10ab517}{00625}}    \textcolor{keyword}{explicit} \mbox{\hyperlink{classkblib_1_1cond__ptr_3_01_t_0f_0e_00_01_deleter_01_4_aedbffcbfcd8e57960dc26610a10ab517}{cond\_ptr}}(T* p, \textcolor{keywordtype}{bool} owner = \textcolor{keyword}{false},}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00626}00626                      std::decay\_t<Deleter> del = \{\}) \textcolor{keyword}{noexcept}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00627}00627        : d\_base\{std::move(del)\}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00628}00628        , ptr\_(p)}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00629}00629        , owns\_(owner) \{\}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00630}\mbox{\hyperlink{classkblib_1_1cond__ptr_3_01_t_0f_0e_00_01_deleter_01_4_a373148c69e166f1e92e8bbbf05c620a6}{00630}}    \textcolor{keyword}{explicit} \mbox{\hyperlink{classkblib_1_1cond__ptr_3_01_t_0f_0e_00_01_deleter_01_4_a373148c69e166f1e92e8bbbf05c620a6}{cond\_ptr}}(T* p, std::decay\_t<Deleter> del) noexcept}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00631}00631        : \mbox{\hyperlink{structkblib_1_1detail__memory_1_1as__base__class}{d\_base}}\{std::move(del)\}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00632}00632        , ptr\_(p) \{\}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00633}00633 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00634}\mbox{\hyperlink{classkblib_1_1cond__ptr_3_01_t_0f_0e_00_01_deleter_01_4_a7ae8e77f270a532e24a9ef5ce461e46a}{00634}}    \mbox{\hyperlink{classkblib_1_1cond__ptr_3_01_t_0f_0e_00_01_deleter_01_4_a7ae8e77f270a532e24a9ef5ce461e46a}{cond\_ptr}}(\mbox{\hyperlink{classkblib_1_1cond__ptr_3_01_t_0f_0e_00_01_deleter_01_4_a7b455396685d4d6c8ee6095af7defe7d}{unique}}\&\& p) noexcept}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00635}00635        : \mbox{\hyperlink{structkblib_1_1detail__memory_1_1as__base__class}{d\_base}}\{p.get\_deleter()\}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00636}00636        , ptr\_(p.release())}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00637}00637        , owns\_(ptr\_) \{\}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00638}00638 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00639}\mbox{\hyperlink{classkblib_1_1cond__ptr_3_01_t_0f_0e_00_01_deleter_01_4_ae93e3c7b77843a757d0572b8d9c67a19}{00639}}    \mbox{\hyperlink{classkblib_1_1cond__ptr_3_01_t_0f_0e_00_01_deleter_01_4_ae93e3c7b77843a757d0572b8d9c67a19}{cond\_ptr}}(\textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1cond__ptr}{cond\_ptr}}\& other) = \textcolor{keyword}{delete};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00640}00640    \textcolor{comment}{// cond\_ptr(const cond\_ptr\& other) noexcept}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00641}00641    \textcolor{comment}{//     : d\_base\{other.get\_deleter()\}, ptr\_(other.ptr\_) \{\}}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00642}\mbox{\hyperlink{classkblib_1_1cond__ptr_3_01_t_0f_0e_00_01_deleter_01_4_a01a89778be0fb9fa6c9a6847ecf6f250}{00642}}    \mbox{\hyperlink{classkblib_1_1cond__ptr_3_01_t_0f_0e_00_01_deleter_01_4_a01a89778be0fb9fa6c9a6847ecf6f250}{cond\_ptr}}(\mbox{\hyperlink{classkblib_1_1cond__ptr}{cond\_ptr}}\&\& other) noexcept}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00643}00643        : \mbox{\hyperlink{structkblib_1_1detail__memory_1_1as__base__class}{d\_base}}\{other.get\_deleter()\}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00644}00644        , ptr\_(other.ptr\_)}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00645}00645        , owns\_(\mbox{\hyperlink{namespacekblib_a0c3f29dc7d19ffe01f977ce294ee537a}{std::exchange}}(other.owns\_, \textcolor{keyword}{false})) \{\}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00646}00646 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00647}\mbox{\hyperlink{classkblib_1_1cond__ptr_3_01_t_0f_0e_00_01_deleter_01_4_acdfd0da37245fc27491a9f86419fd42d}{00647}}    \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{static} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1cond__ptr_3_01_t_0f_0e_00_01_deleter_01_4_acdfd0da37245fc27491a9f86419fd42d}{adopt}}(T* p) \textcolor{keyword}{noexcept} -\/> \mbox{\hyperlink{classkblib_1_1cond__ptr}{cond\_ptr}} \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00648}00648       \textcolor{keywordflow}{return} \{p, \textcolor{keyword}{true}\};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00649}00649    \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00650}\mbox{\hyperlink{classkblib_1_1cond__ptr_3_01_t_0f_0e_00_01_deleter_01_4_a0f8eb4b08447bd98c3c61cc2f2063e98}{00650}}    \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{static} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1cond__ptr_3_01_t_0f_0e_00_01_deleter_01_4_a0f8eb4b08447bd98c3c61cc2f2063e98}{adopt}}(T* p, \mbox{\hyperlink{classkblib_1_1cond__ptr_3_01_t_0f_0e_00_01_deleter_01_4_a3150c6330dbd2ac80a4d30864c67d7a4}{deleter\_type}} del) \textcolor{keyword}{noexcept}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00651}00651        -\/> \mbox{\hyperlink{classkblib_1_1cond__ptr}{cond\_ptr}} \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00652}00652       \textcolor{keywordflow}{return} \{p, \textcolor{keyword}{true}, del\};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00653}00653    \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00654}00654 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00655}\mbox{\hyperlink{classkblib_1_1cond__ptr_3_01_t_0f_0e_00_01_deleter_01_4_afc4c77168bfb4d8b48c6cf4a34249250}{00655}}    \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1cond__ptr_3_01_t_0f_0e_00_01_deleter_01_4_afc4c77168bfb4d8b48c6cf4a34249250}{operator=}}(\textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1cond__ptr}{cond\_ptr}}\& rhs) \& -\/> \mbox{\hyperlink{classkblib_1_1cond__ptr}{cond\_ptr}}\& = \textcolor{keyword}{delete};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00656}00656    \textcolor{comment}{//  auto operator=(const cond\_ptr\& rhs) \& noexcept -\/> cond\_ptr\& \{}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00657}00657    \textcolor{comment}{//    if (owns\_) \{}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00658}00658    \textcolor{comment}{//       get\_deleter()(ptr\_);}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00659}00659    \textcolor{comment}{//    \}}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00660}00660    \textcolor{comment}{//    owns\_ = false;}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00661}00661    \textcolor{comment}{//    ptr\_ = rhs.release();}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00662}00662    \textcolor{comment}{//    return *this;}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00663}00663    \textcolor{comment}{// \}}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00664}\mbox{\hyperlink{classkblib_1_1cond__ptr_3_01_t_0f_0e_00_01_deleter_01_4_a7355204599ce0942ac209cd63e8c8f5d}{00664}}    \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1cond__ptr_3_01_t_0f_0e_00_01_deleter_01_4_a7355204599ce0942ac209cd63e8c8f5d}{operator=}}(\mbox{\hyperlink{classkblib_1_1cond__ptr}{cond\_ptr}}\&\& rhs) \& \textcolor{keyword}{noexcept} -\/> \mbox{\hyperlink{classkblib_1_1cond__ptr}{cond\_ptr}}\& \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00665}00665       \textcolor{keywordflow}{if} (owns\_) \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00666}00666          get\_deleter()(ptr\_);}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00667}00667       \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00668}00668       owns\_ = rhs.\mbox{\hyperlink{classkblib_1_1cond__ptr_a518feab723272e3a07bfe33c7d1ac69a}{owns}}();}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00669}00669       ptr\_ = rhs.release();}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00670}00670       \textcolor{keywordflow}{return} *\textcolor{keyword}{this};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00671}00671    \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00672}\mbox{\hyperlink{classkblib_1_1cond__ptr_3_01_t_0f_0e_00_01_deleter_01_4_a15595f4205ce4f305d1fe5fb5e58b974}{00672}}    \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1cond__ptr_3_01_t_0f_0e_00_01_deleter_01_4_a15595f4205ce4f305d1fe5fb5e58b974}{operator=}}(\mbox{\hyperlink{classkblib_1_1cond__ptr_3_01_t_0f_0e_00_01_deleter_01_4_a7b455396685d4d6c8ee6095af7defe7d}{unique}}\&\& rhs) -\/> \mbox{\hyperlink{classkblib_1_1cond__ptr}{cond\_ptr}}\& \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00673}00673       ptr\_ = rhs.\mbox{\hyperlink{classkblib_1_1cond__ptr_a44a71791e46c1c3a0539116399ea602f}{release}}();}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00674}00674       owns\_ = bool(ptr\_);}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00675}00675       get\_deleter() = std::move(rhs.get\_deleter());}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00676}00676       \textcolor{keywordflow}{return} *\textcolor{keyword}{this};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00677}00677    \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00678}00678 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00689}\mbox{\hyperlink{classkblib_1_1cond__ptr_3_01_t_0f_0e_00_01_deleter_01_4_a91d8990a847e41065015815da307d208}{00689}}    \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1cond__ptr_3_01_t_0f_0e_00_01_deleter_01_4_a91d8990a847e41065015815da307d208}{to\_unique}}() \&\& \textcolor{keyword}{noexcept} -\/> \mbox{\hyperlink{classkblib_1_1cond__ptr_3_01_t_0f_0e_00_01_deleter_01_4_a7b455396685d4d6c8ee6095af7defe7d}{unique}} \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00690}00690       \textcolor{keywordflow}{if} (owns\_) \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00691}00691          \textcolor{keywordflow}{return} \{release(), get\_deleter()\};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00692}00692       \} \textcolor{keywordflow}{else} \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00693}00693          \textcolor{keywordflow}{return} \textcolor{keyword}{nullptr};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00694}00694       \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00695}00695    \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00696}00696 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00697}\mbox{\hyperlink{classkblib_1_1cond__ptr_3_01_t_0f_0e_00_01_deleter_01_4_acf0ff1f4067129b135dfb63f1416feb1}{00697}}    \textcolor{keyword}{explicit} \textcolor{keyword}{operator} \mbox{\hyperlink{classkblib_1_1cond__ptr_3_01_t_0f_0e_00_01_deleter_01_4_a7b455396685d4d6c8ee6095af7defe7d}{unique}}() \&\& \textcolor{keyword}{noexcept} \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00698}00698       \textcolor{keywordflow}{return} std::move(*this).to\_unique();}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00699}00699    \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00700}00700 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00701}\mbox{\hyperlink{classkblib_1_1cond__ptr_3_01_t_0f_0e_00_01_deleter_01_4_a7777ea471605666bd375dac4377615c2}{00701}}    \mbox{\hyperlink{classkblib_1_1cond__ptr_3_01_t_0f_0e_00_01_deleter_01_4_a7777ea471605666bd375dac4377615c2}{\string~cond\_ptr}}() noexcept \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00702}00702       \textcolor{keywordflow}{if} (owns\_) \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00703}00703          get\_deleter()(ptr\_);}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00704}00704       \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00705}00705    \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00706}00706 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00707}\mbox{\hyperlink{classkblib_1_1cond__ptr_3_01_t_0f_0e_00_01_deleter_01_4_ac8406b39f6fafb27ae7e275bf327b19d}{00707}}    \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1cond__ptr_3_01_t_0f_0e_00_01_deleter_01_4_ac8406b39f6fafb27ae7e275bf327b19d}{weak}}() const\& noexcept -\/> \mbox{\hyperlink{classkblib_1_1cond__ptr}{cond\_ptr}} \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00708}00708       \textcolor{keywordflow}{return} \mbox{\hyperlink{classkblib_1_1cond__ptr}{cond\_ptr}}\{ptr\_, \textcolor{keyword}{false}\};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00709}00709    \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00710}00710 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00711}\mbox{\hyperlink{classkblib_1_1cond__ptr_3_01_t_0f_0e_00_01_deleter_01_4_af611c691eddf7ca679f3b7c00ab4601f}{00711}}    \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1cond__ptr_3_01_t_0f_0e_00_01_deleter_01_4_af611c691eddf7ca679f3b7c00ab4601f}{owns}}() const noexcept -\/> \textcolor{keywordtype}{bool} \{ \textcolor{keywordflow}{return} owns\_; \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00712}\mbox{\hyperlink{classkblib_1_1cond__ptr_3_01_t_0f_0e_00_01_deleter_01_4_a0454f4b8040139139dbe7373772a170e}{00712}}    \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1cond__ptr_3_01_t_0f_0e_00_01_deleter_01_4_a0454f4b8040139139dbe7373772a170e}{release}}() \& \textcolor{keyword}{noexcept} -\/> T* \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00713}00713       owns\_ = \textcolor{keyword}{false};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00714}00714       \textcolor{keywordflow}{return} \mbox{\hyperlink{namespacekblib_a0c3f29dc7d19ffe01f977ce294ee537a}{std::exchange}}(ptr\_, \textcolor{keyword}{nullptr});}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00715}00715    \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00716}00716 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00717}\mbox{\hyperlink{classkblib_1_1cond__ptr_3_01_t_0f_0e_00_01_deleter_01_4_a59b64b2b7531650761a28aaaa017fa00}{00717}}    \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1cond__ptr_3_01_t_0f_0e_00_01_deleter_01_4_a59b64b2b7531650761a28aaaa017fa00}{get\_deleter}}() noexcept -\/> Deleter\& \{ \textcolor{keywordflow}{return} *\textcolor{keyword}{this}; \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00718}00718 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00719}\mbox{\hyperlink{classkblib_1_1cond__ptr_3_01_t_0f_0e_00_01_deleter_01_4_a01eace688378fed665329906cee1ef94}{00719}}    \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1cond__ptr_3_01_t_0f_0e_00_01_deleter_01_4_a01eace688378fed665329906cee1ef94}{get\_deleter}}() const noexcept -\/> const Deleter\& \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00720}00720       \textcolor{keywordflow}{return} *\textcolor{keyword}{this};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00721}00721    \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00722}00722 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00723}\mbox{\hyperlink{classkblib_1_1cond__ptr_3_01_t_0f_0e_00_01_deleter_01_4_a9d845b09ab52c539f265aa99c9913e18}{00723}}    \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1cond__ptr_3_01_t_0f_0e_00_01_deleter_01_4_a9d845b09ab52c539f265aa99c9913e18}{reset}}(T* p = \textcolor{keyword}{nullptr}, \textcolor{keywordtype}{bool} owner = \textcolor{keyword}{false},}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00724}00724               std::decay\_t<Deleter> del = \{\}) \& \textcolor{keyword}{noexcept} -\/> \textcolor{keywordtype}{void} \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00725}00725       \textcolor{keywordflow}{if} (owns\_) \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00726}00726          get\_deleter()(ptr\_);}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00727}00727       \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00728}00728       ptr\_ = p;}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00729}00729       owns\_ = owner;}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00730}00730       get\_deleter() = std::move(del);}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00731}00731    \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00732}\mbox{\hyperlink{classkblib_1_1cond__ptr_3_01_t_0f_0e_00_01_deleter_01_4_ad51a29b7255981c5f093197dbbdaf6a4}{00732}}    \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1cond__ptr_3_01_t_0f_0e_00_01_deleter_01_4_ad51a29b7255981c5f093197dbbdaf6a4}{reset}}(T* p, std::decay\_t<Deleter> del = \{\}) \& \textcolor{keyword}{noexcept} -\/> \textcolor{keywordtype}{void} \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00733}00733       \textcolor{keywordflow}{if} (owns\_) \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00734}00734          get\_deleter()(ptr\_);}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00735}00735       \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00736}00736       ptr\_ = p;}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00737}00737       owns\_ = \textcolor{keyword}{false};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00738}00738       get\_deleter() = std::move(del);}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00739}00739    \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00740}00740 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00741}\mbox{\hyperlink{classkblib_1_1cond__ptr_3_01_t_0f_0e_00_01_deleter_01_4_a29e9a6c77df27230b4f1c26ceda675ab}{00741}}    \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1cond__ptr_3_01_t_0f_0e_00_01_deleter_01_4_a29e9a6c77df27230b4f1c26ceda675ab}{swap}}(\mbox{\hyperlink{classkblib_1_1cond__ptr}{cond\_ptr}}\& other) -\/> \textcolor{keywordtype}{void} \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00742}00742       \mbox{\hyperlink{namespacekblib_a4aadfdece3872e99551aa812ac3bac27}{std::swap}}(ptr\_, other.ptr\_);}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00743}00743       \mbox{\hyperlink{namespacekblib_a4aadfdece3872e99551aa812ac3bac27}{std::swap}}(owns\_, other.owns\_);}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00744}00744       \mbox{\hyperlink{namespacekblib_a4aadfdece3872e99551aa812ac3bac27}{std::swap}}(get\_deleter(), other.get\_deleter());}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00745}00745    \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00746}00746 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00747}\mbox{\hyperlink{classkblib_1_1cond__ptr_3_01_t_0f_0e_00_01_deleter_01_4_a827a1eb96b8ce18d8d42386d2ca4bfda}{00747}}    \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1cond__ptr_3_01_t_0f_0e_00_01_deleter_01_4_a827a1eb96b8ce18d8d42386d2ca4bfda}{get}}() \& \textcolor{keyword}{noexcept} -\/> T* \{ \textcolor{keywordflow}{return} ptr\_; \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00748}00748 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00749}\mbox{\hyperlink{classkblib_1_1cond__ptr_3_01_t_0f_0e_00_01_deleter_01_4_ae6cba8b0ca1bd342dd6d9f59c128ea6f}{00749}}    \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1cond__ptr_3_01_t_0f_0e_00_01_deleter_01_4_ae6cba8b0ca1bd342dd6d9f59c128ea6f}{get}}() const\& noexcept -\/> const T* \{ \textcolor{keywordflow}{return} ptr\_; \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00750}00750 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00751}\mbox{\hyperlink{classkblib_1_1cond__ptr_3_01_t_0f_0e_00_01_deleter_01_4_acc70a9c63f4c91157a21d12a4fcdbdab}{00751}}    \textcolor{keyword}{explicit} \textcolor{keyword}{operator} bool() const noexcept \{ \textcolor{keywordflow}{return} ptr\_; \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00752}00752 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00753}\mbox{\hyperlink{classkblib_1_1cond__ptr_3_01_t_0f_0e_00_01_deleter_01_4_a6438356c37ebd1a4e025fbe66ab86fcd}{00753}}    \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} T\& \mbox{\hyperlink{classkblib_1_1cond__ptr_3_01_t_0f_0e_00_01_deleter_01_4_a6438356c37ebd1a4e025fbe66ab86fcd}{operator[]}}(std::size\_t index) \& \textcolor{keyword}{noexcept} \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00754}00754       \textcolor{keywordflow}{return} ptr\_[index];}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00755}00755    \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00756}00756 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00757}\mbox{\hyperlink{classkblib_1_1cond__ptr_3_01_t_0f_0e_00_01_deleter_01_4_a5a0911ca2209ae811fb2303cee71ade1}{00757}}    \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{const} T\& \mbox{\hyperlink{classkblib_1_1cond__ptr_3_01_t_0f_0e_00_01_deleter_01_4_a5a0911ca2209ae811fb2303cee71ade1}{operator[]}}(std::size\_t index) \textcolor{keyword}{const}\& \textcolor{keyword}{noexcept} \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00758}00758       \textcolor{keywordflow}{return} ptr\_[index];}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00759}00759    \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00760}00760 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00761}\mbox{\hyperlink{classkblib_1_1cond__ptr_3_01_t_0f_0e_00_01_deleter_01_4_af61e5b452edde39ca5d0cdde94fd65ea}{00761}}    \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{friend} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1cond__ptr_3_01_t_0f_0e_00_01_deleter_01_4_af61e5b452edde39ca5d0cdde94fd65ea}{operator==}}(}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00762}00762        \textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1cond__ptr}{cond\_ptr}}\& lhs, \textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1cond__ptr}{cond\_ptr}}\& rhs) \textcolor{keyword}{noexcept} -\/> \textcolor{keywordtype}{bool} \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00763}00763       \textcolor{keywordflow}{return} lhs.ptr\_ == rhs.ptr\_;}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00764}00764    \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00765}00765 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00766}\mbox{\hyperlink{classkblib_1_1cond__ptr_3_01_t_0f_0e_00_01_deleter_01_4_a92b1d18c8db327093cb7978c80a2a00a}{00766}}    \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{friend} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1cond__ptr_3_01_t_0f_0e_00_01_deleter_01_4_a92b1d18c8db327093cb7978c80a2a00a}{operator==}}(}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00767}00767        \textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1cond__ptr_3_01_t_0f_0e_00_01_deleter_01_4_a7b455396685d4d6c8ee6095af7defe7d}{unique}}\& lhs, \textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1cond__ptr}{cond\_ptr}}\& rhs) \textcolor{keyword}{noexcept} -\/> \textcolor{keywordtype}{bool} \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00768}00768       \textcolor{keywordflow}{return} lhs.get() == rhs.ptr\_;}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00769}00769    \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00770}00770 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00771}\mbox{\hyperlink{classkblib_1_1cond__ptr_3_01_t_0f_0e_00_01_deleter_01_4_ae57a614a50b0c04e6958395ef8898e25}{00771}}    \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{friend} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1cond__ptr_3_01_t_0f_0e_00_01_deleter_01_4_ae57a614a50b0c04e6958395ef8898e25}{operator==}}(\textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1cond__ptr}{cond\_ptr}}\& lhs,}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00772}00772                                                     \textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1cond__ptr_3_01_t_0f_0e_00_01_deleter_01_4_a7b455396685d4d6c8ee6095af7defe7d}{unique}}\& rhs) \textcolor{keyword}{noexcept}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00773}00773        -\/> \textcolor{keywordtype}{bool} \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00774}00774       \textcolor{keywordflow}{return} lhs.ptr\_ == rhs.get();}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00775}00775    \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00776}00776 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00777}00777  \textcolor{keyword}{private}:}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00778}00778    T* ptr\_ = \textcolor{keyword}{nullptr};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00779}00779    \textcolor{keywordtype}{bool} owns\_ = \textcolor{keyword}{false};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00780}00780 \};}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00781}00781 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00782}00782 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T, \textcolor{keyword}{typename} Deleter>}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00783}\mbox{\hyperlink{namespacekblib_af2d860ddf535b7091b11fc07aabe472f}{00783}} \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{auto} \mbox{\hyperlink{namespacekblib_ab19e9968b3988d68b39eaf3b09342d6e}{make\_cond\_ptr}}(std::unique\_ptr<T, Deleter>\&\& arg) \textcolor{keyword}{noexcept}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00784}00784     -\/> \mbox{\hyperlink{classkblib_1_1cond__ptr}{cond\_ptr<T, Deleter>}} \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00785}00785    \textcolor{keywordflow}{return} \mbox{\hyperlink{classkblib_1_1cond__ptr}{cond\_ptr<T>}}(std::move(arg));}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00786}00786 \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00787}00787 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00788}00788 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00789}\mbox{\hyperlink{namespacekblib_a52d62500a095e18991f3ad59dcc83327}{00789}} \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{auto} \mbox{\hyperlink{namespacekblib_ab19e9968b3988d68b39eaf3b09342d6e}{make\_cond\_ptr}}(T* arg, \textcolor{keywordtype}{bool} owner = \textcolor{keyword}{false}) noexcept}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00790}00790     -\/> \mbox{\hyperlink{classkblib_1_1cond__ptr}{cond\_ptr}}<T> \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00791}00791    \textcolor{keywordflow}{return} \mbox{\hyperlink{classkblib_1_1cond__ptr}{cond\_ptr<T>}}(arg, owner);}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00792}00792 \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00793}00793 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00794}00794 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T, \textcolor{keyword}{typename} Deleter>}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00795}\mbox{\hyperlink{namespacekblib_a6b20de5026ac934359d2cdc1d5426611}{00795}} \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{auto} \mbox{\hyperlink{namespacekblib_ab19e9968b3988d68b39eaf3b09342d6e}{make\_cond\_ptr}}(T* arg, Deleter del) \textcolor{keyword}{noexcept}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00796}00796     -\/> \mbox{\hyperlink{classkblib_1_1cond__ptr}{cond\_ptr<T, Deleter>}} \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00797}00797    \textcolor{keywordflow}{return} \mbox{\hyperlink{classkblib_1_1cond__ptr}{cond\_ptr<T, Deleter>}}(arg, del);}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00798}00798 \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00799}00799 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00800}00800 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T, \textcolor{keyword}{typename} Deleter>}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00801}\mbox{\hyperlink{namespacekblib_ab19e9968b3988d68b39eaf3b09342d6e}{00801}} \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{auto} \mbox{\hyperlink{namespacekblib_ab19e9968b3988d68b39eaf3b09342d6e}{make\_cond\_ptr}}(T* arg, \textcolor{keywordtype}{bool} owner, Deleter del) \textcolor{keyword}{noexcept}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00802}00802     -\/> \mbox{\hyperlink{classkblib_1_1cond__ptr}{cond\_ptr<T, Deleter>}} \{}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00803}00803    \textcolor{keywordflow}{return} \mbox{\hyperlink{classkblib_1_1cond__ptr}{cond\_ptr<T, Deleter>}}(arg, owner, del);}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00804}00804 \}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00805}00805 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00806}00806 \} \textcolor{comment}{// namespace KBLIB\_NS}}
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00807}00807 }
\DoxyCodeLine{\Hypertarget{memory_8h_source_l00808}00808 \textcolor{preprocessor}{\#endif }\textcolor{comment}{// MEMORY\_H}}

\end{DoxyCode}
