\hypertarget{poly__obj_8h_source}{}\doxysection{poly\+\_\+obj.\+h} \label{poly__obj_8h_source}\index{kblib/poly\_obj.h@{kblib/poly\_obj.h}} \mbox{\hyperlink{poly__obj_8h}{Go to the documentation of this file.}} \begin{DoxyCode}{0} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00001}00001 \textcolor{comment}{/* *****************************************************************************}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00002}00002 \textcolor{comment}{ * kblib is a general utility library for C++14 and C++17, intended to provide}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00003}00003 \textcolor{comment}{ * performant high-\/level abstractions and more expressive ways to do simple}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00004}00004 \textcolor{comment}{ * things.}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00005}00005 \textcolor{comment}{ *}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00006}00006 \textcolor{comment}{ * Copyright (c) 2021 killerbee}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00007}00007 \textcolor{comment}{ *}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00008}00008 \textcolor{comment}{ * This program is free software: you can redistribute it and/or modify}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00009}00009 \textcolor{comment}{ * it under the terms of the GNU General Public License as published by}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00010}00010 \textcolor{comment}{ * the Free Software Foundation, either version 3 of the License, or}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00011}00011 \textcolor{comment}{ * (at your option) any later version.}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00012}00012 \textcolor{comment}{ *}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00013}00013 \textcolor{comment}{ * This program is distributed in the hope that it will be useful,}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00014}00014 \textcolor{comment}{ * but WITHOUT ANY WARRANTY; without even the implied warranty of}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00015}00015 \textcolor{comment}{ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00016}00016 \textcolor{comment}{ * GNU General Public License for more details.}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00017}00017 \textcolor{comment}{ *}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00018}00018 \textcolor{comment}{ * You should have received a copy of the GNU General Public License}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00019}00019 \textcolor{comment}{ * along with this program. If not, see .}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00020}00020 \textcolor{comment}{ * ****************************************************************************/}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00021}00021 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00032}00032 \textcolor{preprocessor}{\#ifndef POLY\_OBJ\_H}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00033}00033 \textcolor{preprocessor}{\#define POLY\_OBJ\_H}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00034}00034 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00035}00035 \textcolor{preprocessor}{\#include "{}\mbox{\hyperlink{hash_8h}{hash.h}}"{}}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00036}00036 \textcolor{preprocessor}{\#include "{}\mbox{\hyperlink{variant_8h}{variant.h}}"{}}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00037}00037 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00038}00038 \textcolor{keyword}{namespace }\mbox{\hyperlink{tdecl_8h_a4b5c574c663a392148218cd4410fd7a1}{KBLIB\_NS}} \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00039}00039 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00040}\mbox{\hyperlink{namespacekblib_a2cc6d0e618d41f45deaaa5c6c357ed7a}{00040}} \textcolor{keyword}{enum class} \mbox{\hyperlink{namespacekblib_a2cc6d0e618d41f45deaaa5c6c357ed7a}{construct\_type}} : \textcolor{keywordtype}{unsigned} \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00041}00041 \mbox{\hyperlink{namespacekblib_a2cc6d0e618d41f45deaaa5c6c357ed7aa334c4a4c42fdb79d7ebc3e73b517e6f8}{none}} = 0,} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00042}00042 \mbox{\hyperlink{namespacekblib_a2cc6d0e618d41f45deaaa5c6c357ed7aa849f12a705c6dbc3ff5da992d47a9982}{copy\_only}} = 1,} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00043}00043 \mbox{\hyperlink{namespacekblib_a2cc6d0e618d41f45deaaa5c6c357ed7aa3734a903022249b3010be1897042568e}{move}} = 2,} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00044}00044 \mbox{\hyperlink{namespacekblib_a2cc6d0e618d41f45deaaa5c6c357ed7aaf6cb3e816496528d4187db53bc66567f}{both}} = 3,} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00045}00045 \mbox{\hyperlink{namespacekblib_a2cc6d0e618d41f45deaaa5c6c357ed7aa04d3c750404e3d492d5d7d920189aa52}{throw\_move}} = 4,} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00046}00046 \mbox{\hyperlink{namespacekblib_a2cc6d0e618d41f45deaaa5c6c357ed7aab009e0a1fa84b4e6e58f4ea7acba9712}{both\_throw}} = 5,} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00047}00047 \};} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00048}\mbox{\hyperlink{namespacekblib_a5027ae40714e0bac3fbc7498f9875783}{00048}} \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{namespacekblib_a5027ae40714e0bac3fbc7498f9875783}{operator|}}(\mbox{\hyperlink{namespacekblib_a2cc6d0e618d41f45deaaa5c6c357ed7a}{construct\_type}} l,} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00049}00049 \mbox{\hyperlink{namespacekblib_a2cc6d0e618d41f45deaaa5c6c357ed7a}{construct\_type}} r) \textcolor{keyword}{noexcept}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00050}00050 -\/> \mbox{\hyperlink{namespacekblib_a2cc6d0e618d41f45deaaa5c6c357ed7a}{construct\_type}} \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00051}00051 \textcolor{keywordflow}{return} \textcolor{keyword}{static\_cast<}\mbox{\hyperlink{namespacekblib_a2cc6d0e618d41f45deaaa5c6c357ed7a}{construct\_type}}\textcolor{keyword}{>}(\mbox{\hyperlink{namespacekblib_adceb810a61acaa78f10a700d1618aad7}{etoi}}(l) | \mbox{\hyperlink{namespacekblib_adceb810a61acaa78f10a700d1618aad7}{etoi}}(r));} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00052}00052 \}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00053}00053 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00054}\mbox{\hyperlink{namespacekblib_abb6b875ecf3a38a03dcd0b15aca7a0ea}{00054}} \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{namespacekblib_abb6b875ecf3a38a03dcd0b15aca7a0ea}{operator\&}}(\mbox{\hyperlink{namespacekblib_a2cc6d0e618d41f45deaaa5c6c357ed7a}{construct\_type}} l,} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00055}00055 \mbox{\hyperlink{namespacekblib_a2cc6d0e618d41f45deaaa5c6c357ed7a}{construct\_type}} r) \textcolor{keyword}{noexcept}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00056}00056 -\/> \mbox{\hyperlink{namespacekblib_a2cc6d0e618d41f45deaaa5c6c357ed7a}{construct\_type}} \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00057}00057 \textcolor{keywordflow}{return} \textcolor{keyword}{static\_cast<}\mbox{\hyperlink{namespacekblib_a2cc6d0e618d41f45deaaa5c6c357ed7a}{construct\_type}}\textcolor{keyword}{>}(\mbox{\hyperlink{namespacekblib_adceb810a61acaa78f10a700d1618aad7}{etoi}}(l) \& \mbox{\hyperlink{namespacekblib_adceb810a61acaa78f10a700d1618aad7}{etoi}}(r));} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00058}00058 \}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00059}00059 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00060}\mbox{\hyperlink{namespacekblib_ae2779c90b5c731d209e9cc1f555a18de}{00060}} \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{namespacekblib_ae2779c90b5c731d209e9cc1f555a18de}{operator*}}(\mbox{\hyperlink{namespacekblib_a2cc6d0e618d41f45deaaa5c6c357ed7a}{construct\_type}} l, \textcolor{keywordtype}{bool} r) \textcolor{keyword}{noexcept}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00061}00061 -\/> \mbox{\hyperlink{namespacekblib_a2cc6d0e618d41f45deaaa5c6c357ed7a}{construct\_type}} \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00062}00062 \textcolor{keywordflow}{return} r ? l : construct\_type::none;} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00063}00063 \}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00064}00064 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00070}00070 \textcolor{keyword}{namespace }detail\_poly \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00071}00071 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00072}\mbox{\hyperlink{namespacekblib_1_1detail__poly_aa9dd6842a655495099bc36a29c947f3c}{00072}} \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{namespacekblib_1_1detail__poly_aa9dd6842a655495099bc36a29c947f3c}{copyable}}(\mbox{\hyperlink{namespacekblib_a2cc6d0e618d41f45deaaa5c6c357ed7a}{construct\_type}} type) \textcolor{keyword}{noexcept}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00073}00073 -\/> \textcolor{keywordtype}{bool} \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00074}00074 \textcolor{keywordflow}{return} (type \& construct\_type::copy\_only) != construct\_type::none;} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00075}00075 \}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00076}\mbox{\hyperlink{namespacekblib_1_1detail__poly_aa3f1e557e58498f440cfb3a47edc8e69}{00076}} \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{namespacekblib_1_1detail__poly_aa3f1e557e58498f440cfb3a47edc8e69}{movable}}(\mbox{\hyperlink{namespacekblib_a2cc6d0e618d41f45deaaa5c6c357ed7a}{construct\_type}} type) \textcolor{keyword}{noexcept}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00077}00077 -\/> \textcolor{keywordtype}{bool} \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00078}00078 \textcolor{keywordflow}{return} (type \& construct\_type::move) != construct\_type::none;} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00079}00079 \}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00080}\mbox{\hyperlink{namespacekblib_1_1detail__poly_ab9643d14f3057466208cd3c874114552}{00080}} \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{namespacekblib_1_1detail__poly_ab9643d14f3057466208cd3c874114552}{nothrow\_movable}}(\mbox{\hyperlink{namespacekblib_a2cc6d0e618d41f45deaaa5c6c357ed7a}{construct\_type}} type) \textcolor{keyword}{noexcept}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00081}00081 -\/> \textcolor{keywordtype}{bool} \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00082}00082 \textcolor{keywordflow}{return} (type \& construct\_type::move) != construct\_type::none} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00083}00083 and (type \& construct\_type::throw\_move) == construct\_type::none;} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00084}00084 \}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00085}00085 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00086}\mbox{\hyperlink{namespacekblib_1_1detail__poly_a2b36368b4dc8ff5498b7ae45839e47c5}{00086}} \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{namespacekblib_1_1detail__poly_a2b36368b4dc8ff5498b7ae45839e47c5}{make\_ctype}}(\textcolor{keywordtype}{bool} \mbox{\hyperlink{namespacekblib_1_1detail__poly_aa9dd6842a655495099bc36a29c947f3c}{copyable}}, \textcolor{keywordtype}{bool} \mbox{\hyperlink{namespacekblib_1_1detail__poly_aa3f1e557e58498f440cfb3a47edc8e69}{movable}},} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00087}00087 \textcolor{keywordtype}{bool} \mbox{\hyperlink{namespacekblib_1_1detail__poly_ab9643d14f3057466208cd3c874114552}{nothrow\_movable}})} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00088}00088 -\/> \mbox{\hyperlink{namespacekblib_a2cc6d0e618d41f45deaaa5c6c357ed7a}{construct\_type}} \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00089}00089 \textcolor{keywordflow}{if} (\mbox{\hyperlink{namespacekblib_1_1detail__poly_aa9dd6842a655495099bc36a29c947f3c}{copyable}}) \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00090}00090 \textcolor{keywordflow}{if} (not \mbox{\hyperlink{namespacekblib_1_1detail__poly_aa3f1e557e58498f440cfb3a47edc8e69}{movable}}) \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00091}00091 \textcolor{keywordflow}{return} construct\_type::copy\_only;} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00092}00092 \} \textcolor{keywordflow}{else} \textcolor{keywordflow}{if} (\mbox{\hyperlink{namespacekblib_1_1detail__poly_ab9643d14f3057466208cd3c874114552}{nothrow\_movable}}) \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00093}00093 \textcolor{keywordflow}{return} construct\_type::both;} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00094}00094 \} \textcolor{keywordflow}{else} \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00095}00095 \textcolor{keywordflow}{return} construct\_type::both\_throw;} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00096}00096 \}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00097}00097 \} \textcolor{keywordflow}{else} \textcolor{keywordflow}{if} (\mbox{\hyperlink{namespacekblib_1_1detail__poly_aa3f1e557e58498f440cfb3a47edc8e69}{movable}}) \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00098}00098 \textcolor{keywordflow}{return} construct\_type::move;} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00099}00099 \} \textcolor{keywordflow}{else} \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00100}00100 \textcolor{keywordflow}{return} construct\_type::none;} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00101}00101 \}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00102}00102 \}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00103}00103 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00104}00104 \textcolor{keyword}{template} } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00105}\mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional}{00105}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional}{construct\_conditional}};} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00106}00106 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00107}00107 \textcolor{keyword}{template} <>} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00108}\mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional_3_01construct__type_1_1none_01_4}{00108}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional}{construct\_conditional}}<\mbox{\hyperlink{namespacekblib_a2cc6d0e618d41f45deaaa5c6c357ed7a}{construct\_type}}::\mbox{\hyperlink{namespacekblib_a2cc6d0e618d41f45deaaa5c6c357ed7aa334c4a4c42fdb79d7ebc3e73b517e6f8}{none}}> \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00109}\mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional_3_01construct__type_1_1none_01_4_ad35df961d2d3b184037bc74c86dfd895}{00109}} \mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional_3_01construct__type_1_1none_01_4_ad35df961d2d3b184037bc74c86dfd895}{construct\_conditional}}() noexcept = default;} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00110}\mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional_3_01construct__type_1_1none_01_4_a79373ad6519ad484a5066f870a11cc03}{00110}} \mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional}{construct\_conditional}}(const \mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional}{construct\_conditional}}\&) = delete;} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00111}\mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional_3_01construct__type_1_1none_01_4_ae920794ac8391add8a340f7bd99e3669}{00111}} \mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional}{construct\_conditional}}(\mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional}{construct\_conditional}}\&\&) = delete;} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00112}00112 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00113}\mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional_3_01construct__type_1_1none_01_4_ad3932ad2c30d1bd1043c87eddbb93419}{00113}} auto operator=(const \mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional}{construct\_conditional}}\&)} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00114}00114 -\/> \mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional}{construct\_conditional}}\& = default;} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00115}\mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional_3_01construct__type_1_1none_01_4_a33a03d4649cbc9f01b1763241a947091}{00115}} auto operator=(\mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional}{construct\_conditional}}\&\&)} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00116}00116 -\/> \mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional}{construct\_conditional}}\& = default;} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00117}\mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional_3_01construct__type_1_1none_01_4_a27430d4f01c147b303efa61f83cca6f6}{00117}} \string~\mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional}{construct\_conditional}}() = default;} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00118}00118 \};} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00119}00119 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00120}00120 template <>} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00121}\mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional_3_01construct__type_1_1copy__only_01_4}{00121}} struct \mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional}{construct\_conditional}}<\mbox{\hyperlink{namespacekblib_a2cc6d0e618d41f45deaaa5c6c357ed7a}{construct\_type}}::copy\_only> \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00122}\mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional_3_01construct__type_1_1copy__only_01_4_aaf7232320da85b234fbd8c2e16b82444}{00122}} \mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional_3_01construct__type_1_1copy__only_01_4_aaf7232320da85b234fbd8c2e16b82444}{construct\_conditional}}() noexcept = default;} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00123}\mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional_3_01construct__type_1_1copy__only_01_4_a3ff427c5a404874951c6672881f0fc38}{00123}} \mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional}{construct\_conditional}}(const \mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional}{construct\_conditional}}\&) noexcept = default;} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00124}\mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional_3_01construct__type_1_1copy__only_01_4_a2d89556ac6bba4411adac8add2ea24f1}{00124}} \mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional}{construct\_conditional}}(\mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional}{construct\_conditional}}\&\&) = delete;} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00125}00125 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00126}\mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional_3_01construct__type_1_1copy__only_01_4_ae77020d3379214da3e435c2e585e2401}{00126}} auto operator=(const \mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional}{construct\_conditional}}\&)} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00127}00127 -\/> \mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional}{construct\_conditional}}\& = default;} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00128}\mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional_3_01construct__type_1_1copy__only_01_4_a126d311ecbbd21374c064b16c306f84b}{00128}} auto operator=(\mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional}{construct\_conditional}}\&\&)} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00129}00129 -\/> \mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional}{construct\_conditional}}\& = default;} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00130}\mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional_3_01construct__type_1_1copy__only_01_4_a49b342dd43a56141ecb6203ed687ad35}{00130}} \string~\mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional}{construct\_conditional}}() = default;} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00131}00131 \};} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00132}00132 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00133}00133 template <>} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00134}\mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional_3_01construct__type_1_1move_01_4}{00134}} struct \mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional}{construct\_conditional}}<\mbox{\hyperlink{namespacekblib_a2cc6d0e618d41f45deaaa5c6c357ed7a}{construct\_type}}::move> \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00135}\mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional_3_01construct__type_1_1move_01_4_a91fa7504b98dbe9b919afbdda8ffbaf1}{00135}} \mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional_3_01construct__type_1_1move_01_4_a91fa7504b98dbe9b919afbdda8ffbaf1}{construct\_conditional}}() noexcept = default;} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00136}\mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional_3_01construct__type_1_1move_01_4_a919fc73f686da9fd6ae9427ec0501b3c}{00136}} \mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional}{construct\_conditional}}(const \mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional}{construct\_conditional}}\&) noexcept = delete;} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00137}\mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional_3_01construct__type_1_1move_01_4_a00e910b7ef9db71c8f9a49c6eaba2ac6}{00137}} \mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional}{construct\_conditional}}(\mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional}{construct\_conditional}}\&\&) noexcept = default;} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00138}00138 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00139}\mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional_3_01construct__type_1_1move_01_4_a216f283c8bfccf908fa163a965a46358}{00139}} auto operator=(const \mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional}{construct\_conditional}}\&)} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00140}00140 -\/> \mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional}{construct\_conditional}}\& = default;} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00141}\mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional_3_01construct__type_1_1move_01_4_a4cd5f900d03c5794681ed3dd2bfb7e85}{00141}} auto operator=(\mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional}{construct\_conditional}}\&\&)} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00142}00142 -\/> \mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional}{construct\_conditional}}\& = default;} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00143}\mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional_3_01construct__type_1_1move_01_4_ae6cbdc7a91efa0766d9f6f2b72185171}{00143}} \string~\mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional}{construct\_conditional}}() = default;} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00144}00144 \};} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00145}00145 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00146}00146 template <>} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00147}\mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional_3_01construct__type_1_1both_01_4}{00147}} struct \mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional}{construct\_conditional}}<\mbox{\hyperlink{namespacekblib_a2cc6d0e618d41f45deaaa5c6c357ed7a}{construct\_type}}::both> \{\};} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00148}00148 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00149}00149 \textcolor{keyword}{template} <>} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00150}\mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional_3_01construct__type_1_1throw__move_01_4}{00150}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional}{construct\_conditional}}<\mbox{\hyperlink{namespacekblib_a2cc6d0e618d41f45deaaa5c6c357ed7a}{construct\_type}}::\mbox{\hyperlink{namespacekblib_a2cc6d0e618d41f45deaaa5c6c357ed7aa04d3c750404e3d492d5d7d920189aa52}{throw\_move}}> \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00151}\mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional_3_01construct__type_1_1throw__move_01_4_a1ddbccc810fbd7c6ee34ae60857b21f2}{00151}} \mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional_3_01construct__type_1_1throw__move_01_4_a1ddbccc810fbd7c6ee34ae60857b21f2}{construct\_conditional}}() noexcept = default;} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00152}\mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional_3_01construct__type_1_1throw__move_01_4_aedf574a257c11f53ac2bd2ecdedab09b}{00152}} \mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional}{construct\_conditional}}(const \mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional}{construct\_conditional}}\&) noexcept = delete;} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00153}\mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional_3_01construct__type_1_1throw__move_01_4_af3f92c58a9963b907b0ca115b87fd608}{00153}} \mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional}{construct\_conditional}}(\mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional}{construct\_conditional}}\&\&) noexcept(false) \{\}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00154}00154 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00155}\mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional_3_01construct__type_1_1throw__move_01_4_abc6cbaff576b2e93296254b15d4fadc5}{00155}} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional_3_01construct__type_1_1throw__move_01_4_abc6cbaff576b2e93296254b15d4fadc5}{operator=}}(\textcolor{keyword}{const} \mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional}{construct\_conditional}}\&)} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00156}00156 -\/> \mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional}{construct\_conditional}}\& = \textcolor{keywordflow}{default};} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00157}\mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional_3_01construct__type_1_1throw__move_01_4_a6e832fb5b11ad5d1ae63cf6a8839090b}{00157}} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional_3_01construct__type_1_1throw__move_01_4_a6e832fb5b11ad5d1ae63cf6a8839090b}{operator=}}(\mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional}{construct\_conditional}}\&\&)} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00158}00158 -\/> \mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional}{construct\_conditional}}\& = \textcolor{keywordflow}{default};} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00159}\mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional_3_01construct__type_1_1throw__move_01_4_a957e79cdc3c4fbf97d56805deecbdd21}{00159}} \mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional_3_01construct__type_1_1throw__move_01_4_a957e79cdc3c4fbf97d56805deecbdd21}{\string~construct\_conditional}}() = \textcolor{keywordflow}{default};} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00160}00160 \};} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00161}00161 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00162}00162 \textcolor{keyword}{template} <>} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00163}\mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional_3_01construct__type_1_1both__throw_01_4}{00163}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional}{construct\_conditional}}<\mbox{\hyperlink{namespacekblib_a2cc6d0e618d41f45deaaa5c6c357ed7a}{construct\_type}}::\mbox{\hyperlink{namespacekblib_a2cc6d0e618d41f45deaaa5c6c357ed7aab009e0a1fa84b4e6e58f4ea7acba9712}{both\_throw}}> \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00164}\mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional_3_01construct__type_1_1both__throw_01_4_acb0de7f0ec9e89ad429f892805428139}{00164}} \mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional_3_01construct__type_1_1both__throw_01_4_acb0de7f0ec9e89ad429f892805428139}{construct\_conditional}}() noexcept = default;} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00165}\mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional_3_01construct__type_1_1both__throw_01_4_a812dfdd0e24aea3269c6a7a2b245b910}{00165}} \mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional}{construct\_conditional}}(const \mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional}{construct\_conditional}}\&) = default;} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00166}\mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional_3_01construct__type_1_1both__throw_01_4_ad4a6e51062f5d9a485c397e27e4166b5}{00166}} \mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional}{construct\_conditional}}(\mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional}{construct\_conditional}}\&\&) noexcept(false) \{\}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00167}00167 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00168}\mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional_3_01construct__type_1_1both__throw_01_4_ac38f4f845b2b21ce0e0d17edb7a80cee}{00168}} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional_3_01construct__type_1_1both__throw_01_4_ac38f4f845b2b21ce0e0d17edb7a80cee}{operator=}}(\textcolor{keyword}{const} \mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional}{construct\_conditional}}\&)} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00169}00169 -\/> \mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional}{construct\_conditional}}\& = \textcolor{keywordflow}{default};} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00170}\mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional_3_01construct__type_1_1both__throw_01_4_addde9f29bd3d9a8b71fdf32a46caf22b}{00170}} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional_3_01construct__type_1_1both__throw_01_4_addde9f29bd3d9a8b71fdf32a46caf22b}{operator=}}(\mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional}{construct\_conditional}}\&\&)} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00171}00171 -\/> \mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional}{construct\_conditional}}\& = \textcolor{keywordflow}{default};} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00172}\mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional_3_01construct__type_1_1both__throw_01_4_abcdbd55537f8b00efd4c90fadc40d4ea}{00172}} \mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional_3_01construct__type_1_1both__throw_01_4_abcdbd55537f8b00efd4c90fadc40d4ea}{\string~construct\_conditional}}() = \textcolor{keywordflow}{default};} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00173}00173 \};} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00174}00174 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00175}00175 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00176}\mbox{\hyperlink{namespacekblib_1_1detail__poly_a61756f447c8151e8a8497341f0109885}{00176}} \textcolor{keyword}{constexpr} \mbox{\hyperlink{namespacekblib_a2cc6d0e618d41f45deaaa5c6c357ed7a}{construct\_type}} \mbox{\hyperlink{namespacekblib_1_1detail__poly_a61756f447c8151e8a8497341f0109885}{construct\_traits}}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00177}00177 = construct\_type::copy\_only* std::is\_copy\_constructible::value} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00178}00178 | construct\_type::move* std::is\_move\_constructible::value} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00179}00179 | construct\_type::throw\_move*(} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00180}00180 std::is\_move\_constructible::value} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00181}00181 \& not std::is\_nothrow\_move\_constructible::value);} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00182}00182 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00183}00183 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T, \textcolor{keyword}{typename} hash = \textcolor{keywordtype}{void}>} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00184}\mbox{\hyperlink{structkblib_1_1detail__poly_1_1erased__hash__t}{00184}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1detail__poly_1_1erased__hash__t}{erased\_hash\_t}} \{\};} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00185}00185 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00186}00186 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00187}\mbox{\hyperlink{structkblib_1_1detail__poly_1_1erased__hash__t_3_01_t_00_01void__t_3_01fakestd_1_1invoke__resulte0f114b0d28ead89999e6027fb1e55a8}{00187}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1detail__poly_1_1erased__hash__t}{erased\_hash\_t}}, T>>> \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00188}\mbox{\hyperlink{structkblib_1_1detail__poly_1_1erased__hash__t_3_01_t_00_01void__t_3_01fakestd_1_1invoke__resulte0f114b0d28ead89999e6027fb1e55a8_a89d0a186256e14199175bd689f14ad1c}{00188}} \textcolor{keyword}{static} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1detail__poly_1_1erased__hash__t_3_01_t_00_01void__t_3_01fakestd_1_1invoke__resulte0f114b0d28ead89999e6027fb1e55a8_a89d0a186256e14199175bd689f14ad1c}{default\_hash}}(\textcolor{keywordtype}{void}* obj) -\/> std::size\_t \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00189}00189 \textcolor{keywordflow}{return} std::hash()(*\textcolor{keyword}{static\_cast<}\textcolor{keyword}{const }T*\textcolor{keyword}{>}(obj));} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00190}00190 \}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00191}00191 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00192}\mbox{\hyperlink{structkblib_1_1detail__poly_1_1erased__hash__t_3_01_t_00_01void__t_3_01fakestd_1_1invoke__resulte0f114b0d28ead89999e6027fb1e55a8_a89a5cd649f9183ea94355a525957ecdd}{00192}} \mbox{\hyperlink{namespacekblib_a8fe1791c4dfe674d145963ab5b3121ae}{alias}} hash = \&default\_hash;} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00193}00193 \};} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00194}00194 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00195}00195 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T, \textcolor{keyword}{typename} hash = \textcolor{keywordtype}{void}>} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00196}\mbox{\hyperlink{structkblib_1_1detail__poly_1_1kblib__erased__hash__t}{00196}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1detail__poly_1_1kblib__erased__hash__t}{kblib\_erased\_hash\_t}} \{\};} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00197}00197 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00198}00198 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00199}\mbox{\hyperlink{structkblib_1_1detail__poly_1_1kblib__erased__hash__t_3_01_t_00_01void__t_3_01fakestd_1_1invoke_55adc4f6ef833cf6a377ac3d9da5a8e3}{00199}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1detail__poly_1_1kblib__erased__hash__t}{kblib\_erased\_hash\_t}}<} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00200}00200 T, \mbox{\hyperlink{namespacekblib_1_1fakestd_a2df414d5a1a1f59c8f33520890755f84}{void\_t}}, T>>> \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00201}\mbox{\hyperlink{structkblib_1_1detail__poly_1_1kblib__erased__hash__t_3_01_t_00_01void__t_3_01fakestd_1_1invoke_55adc4f6ef833cf6a377ac3d9da5a8e3_a826f00a7f36fdbcb22675b785fc8b9f8}{00201}} \textcolor{keyword}{static} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1detail__poly_1_1kblib__erased__hash__t_3_01_t_00_01void__t_3_01fakestd_1_1invoke_55adc4f6ef833cf6a377ac3d9da5a8e3_a826f00a7f36fdbcb22675b785fc8b9f8}{default\_hash}}(\textcolor{keywordtype}{void}* obj) -\/> std::size\_t \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00202}00202 \textcolor{keywordflow}{return} \mbox{\hyperlink{structkblib_1_1_f_n_v__hash}{FNV\_hash}}\{\}(*\textcolor{keyword}{static\_cast<}\textcolor{keyword}{const }T*\textcolor{keyword}{>}(obj));} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00203}00203 \}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00204}00204 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00205}\mbox{\hyperlink{structkblib_1_1detail__poly_1_1kblib__erased__hash__t_3_01_t_00_01void__t_3_01fakestd_1_1invoke_55adc4f6ef833cf6a377ac3d9da5a8e3_adb7b81147b605ef169f85d872ac1d7c0}{00205}} \mbox{\hyperlink{namespacekblib_a8fe1791c4dfe674d145963ab5b3121ae}{alias}} hash = \&default\_hash;} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00206}00206 \};} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00207}00207 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00208}00208 \textcolor{keyword}{template} <\textcolor{keyword}{typename} Traits>} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00209}\mbox{\hyperlink{structkblib_1_1detail__poly_1_1erased__construct}{00209}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1detail__poly_1_1erased__construct}{erased\_construct}}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00210}00210 : Traits::copy\_t} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00211}00211 , Traits::move\_t} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00212}00212 , Traits::destroy\_t \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00213}00213 \textcolor{keyword}{using }\mbox{\hyperlink{namespacekblib_ac912dd210d34963da9bd40a1a6296308}{Traits::copy\_t::copy}};} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00214}00214 \textcolor{keyword}{using }Traits::move\_t::move;} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00215}00215 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00216}00216 \textcolor{keyword}{using }Traits::destroy\_t::destroy;} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00217}00217 \};} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00218}00218 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00219}00219 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T, \textcolor{keyword}{typename} Traits>} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00220}\mbox{\hyperlink{namespacekblib_1_1detail__poly_ae72ac6a24753c923d2db4b7559718bec}{00220}} \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{auto} \mbox{\hyperlink{namespacekblib_1_1detail__poly_ae72ac6a24753c923d2db4b7559718bec}{make\_ops\_t}}() noexcept -\/> \mbox{\hyperlink{structkblib_1_1detail__poly_1_1erased__construct}{erased\_construct}} \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00221}00221 \textcolor{keyword}{static\_assert}(\mbox{\hyperlink{structkblib_1_1implies}{implies}}<\mbox{\hyperlink{namespacekblib_1_1detail__poly_aa9dd6842a655495099bc36a29c947f3c}{Traits::copyable}},} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00222}00222 std::is\_copy\_constructible::value>::value,} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00223}00223 \textcolor{stringliteral}{"{}T must be copy constructible if Traits is."{}});} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00224}00224 \textcolor{keyword}{static\_assert}(} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00225}00225 \mbox{\hyperlink{structkblib_1_1implies}{implies}}<\mbox{\hyperlink{namespacekblib_1_1detail__poly_ab9643d14f3057466208cd3c874114552}{Traits::nothrow\_movable}},} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00226}00226 std::is\_nothrow\_move\_constructible::value>::value,} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00227}00227 \textcolor{stringliteral}{"{}T must be nothrow move constructible if Traits is."{}});} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00228}00228 \textcolor{keyword}{static\_assert}(} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00229}00229 \mbox{\hyperlink{structkblib_1_1implies}{implies::value}}>::value,} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00230}00230 \textcolor{stringliteral}{"{}T must be move constructible if Traits is."{}});} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00231}00231 \textcolor{keywordflow}{return} \{\{\textcolor{keyword}{typename} Traits::copy\_t\{\textcolor{keyword}{static\_cast<}T*\textcolor{keyword}{>}(\textcolor{keyword}{nullptr})\}\},} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00232}00232 \{\textcolor{keyword}{typename} Traits::move\_t\{\textcolor{keyword}{static\_cast<}T*\textcolor{keyword}{>}(\textcolor{keyword}{nullptr})\}\},} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00233}00233 \{\textcolor{keyword}{typename} Traits::destroy\_t\{\textcolor{keyword}{static\_cast<}T*\textcolor{keyword}{>}(\textcolor{keyword}{nullptr})\}\}\};} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00234}00234 \}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00235}00235 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00236}00236 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T, \textcolor{keyword}{typename} = \textcolor{keywordtype}{void}>} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00237}\mbox{\hyperlink{structkblib_1_1detail__poly_1_1extract__derived__size}{00237}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1detail__poly_1_1extract__derived__size}{extract\_derived\_size}}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00238}00238 : std::integral\_constant \{\};} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00239}00239 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00240}\mbox{\hyperlink{structkblib_1_1detail__poly_1_1extract__derived__size_3_01_t_00_01void__if__t_3_07_t_1_1max__der728deceb0d3c42387b62a9cae41666e5}{00240}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1detail__poly_1_1extract__derived__size}{extract\_derived\_size}} sizeof(T))>>} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00241}00241 : std::integral\_constant \{\};} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00242}00242 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00243}00243 \} \textcolor{comment}{// namespace detail\_poly}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00244}00244 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00246}00246 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00247}\mbox{\hyperlink{namespacekblib_afc76eb7c2cd74d00487dcfcf9f326c53}{00247}} \textcolor{keyword}{inline} \textcolor{keyword}{auto} \mbox{\hyperlink{namespacekblib_a26ab0d2883ebc03dffa0dabedfc7d906}{noop}}(\textcolor{keywordtype}{void}*, \textcolor{keyword}{const} T*) -\/> T* \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00248}00248 \textcolor{keywordflow}{return} \textcolor{keyword}{nullptr};} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00249}00249 \}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00251}00251 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T, \textcolor{keywordtype}{bool} nothrow>} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00252}\mbox{\hyperlink{namespacekblib_a26ab0d2883ebc03dffa0dabedfc7d906}{00252}} \textcolor{keyword}{inline} \textcolor{keyword}{auto} \mbox{\hyperlink{namespacekblib_a26ab0d2883ebc03dffa0dabedfc7d906}{noop}}(\textcolor{keywordtype}{void}*, T*) \textcolor{keyword}{noexcept}(nothrow) -\/> T* \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00253}00253 \textcolor{keywordflow}{return} \textcolor{keyword}{nullptr};} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00254}00254 \}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00256}00256 \textcolor{keyword}{template} <\textcolor{keyword}{typename} Obj, \textcolor{keywordtype}{bool} copyable>} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00257}\mbox{\hyperlink{structkblib_1_1default__copy}{00257}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1default__copy}{default\_copy}} \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00258}00258 \textcolor{keyword}{private}:} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00259}00259 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00260}00260 \textcolor{keyword}{static} \textcolor{keyword}{auto} do\_copy(\textcolor{keywordtype}{void}* dest, \textcolor{keyword}{const} Obj* from) -\/> Obj* \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00261}00261 \textcolor{keywordflow}{return} \textcolor{keyword}{static\_cast<}Obj*\textcolor{keyword}{>}(\textcolor{keyword}{new} (dest) T(*\textcolor{keyword}{static\_cast<}\textcolor{keyword}{const }T*\textcolor{keyword}{>}(from)));} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00262}00262 \}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00263}00263 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00264}00264 \textcolor{keyword}{auto} (*p\_copy)(\textcolor{keywordtype}{void}* dest, \textcolor{keyword}{const} Obj* from) -\/> Obj* = \&noop;} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00265}00265 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00266}00266 \textcolor{keyword}{public}:} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00268}\mbox{\hyperlink{structkblib_1_1default__copy_a65e84579c624145f275dfa5479299f8f}{00268}} \mbox{\hyperlink{structkblib_1_1default__copy_a65e84579c624145f275dfa5479299f8f}{default\_copy}}() noexcept = default;} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00270}00270 template } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00271}\mbox{\hyperlink{structkblib_1_1default__copy_ace51156797bf1b4f023248c59f661355}{00271}} explicit \mbox{\hyperlink{structkblib_1_1default__copy}{default\_copy}}(T*) noexcept} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00272}00272 : p\_copy(\&do\_copy) \{\}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00273}00273 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00275}\mbox{\hyperlink{structkblib_1_1default__copy_a41d2389f432032c876adf800d72e5aac}{00275}} \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1default__copy_a41d2389f432032c876adf800d72e5aac}{copy}}(\textcolor{keywordtype}{void}* dest, \textcolor{keyword}{const} Obj* from) -\/> Obj* \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00276}00276 \textcolor{keywordflow}{return} p\_copy(dest, from);} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00277}00277 \}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00278}00278 \};} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00279}00279 \textcolor{keyword}{template} <\textcolor{keyword}{typename} Obj>} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00280}\mbox{\hyperlink{structkblib_1_1default__copy_3_01_obj_00_01false_01_4}{00280}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1default__copy}{default\_copy}} \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00281}\mbox{\hyperlink{structkblib_1_1default__copy_3_01_obj_00_01false_01_4_a3f8bd4a4649811f6e646f798097330fa}{00281}} \mbox{\hyperlink{structkblib_1_1default__copy_3_01_obj_00_01false_01_4_a3f8bd4a4649811f6e646f798097330fa}{default\_copy}}() noexcept = default;} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00282}00282 template } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00283}\mbox{\hyperlink{structkblib_1_1default__copy_3_01_obj_00_01false_01_4_a07275e4f983139fbcdd911355a4618eb}{00283}} explicit \mbox{\hyperlink{structkblib_1_1default__copy}{default\_copy}}(T*) noexcept \{\}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00284}\mbox{\hyperlink{structkblib_1_1default__copy_3_01_obj_00_01false_01_4_a22c067235ad19b45cca4f22a1ef5a035}{00284}} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1default__copy_3_01_obj_00_01false_01_4_a22c067235ad19b45cca4f22a1ef5a035}{copy}}(\textcolor{keywordtype}{void}* dest, \textcolor{keyword}{const} Obj* from) -\/> Obj* = \textcolor{keyword}{delete};} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00285}00285 \};} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00290}00290 \textcolor{keyword}{template} <\textcolor{keyword}{typename} Obj, \textcolor{keyword}{auto} (Obj::*clone)(\textcolor{keywordtype}{void}*) \textcolor{keyword}{const}-\/>Obj*>} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00291}\mbox{\hyperlink{structkblib_1_1clone__copy}{00291}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1clone__copy}{clone\_copy}} \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00293}\mbox{\hyperlink{structkblib_1_1clone__copy_a63665ae302ac139ccd642355214deeb5}{00293}} \mbox{\hyperlink{structkblib_1_1clone__copy_a63665ae302ac139ccd642355214deeb5}{clone\_copy}}() = \textcolor{keywordflow}{default};} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00295}00295 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00296}\mbox{\hyperlink{structkblib_1_1clone__copy_ac2a901a9473f364234e13d2813ead6a7}{00296}} \mbox{\hyperlink{structkblib_1_1clone__copy_ac2a901a9473f364234e13d2813ead6a7}{clone\_copy}}(T*) \{\}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00297}00297 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00299}\mbox{\hyperlink{structkblib_1_1clone__copy_a8416f432b6fd97f8ed0ac290e4982136}{00299}} \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1clone__copy_a8416f432b6fd97f8ed0ac290e4982136}{copy}}(\textcolor{keywordtype}{void}* dest, \textcolor{keyword}{const} Obj* from) -\/> Obj* \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00300}00300 \textcolor{keywordflow}{return} (from-\/>*clone)(dest);} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00301}00301 \}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00302}00302 \};} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00304}00304 \textcolor{keyword}{template} <\textcolor{keyword}{typename} Obj, \textcolor{keywordtype}{bool} movable, \textcolor{keywordtype}{bool} nothrow, \textcolor{keywordtype}{bool} copyable>} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00305}\mbox{\hyperlink{structkblib_1_1default__move}{00305}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1default__move}{default\_move}} \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00306}00306 \textcolor{keyword}{private}:} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00307}00307 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00308}00308 \textcolor{keyword}{static} \textcolor{keyword}{auto} do\_move(\textcolor{keywordtype}{void}* dest, Obj* from) \textcolor{keyword}{noexcept}(nothrow) -\/> Obj* \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00309}00309 \textcolor{keywordflow}{return} \textcolor{keyword}{static\_cast<}Obj*\textcolor{keyword}{>}(\textcolor{keyword}{new} (dest) T(std::move(*\textcolor{keyword}{static\_cast<}T*\textcolor{keyword}{>}(from))));} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00310}00310 \}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00311}00311 \textcolor{comment}{// noexcept isn't working here on clang}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00312}00312 \textcolor{keyword}{auto} (*p\_move)(\textcolor{keywordtype}{void}* dest, Obj* from) \textcolor{keyword}{noexcept}(\textcolor{keyword}{false})} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00313}00313 -\/> Obj* = \&noop;} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00314}00314 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00315}00315 \textcolor{keyword}{public}:} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00317}\mbox{\hyperlink{structkblib_1_1default__move_ac2b8e153b7edf8516736c2c2aed332af}{00317}} \mbox{\hyperlink{structkblib_1_1default__move_ac2b8e153b7edf8516736c2c2aed332af}{default\_move}}() noexcept = default;} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00319}00319 template } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00320}\mbox{\hyperlink{structkblib_1_1default__move_ad4d53bb879ab282d61ef5d52c5d29fa6}{00320}} explicit \mbox{\hyperlink{structkblib_1_1default__move}{default\_move}}(T*) noexcept} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00321}00321 : p\_move(\&do\_move) \{\}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00322}00322 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00324}\mbox{\hyperlink{structkblib_1_1default__move_ab7dcb8ef56bd4a64387291a048013a23}{00324}} \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1default__move_ab7dcb8ef56bd4a64387291a048013a23}{move}}(\textcolor{keywordtype}{void}* dest, Obj* from) \textcolor{keyword}{noexcept}(nothrow) -\/> Obj* \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00325}00325 \textcolor{keywordflow}{return} p\_move(dest, from);} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00326}00326 \}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00327}00327 \};} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00328}00328 \textcolor{keyword}{template} <\textcolor{keyword}{typename} Obj, \textcolor{keywordtype}{bool} nothrow>} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00329}\mbox{\hyperlink{structkblib_1_1default__move_3_01_obj_00_01false_00_01nothrow_00_01false_01_4}{00329}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1default__move}{default\_move}} \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00330}\mbox{\hyperlink{structkblib_1_1default__move_3_01_obj_00_01false_00_01nothrow_00_01false_01_4_a3698cf5353c8e883ee2e8a1b446a3509}{00330}} \mbox{\hyperlink{structkblib_1_1default__move_3_01_obj_00_01false_00_01nothrow_00_01false_01_4_a3698cf5353c8e883ee2e8a1b446a3509}{default\_move}}() noexcept = default;} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00331}00331 template } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00332}\mbox{\hyperlink{structkblib_1_1default__move_3_01_obj_00_01false_00_01nothrow_00_01false_01_4_a14e276896caa2f1dd31a449f655036cf}{00332}} explicit \mbox{\hyperlink{structkblib_1_1default__move}{default\_move}}(T*) noexcept \{\}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00333}\mbox{\hyperlink{structkblib_1_1default__move_3_01_obj_00_01false_00_01nothrow_00_01false_01_4_a15ade6b63ee05ee6ddfe5595b59ebf95}{00333}} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1default__move_3_01_obj_00_01false_00_01nothrow_00_01false_01_4_a15ade6b63ee05ee6ddfe5595b59ebf95}{move}}(\textcolor{keywordtype}{void}* dest, Obj* from) \textcolor{keyword}{noexcept}(nothrow) -\/> Obj* = \textcolor{keyword}{delete};} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00334}00334 \};} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00335}00335 \textcolor{comment}{// fallback on copy}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00336}00336 \textcolor{keyword}{template} <\textcolor{keyword}{typename} Obj, \textcolor{keywordtype}{bool} nothrow>} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00337}\mbox{\hyperlink{structkblib_1_1default__move_3_01_obj_00_01false_00_01nothrow_00_01true_01_4}{00337}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1default__move}{default\_move}}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00338}00338 : \textcolor{keyword}{private} \mbox{\hyperlink{structkblib_1_1default__copy}{default\_copy}} \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00339}00339 \textcolor{keyword}{using }\mbox{\hyperlink{structkblib_1_1default__copy}{default\_copy}}::default\_copy;} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00340}00340 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00341}\mbox{\hyperlink{structkblib_1_1default__move_3_01_obj_00_01false_00_01nothrow_00_01true_01_4_a3fe62f4276aedef5d2ac13925c4dc0ff}{00341}} \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1default__move_3_01_obj_00_01false_00_01nothrow_00_01true_01_4_a3fe62f4276aedef5d2ac13925c4dc0ff}{move}}(\textcolor{keywordtype}{void}* dest, \textcolor{keyword}{const} Obj* from) \textcolor{keyword}{noexcept}(nothrow)} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00342}00342 -\/> Obj* \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00343}00343 \textcolor{keywordflow}{return} this-\/>\mbox{\hyperlink{namespacekblib_ac912dd210d34963da9bd40a1a6296308}{copy}}(dest, from);} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00344}00344 \}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00345}00345 \};} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00349}00349 \textcolor{keyword}{template} <\textcolor{keyword}{typename} Obj>} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00350}\mbox{\hyperlink{structkblib_1_1default__destroy}{00350}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1default__destroy}{default\_destroy}} \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00351}\mbox{\hyperlink{structkblib_1_1default__destroy_a90732b6c9652a5f3755b6554e7a1d037}{00351}} \mbox{\hyperlink{structkblib_1_1default__destroy_a90732b6c9652a5f3755b6554e7a1d037}{default\_destroy}}() noexcept = default;} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00352}00352 template } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00353}\mbox{\hyperlink{structkblib_1_1default__destroy_a6ace9f929078a6586a54fc99e90f7555}{00353}} explicit \mbox{\hyperlink{structkblib_1_1default__destroy}{default\_destroy}}(T*) noexcept \{\}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00354}00354 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00355}\mbox{\hyperlink{structkblib_1_1default__destroy_a1275f8105439d3ca987b57569b64fb2d}{00355}} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1default__destroy_a1275f8105439d3ca987b57569b64fb2d}{destroy}}(Obj* obj) -\/> \textcolor{keywordtype}{void} \{ obj-\/>\string~Obj(); \}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00356}00356 \textcolor{keyword}{static\_assert}(std::has\_virtual\_destructor::value,} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00357}00357 \textcolor{stringliteral}{"{}Obj must have a virtual destructor"{}});} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00358}00358 \};} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00359}00359 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00360}00360 \textcolor{comment}{// TODO(killerbee13): Distinguish between pointers to T and to}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00361}00361 \textcolor{comment}{// most-\/derived-\/object}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00362}00362 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00372}00372 \textcolor{keyword}{template} <\textcolor{keyword}{typename} Obj,} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00373}00373 \mbox{\hyperlink{namespacekblib_a2cc6d0e618d41f45deaaa5c6c357ed7a}{construct\_type}} CType = detail\_poly::construct\_traits>} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00374}\mbox{\hyperlink{structkblib_1_1poly__obj__traits}{00374}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1poly__obj__traits}{poly\_obj\_traits}} \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00375}00375 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00382}\mbox{\hyperlink{structkblib_1_1poly__obj__traits_a49bde19820a591802e7c80c4f200385a}{00382}} \textcolor{keyword}{constexpr} \textcolor{keyword}{static} std::size\_t default\_capacity} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00383}00383 = \mbox{\hyperlink{structkblib_1_1detail__poly_1_1extract__derived__size}{detail\_poly::extract\_derived\_size::value}};} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00384}00384 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00388}\mbox{\hyperlink{structkblib_1_1poly__obj__traits_ab38edf9610d6aec9da89a4605f789ef5}{00388}} \textcolor{keyword}{constexpr} \textcolor{keyword}{static} std::size\_t alignment} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00389}00389 = \mbox{\hyperlink{namespacekblib_1_1nums_a64067ecc4167ce1cfe32860ef5c1dc47}{std::max}}(\textcolor{keyword}{alignof}(Obj), \textcolor{keyword}{alignof}(std::max\_align\_t));} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00390}00390 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00394}\mbox{\hyperlink{structkblib_1_1poly__obj__traits_ac43bc6b7443b6009a1d6d255bc02b131}{00394}} \textcolor{keyword}{constexpr} \textcolor{keyword}{static} \textcolor{keywordtype}{bool} \mbox{\hyperlink{namespacekblib_1_1detail__poly_aa9dd6842a655495099bc36a29c947f3c}{copyable}} = \mbox{\hyperlink{namespacekblib_1_1detail__poly_aa9dd6842a655495099bc36a29c947f3c}{detail\_poly::copyable}}(CType);} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00395}00395 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00399}\mbox{\hyperlink{structkblib_1_1poly__obj__traits_a614674cd3a2ae649d5fe60b5b14695fa}{00399}} \textcolor{keyword}{constexpr} \textcolor{keyword}{static} \textcolor{keywordtype}{bool} \mbox{\hyperlink{namespacekblib_1_1detail__poly_aa3f1e557e58498f440cfb3a47edc8e69}{movable}} = \mbox{\hyperlink{namespacekblib_1_1detail__poly_aa3f1e557e58498f440cfb3a47edc8e69}{detail\_poly::movable}}(CType);} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00403}\mbox{\hyperlink{structkblib_1_1poly__obj__traits_af5e3a1c7b48c95a7276f85566400c7d1}{00403}} \textcolor{keyword}{constexpr} \textcolor{keyword}{static} \textcolor{keywordtype}{bool} \mbox{\hyperlink{namespacekblib_1_1detail__poly_ab9643d14f3057466208cd3c874114552}{nothrow\_movable}} = \mbox{\hyperlink{namespacekblib_1_1detail__poly_ab9643d14f3057466208cd3c874114552}{detail\_poly::nothrow\_movable}}(CType);} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00404}00404 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00417}\mbox{\hyperlink{structkblib_1_1poly__obj__traits_a03b2953cb6e3df1a64ef4bff6afa93e8}{00417}} \textcolor{keyword}{using }\mbox{\hyperlink{structkblib_1_1default__copy}{copy\_t}} = \mbox{\hyperlink{structkblib_1_1default__copy}{default\_copy}};} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00418}00418 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00432}\mbox{\hyperlink{structkblib_1_1poly__obj__traits_a487c8a93bae7ffde17a92bb02e99988d}{00432}} \textcolor{keyword}{using }\mbox{\hyperlink{structkblib_1_1default__move}{move\_t}} = \mbox{\hyperlink{structkblib_1_1default__move}{default\_move}};} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00433}00433 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00447}\mbox{\hyperlink{structkblib_1_1poly__obj__traits_aec014c9dea78dc660d62277f17f9e367}{00447}} \textcolor{keyword}{using }\mbox{\hyperlink{structkblib_1_1default__destroy}{destroy\_t}} = \mbox{\hyperlink{structkblib_1_1default__destroy}{default\_destroy}};} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00448}00448 \textcolor{keyword}{static\_assert}(std::is\_empty::value, \textcolor{stringliteral}{"{}"{}});} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00449}00449 \};} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00450}00450 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00451}00451 \textcolor{keyword}{template} <\textcolor{keyword}{typename} Obj>} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00452}\mbox{\hyperlink{namespacekblib_a5695499e50b8ae6a0308bd845774728f}{00452}} \textcolor{keyword}{using }\mbox{\hyperlink{structkblib_1_1poly__obj__traits}{move\_only\_traits}} = \mbox{\hyperlink{structkblib_1_1poly__obj__traits}{poly\_obj\_traits}};} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00453}00453 \textcolor{keyword}{template} <\textcolor{keyword}{typename} Obj>} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00454}\mbox{\hyperlink{namespacekblib_a1f329c91b6941e2cc765d59100b34749}{00454}} \textcolor{keyword}{using }\mbox{\hyperlink{structkblib_1_1poly__obj__traits}{no\_move\_traits}} = \mbox{\hyperlink{structkblib_1_1poly__obj__traits}{poly\_obj\_traits}};} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00455}00455 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00476}00476 \textcolor{keyword}{template} <\textcolor{keyword}{typename} Obj, std::size\_t Capacity = 0,} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00477}00477 \textcolor{keyword}{typename} Traits = \mbox{\hyperlink{structkblib_1_1poly__obj__traits}{poly\_obj\_traits}}>} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00478}\mbox{\hyperlink{classkblib_1_1poly__obj}{00478}} \textcolor{keyword}{class }\mbox{\hyperlink{classkblib_1_1poly__obj}{poly\_obj}}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00479}00479 : \textcolor{keyword}{private} \mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional}{detail\_poly::construct\_conditional}}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00481}00481 , \textcolor{keyword}{private} \mbox{\hyperlink{structkblib_1_1detail__poly_1_1erased__construct}{detail\_poly::erased\_construct}} \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00482}00482 \textcolor{keyword}{private}:} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00483}00483 \textcolor{keyword}{using }\mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional}{disabler}} = \mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional}{detail\_poly::construct\_conditional}}<\mbox{\hyperlink{namespacekblib_1_1detail__poly_a2b36368b4dc8ff5498b7ae45839e47c5}{detail\_poly::make\_ctype}}(} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00484}00484 \mbox{\hyperlink{namespacekblib_1_1detail__poly_aa9dd6842a655495099bc36a29c947f3c}{Traits::copyable}}, \mbox{\hyperlink{namespacekblib_1_1detail__poly_aa3f1e557e58498f440cfb3a47edc8e69}{Traits::movable}}, \mbox{\hyperlink{namespacekblib_1_1detail__poly_ab9643d14f3057466208cd3c874114552}{Traits::nothrow\_movable}})>;} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00485}00485 \textcolor{keyword}{using }\mbox{\hyperlink{structkblib_1_1detail__poly_1_1erased__construct}{ops\_t}} = \mbox{\hyperlink{structkblib_1_1detail__poly_1_1erased__construct}{detail\_poly::erased\_construct}};} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00486}00486 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00487}00487 \textcolor{keyword}{public}:} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00491}\mbox{\hyperlink{classkblib_1_1poly__obj_a2078c4589557ca8baef3249cf8ccdf48}{00491}} \textcolor{keyword}{static} \textcolor{keyword}{constexpr} std::size\_t capacity} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00492}00492 = Capacity > 0 ? Capacity : Traits::default\_capacity;} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00493}00493 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00494}00494 \textcolor{keyword}{static\_assert}(capacity >= \textcolor{keyword}{sizeof}(Obj),} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00495}00495 \textcolor{stringliteral}{"{}Capacity must be large enough for the object type."{}});} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00496}00496 \textcolor{keyword}{static\_assert}(not std::is\_array::value,} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00497}00497 \textcolor{stringliteral}{"{}poly\_obj of array type is disallowed."{}});} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00498}00498 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00499}\mbox{\hyperlink{classkblib_1_1poly__obj_a6b1d7acca03d5bdb88034c877cb6dac1}{00499}} \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1poly__obj_a6b1d7acca03d5bdb88034c877cb6dac1}{base\_type}} = Obj;} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00500}\mbox{\hyperlink{classkblib_1_1poly__obj_aa3ff6d06058df91cc883cbe088a4f2dc}{00500}} \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1poly__obj_aa3ff6d06058df91cc883cbe088a4f2dc}{traits\_type}} = Traits;} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00501}00501 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00506}00506 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00509}\mbox{\hyperlink{classkblib_1_1poly__obj_ad00e8ded81b242af899515f1fecedfea}{00509}} \textcolor{keyword}{constexpr} \mbox{\hyperlink{classkblib_1_1poly__obj_ad00e8ded81b242af899515f1fecedfea}{poly\_obj}}() = \textcolor{keywordflow}{default};} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00513}\mbox{\hyperlink{classkblib_1_1poly__obj_ad875001a01246b38d1256a272497b7a1}{00513}} \textcolor{keyword}{constexpr} \mbox{\hyperlink{classkblib_1_1poly__obj_ad875001a01246b38d1256a272497b7a1}{poly\_obj}}(std::nullptr\_t) noexcept} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00514}00514 : \mbox{\hyperlink{classkblib_1_1poly__obj}{poly\_obj}}() \{\}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00522}\mbox{\hyperlink{classkblib_1_1poly__obj_a8c6394cbaba8ef978d56730d58c8992b}{00522}} \textcolor{keyword}{constexpr} \mbox{\hyperlink{classkblib_1_1poly__obj_a8c6394cbaba8ef978d56730d58c8992b}{poly\_obj}}(\textcolor{keyword}{const} Obj\& obj)} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00523}00523 : ptr(new (data) Obj(obj)) \{\}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00531}\mbox{\hyperlink{classkblib_1_1poly__obj_a57799fcc7def02da0428f4d2c9d40393}{00531}} \textcolor{keyword}{constexpr} \mbox{\hyperlink{classkblib_1_1poly__obj_a57799fcc7def02da0428f4d2c9d40393}{poly\_obj}}(Obj\&\& obj) \textcolor{keyword}{noexcept}(\mbox{\hyperlink{namespacekblib_1_1detail__poly_ab9643d14f3057466208cd3c874114552}{Traits::nothrow\_movable}})} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00532}00532 : ptr(\textcolor{keyword}{new} (data) Obj(std::move(obj))) \{\}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00533}00533 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00540}00540 \textcolor{keyword}{template} <\textcolor{keyword}{typename}... Args,} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00541}00541 \textcolor{keyword}{typename} \mbox{\hyperlink{namespacekblib_a366272ad8baad19be4ccf8128afb04a3}{std::enable\_if\_t}}<} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00542}00542 std::is\_constructible::value, \textcolor{keywordtype}{int}> = 0>} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00543}\mbox{\hyperlink{classkblib_1_1poly__obj_a2f9c210818dd1160029100fc3cad4547}{00543}} \textcolor{keyword}{constexpr} \textcolor{keyword}{explicit} \mbox{\hyperlink{classkblib_1_1poly__obj_a2f9c210818dd1160029100fc3cad4547}{poly\_obj}}(\mbox{\hyperlink{structkblib_1_1fakestd_1_1in__place__t}{fakestd::in\_place\_t}}, Args\&\&... args) \textcolor{keyword}{noexcept}(} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00544}00544 std::is\_nothrow\_constructible::value)} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00545}00545 : \mbox{\hyperlink{structkblib_1_1detail__poly_1_1erased__construct}{ops\_t}}(detail\_poly::make\_ops\_t())} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00546}00546 , ptr(\textcolor{keyword}{new} (data) Obj(std::forward(args)...)) \{\}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00547}00547 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00554}00554 \textcolor{keyword}{template} <\textcolor{keyword}{typename}... Args,} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00555}00555 \textcolor{keyword}{typename} \mbox{\hyperlink{namespacekblib_a366272ad8baad19be4ccf8128afb04a3}{std::enable\_if\_t}}<} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00556}00556 std::is\_constructible::value, \textcolor{keywordtype}{int}> = 0>} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00557}\mbox{\hyperlink{classkblib_1_1poly__obj_aeb7b77c87d2fa63c461039a86be8f651}{00557}} \textcolor{keyword}{constexpr} \textcolor{keyword}{explicit} \mbox{\hyperlink{classkblib_1_1poly__obj_aeb7b77c87d2fa63c461039a86be8f651}{poly\_obj}}(\mbox{\hyperlink{structkblib_1_1in__place__agg__t}{kblib::in\_place\_agg\_t}}, Args\&\&... args) \textcolor{keyword}{noexcept}(} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00558}00558 std::is\_nothrow\_constructible::value)} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00559}00559 : \mbox{\hyperlink{structkblib_1_1detail__poly_1_1erased__construct}{ops\_t}}(detail\_poly::make\_ops\_t())} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00560}00560 , ptr(\textcolor{keyword}{new} (data) Obj\{std::forward(args)...\}) \{\}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00561}00561 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00574}00574 \textcolor{keyword}{template} <\textcolor{keyword}{typename} U, \textcolor{keyword}{typename}... Args>} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00575}\mbox{\hyperlink{classkblib_1_1poly__obj_a52a4496de9d824572a7640a102bf8322}{00575}} \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{static} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1poly__obj_a52a4496de9d824572a7640a102bf8322}{make}}(Args\&\&... args) \textcolor{keyword}{noexcept}(} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00576}00576 std::is\_nothrow\_constructible::value) -\/> \mbox{\hyperlink{classkblib_1_1poly__obj}{poly\_obj}} \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00577}00577 \textcolor{keyword}{static\_assert}(\textcolor{keyword}{sizeof}(U) <= capacity,} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00578}00578 \textcolor{stringliteral}{"{}U must fit inside of the inline capacity."{}});} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00579}00579 \textcolor{keyword}{static\_assert}(\textcolor{keyword}{alignof}(U) <= Traits::alignment,} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00580}00580 \textcolor{stringliteral}{"{}U must be no more aligned than Traits::alignment"{}});} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00581}00581 \textcolor{keyword}{static\_assert}(std::is\_base\_of::value} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00582}00582 and std::is\_convertible::value,} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00583}00583 \textcolor{stringliteral}{"{}Obj must be an accessible base of Obj."{}});} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00584}00584 \textcolor{keyword}{static\_assert}(} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00585}00585 \mbox{\hyperlink{structkblib_1_1implies}{implies}}<\mbox{\hyperlink{namespacekblib_1_1detail__poly_aa9dd6842a655495099bc36a29c947f3c}{Traits::copyable}},} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00586}00586 std::is\_copy\_constructible::value>::value,} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00587}00587 \textcolor{stringliteral}{"{}U must be copy constructible if Traits::copyable is true."{}});} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00588}00588 \textcolor{keyword}{static\_assert}(} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00589}00589 \mbox{\hyperlink{structkblib_1_1implies}{implies::value}}>::value,} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00590}00590 \textcolor{stringliteral}{"{}U must be move constructible if Traits::movable is true."{}});} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00591}00591 \textcolor{keywordflow}{return} \{tag\{\}, std::forward(args)...\};} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00592}00592 \}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00593}00593 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00606}00606 \textcolor{keyword}{template} <\textcolor{keyword}{typename} U, \textcolor{keyword}{typename}... Args>} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00607}\mbox{\hyperlink{classkblib_1_1poly__obj_aa721a7ba8c2f32b9fe38177678f44bfa}{00607}} \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{static} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1poly__obj_aa721a7ba8c2f32b9fe38177678f44bfa}{make\_aggregate}}(Args\&\&... args) \textcolor{keyword}{noexcept}(} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00608}00608 std::is\_nothrow\_constructible::value) -\/> \mbox{\hyperlink{classkblib_1_1poly__obj}{poly\_obj}} \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00609}00609 \textcolor{keyword}{static\_assert}(\textcolor{keyword}{sizeof}(U) <= capacity,} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00610}00610 \textcolor{stringliteral}{"{}U must fit inside of the inline capacity."{}});} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00611}00611 \textcolor{keyword}{static\_assert}(\textcolor{keyword}{alignof}(U) <= Traits::alignment,} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00612}00612 \textcolor{stringliteral}{"{}U must be no more aligned than Traits::alignment"{}});} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00613}00613 \textcolor{keyword}{static\_assert}(std::is\_base\_of::value} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00614}00614 and std::is\_convertible::value,} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00615}00615 \textcolor{stringliteral}{"{}Obj must be an accessible base of Obj."{}});} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00616}00616 \textcolor{keyword}{static\_assert}(} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00617}00617 \mbox{\hyperlink{structkblib_1_1implies}{implies}}<\mbox{\hyperlink{namespacekblib_1_1detail__poly_aa9dd6842a655495099bc36a29c947f3c}{Traits::copyable}},} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00618}00618 std::is\_copy\_constructible::value>::value,} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00619}00619 \textcolor{stringliteral}{"{}U must be copy constructible if Traits::copyable is true."{}});} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00620}00620 \textcolor{keyword}{static\_assert}(} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00621}00621 \mbox{\hyperlink{structkblib_1_1implies}{implies::value}}>::value,} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00622}00622 \textcolor{stringliteral}{"{}U must be move constructible if Traits::movable is true."{}});} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00623}00623 \textcolor{keywordflow}{return} \{tag\{\}, std::forward(args)...\};} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00624}00624 \}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00626}00626 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00631}00631 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00638}\mbox{\hyperlink{classkblib_1_1poly__obj_a92b92aca22c1ae5e9d444c9e42204259}{00638}} \textcolor{keyword}{constexpr} \mbox{\hyperlink{classkblib_1_1poly__obj_a92b92aca22c1ae5e9d444c9e42204259}{poly\_obj}}(\textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1poly__obj}{poly\_obj}}\& other)} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00639}00639 : \mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional}{disabler}}(other)} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00640}00640 , \mbox{\hyperlink{structkblib_1_1detail__poly_1_1erased__construct}{ops\_t}}(other) \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00641}00641 \textcolor{keywordflow}{if} (other.ptr) \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00642}00642 ptr = this-\/>\mbox{\hyperlink{namespacekblib_ac912dd210d34963da9bd40a1a6296308}{copy}}(data, other.ptr);} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00643}00643 \}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00644}00644 \}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00653}\mbox{\hyperlink{classkblib_1_1poly__obj_a85ca15204b2959816e2767d46ee996fb}{00653}} \textcolor{keyword}{constexpr} \mbox{\hyperlink{classkblib_1_1poly__obj_a85ca15204b2959816e2767d46ee996fb}{poly\_obj}}(\mbox{\hyperlink{classkblib_1_1poly__obj}{poly\_obj}}\&\& other) \textcolor{keyword}{noexcept}(\mbox{\hyperlink{namespacekblib_1_1detail__poly_ab9643d14f3057466208cd3c874114552}{Traits::nothrow\_movable}})} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00654}00654 : \mbox{\hyperlink{structkblib_1_1detail__poly_1_1construct__conditional}{disabler}}(std::move(other))} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00655}00655 , \mbox{\hyperlink{structkblib_1_1detail__poly_1_1erased__construct}{ops\_t}}(std::move(other)) \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00656}00656 \textcolor{keywordflow}{if} (other.ptr) \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00657}00657 ptr = this-\/>\mbox{\hyperlink{namespacekblib_a2cc6d0e618d41f45deaaa5c6c357ed7aa3734a903022249b3010be1897042568e}{move}}(data, other.ptr);} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00658}00658 \}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00659}00659 \}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00660}00660 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00671}\mbox{\hyperlink{classkblib_1_1poly__obj_aa44bd038037183afab176e199871c066}{00671}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1poly__obj_aa44bd038037183afab176e199871c066}{operator=}}(\textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1poly__obj}{poly\_obj}}\& other) \& -\/> \mbox{\hyperlink{classkblib_1_1poly__obj}{poly\_obj}}\& \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00672}00672 \textcolor{keywordflow}{if} (\textcolor{keyword}{this} == \&other) \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00673}00673 \textcolor{keywordflow}{return} *\textcolor{keyword}{this};} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00674}00674 \}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00675}00675 clear();} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00676}00676 \textcolor{keyword}{static\_cast<}\mbox{\hyperlink{structkblib_1_1detail__poly_1_1erased__construct}{ops\_t}}\&\textcolor{keyword}{>}(*this) = other;} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00677}00677 \textcolor{keywordflow}{if} (other.ptr) \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00678}00678 ptr = this-\/>\mbox{\hyperlink{namespacekblib_ac912dd210d34963da9bd40a1a6296308}{copy}}(data, other.ptr);} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00679}00679 \}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00680}00680 \textcolor{keywordflow}{return} *\textcolor{keyword}{this};} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00681}00681 \}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00682}00682 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00693}\mbox{\hyperlink{classkblib_1_1poly__obj_a52044d8a5e01aea43470e42bb5f2438c}{00693}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1poly__obj_a52044d8a5e01aea43470e42bb5f2438c}{operator=}}(\mbox{\hyperlink{classkblib_1_1poly__obj}{poly\_obj}}\&\& other) \& \textcolor{keyword}{noexcept}(\mbox{\hyperlink{namespacekblib_1_1detail__poly_ab9643d14f3057466208cd3c874114552}{Traits::nothrow\_movable}})} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00694}00694 -\/> \mbox{\hyperlink{classkblib_1_1poly__obj}{poly\_obj}}\& \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00695}00695 \textcolor{keywordflow}{if} (\textcolor{keyword}{this} == \&other) \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00696}00696 \textcolor{keywordflow}{return} *\textcolor{keyword}{this};} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00697}00697 \}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00698}00698 clear();} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00699}00699 \textcolor{keyword}{static\_cast<}\mbox{\hyperlink{structkblib_1_1detail__poly_1_1erased__construct}{ops\_t}}\&\textcolor{keyword}{>}(*this) = other;} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00700}00700 \textcolor{keywordflow}{if} (other.ptr) \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00701}00701 ptr = this-\/>\mbox{\hyperlink{namespacekblib_a2cc6d0e618d41f45deaaa5c6c357ed7aa3734a903022249b3010be1897042568e}{move}}(data, other.ptr);} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00702}00702 \}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00703}00703 \textcolor{keywordflow}{return} *\textcolor{keyword}{this};} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00704}00704 \}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00706}00706 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00712}\mbox{\hyperlink{classkblib_1_1poly__obj_ad4a570988c6bc362b4485d7e80adc0c3}{00712}} \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1poly__obj_ad4a570988c6bc362b4485d7e80adc0c3}{has\_value}}() const\& noexcept -\/> \textcolor{keywordtype}{bool} \{ \textcolor{keywordflow}{return} ptr; \}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00713}00713 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00714}\mbox{\hyperlink{classkblib_1_1poly__obj_a8564868dfc2816e1f672e6c021f515da}{00714}} \textcolor{keyword}{explicit} \textcolor{keyword}{operator} bool() const\& noexcept \{ \textcolor{keywordflow}{return} has\_value(); \}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00716}00716 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00721}00721 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00724}\mbox{\hyperlink{classkblib_1_1poly__obj_af2a2a9fc9fffe8e76a2cf1ef1cd8fb18}{00724}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1poly__obj_af2a2a9fc9fffe8e76a2cf1ef1cd8fb18}{clear}}() noexcept -\/> \textcolor{keywordtype}{void} \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00725}00725 \textcolor{keywordflow}{if} (ptr) \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00726}00726 this-\/>destroy(ptr);} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00727}00727 ptr = \textcolor{keyword}{nullptr};} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00728}00728 \}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00729}00729 \textcolor{keyword}{static\_cast<}\mbox{\hyperlink{structkblib_1_1detail__poly_1_1erased__construct}{ops\_t}}\&\textcolor{keyword}{>}(*this) = \{\};} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00730}00730 \}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00731}00731 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00732}\mbox{\hyperlink{classkblib_1_1poly__obj_ac0f29d745e5cd252a32e6b3328ad5282}{00732}} \mbox{\hyperlink{classkblib_1_1poly__obj_ac0f29d745e5cd252a32e6b3328ad5282}{\string~poly\_obj}}() noexcept \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00733}00733 \textcolor{keywordflow}{if} (ptr) \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00734}00734 this-\/>destroy(ptr);} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00735}00735 \}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00736}00736 \}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00738}00738 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00744}00744 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00754}\mbox{\hyperlink{classkblib_1_1poly__obj_a0714f3ae71d8ef6010da9fade6e2aeb3}{00754}} \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1poly__obj_a0714f3ae71d8ef6010da9fade6e2aeb3}{operator*}}() \& \textcolor{keyword}{noexcept} -\/> Obj\& \{ \textcolor{keywordflow}{return} *\mbox{\hyperlink{namespacekblib_a951945f1ed7d42562a7e6fa8cf8f0405}{get}}(); \}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00765}\mbox{\hyperlink{classkblib_1_1poly__obj_aea0e85e6bb864599aafac44b707ce121}{00765}} \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1poly__obj_aea0e85e6bb864599aafac44b707ce121}{operator*}}() const\& noexcept -\/> const Obj\& \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00766}00766 \textcolor{keywordflow}{return} *\mbox{\hyperlink{namespacekblib_a951945f1ed7d42562a7e6fa8cf8f0405}{get}}();} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00767}00767 \}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00778}\mbox{\hyperlink{classkblib_1_1poly__obj_a3ef16c67a7179c0cb807e2d7afb7d2d7}{00778}} \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1poly__obj_a3ef16c67a7179c0cb807e2d7afb7d2d7}{operator*}}() \&\& \textcolor{keyword}{noexcept}(\mbox{\hyperlink{namespacekblib_1_1detail__poly_ab9643d14f3057466208cd3c874114552}{Traits::nothrow\_movable}})} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00779}00779 -\/> Obj\&\& \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00780}00780 \textcolor{keywordflow}{return} std::move(*\mbox{\hyperlink{namespacekblib_a951945f1ed7d42562a7e6fa8cf8f0405}{get}}());} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00781}00781 \}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00795}\mbox{\hyperlink{classkblib_1_1poly__obj_a5ddb65d83a010b1c466ce4777b24868f}{00795}} \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1poly__obj_a5ddb65d83a010b1c466ce4777b24868f}{operator*}}() const\&\& noexcept(Traits::\mbox{\hyperlink{namespacekblib_1_1detail__poly_ab9643d14f3057466208cd3c874114552}{nothrow\_movable}})} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00796}00796 -\/> const Obj\&\& \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00797}00797 \textcolor{keywordflow}{return} std::move(*\mbox{\hyperlink{namespacekblib_a951945f1ed7d42562a7e6fa8cf8f0405}{get}}());} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00798}00798 \}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00799}00799 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00809}\mbox{\hyperlink{classkblib_1_1poly__obj_a491cce1508eb4e0b62822e28e86dd790}{00809}} \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1poly__obj_a491cce1508eb4e0b62822e28e86dd790}{get}}() \& \textcolor{keyword}{noexcept} -\/> Obj* \{ \textcolor{keywordflow}{return} ptr; \}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00819}\mbox{\hyperlink{classkblib_1_1poly__obj_a017e68b5780bd59efdf64ea6ca1d2dda}{00819}} \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1poly__obj_a017e68b5780bd59efdf64ea6ca1d2dda}{get}}() const\& noexcept -\/> const Obj* \{ \textcolor{keywordflow}{return} ptr; \}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00820}00820 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00830}\mbox{\hyperlink{classkblib_1_1poly__obj_aee7245515bb6a49247ae60d6a33e461a}{00830}} \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1poly__obj_aee7245515bb6a49247ae60d6a33e461a}{operator-\/>}}() \& \textcolor{keyword}{noexcept} -\/> Obj* \{ \textcolor{keywordflow}{return} ptr; \}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00840}\mbox{\hyperlink{classkblib_1_1poly__obj_aa779092f365e6db35d64c02f115c614e}{00840}} \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1poly__obj_aa779092f365e6db35d64c02f115c614e}{operator-\/>}}() const\& noexcept -\/> const Obj* \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00841}00841 \textcolor{keywordflow}{return} ptr;} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00842}00842 \}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00843}00843 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00854}00854 \textcolor{keyword}{template} <\textcolor{keyword}{typename}... Args>} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00855}\mbox{\hyperlink{classkblib_1_1poly__obj_ab7facea867076cd74cf7959d6fc5d0d8}{00855}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1poly__obj_ab7facea867076cd74cf7959d6fc5d0d8}{operator()}}(Args\&\&... args) \textcolor{keyword}{noexcept}(} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00856}00856 \mbox{\hyperlink{structkblib_1_1fakestd_1_1is__nothrow__invocable}{is\_nothrow\_invocable}}::value)} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00857}00857 -\/> \mbox{\hyperlink{namespacekblib_1_1fakestd_a2641177fb1c17f887061308f2b8b6cae}{fakestd::invoke\_result\_t}} \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00858}00858 \textcolor{keywordflow}{return} \mbox{\hyperlink{namespacekblib_a9b10acd2ddaea118b990e1177f626722}{kblib::invoke}}(*\mbox{\hyperlink{namespacekblib_a951945f1ed7d42562a7e6fa8cf8f0405}{get}}(), std::forward(args)...);} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00859}00859 \}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00870}00870 \textcolor{keyword}{template} <\textcolor{keyword}{typename}... Args>} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00871}\mbox{\hyperlink{classkblib_1_1poly__obj_a72ce02181353cbe46c0cd5a7b19865fe}{00871}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1poly__obj_a72ce02181353cbe46c0cd5a7b19865fe}{operator()}}(Args\&\&... args) \textcolor{keyword}{const}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00872}00872 \textcolor{keyword}{noexcept}(\mbox{\hyperlink{structkblib_1_1fakestd_1_1is__nothrow__invocable}{is\_nothrow\_invocable}}<\textcolor{keyword}{const} Obj\&, Args\&\&...>::value)} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00873}00873 -\/> \mbox{\hyperlink{namespacekblib_1_1fakestd_a2641177fb1c17f887061308f2b8b6cae}{fakestd::invoke\_result\_t}} \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00874}00874 \textcolor{keywordflow}{return} \mbox{\hyperlink{namespacekblib_a9b10acd2ddaea118b990e1177f626722}{kblib::invoke}}(*\mbox{\hyperlink{namespacekblib_a951945f1ed7d42562a7e6fa8cf8f0405}{get}}(), std::forward(args)...);} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00875}00875 \}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00876}00876 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00880}00880 \textcolor{keyword}{template} <\textcolor{keyword}{typename} member\_type>} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00881}00881 \mbox{\hyperlink{namespacekblib_a366272ad8baad19be4ccf8128afb04a3}{enable\_if\_t::value}},} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00882}00882 member\_type>\&} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00883}\mbox{\hyperlink{classkblib_1_1poly__obj_a1100219ad2f03bc8cb8349cf91582247}{00883}} \mbox{\hyperlink{classkblib_1_1poly__obj_a1100219ad2f03bc8cb8349cf91582247}{operator-\/>*}}(member\_type Obj::*member) \& \textcolor{keyword}{noexcept} \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00884}00884 \textcolor{keywordflow}{return} \mbox{\hyperlink{namespacekblib_a951945f1ed7d42562a7e6fa8cf8f0405}{get}}()-\/>*member;} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00885}00885 \}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00886}00886 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00890}00890 \textcolor{keyword}{template} <\textcolor{keyword}{typename} member\_type>} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00891}00891 \textcolor{keyword}{const} \mbox{\hyperlink{namespacekblib_a366272ad8baad19be4ccf8128afb04a3}{enable\_if\_t}}<} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00892}00892 not std::is\_member\_function\_pointer::value,} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00893}00893 member\_type>\&} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00894}\mbox{\hyperlink{classkblib_1_1poly__obj_ae6dc1f6d4f305beb09807adec5b28da1}{00894}} \mbox{\hyperlink{classkblib_1_1poly__obj_ae6dc1f6d4f305beb09807adec5b28da1}{operator-\/>*}}(member\_type Obj::*member) \textcolor{keyword}{const}\& \textcolor{keyword}{noexcept} \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00895}00895 \textcolor{keywordflow}{return} \mbox{\hyperlink{namespacekblib_a951945f1ed7d42562a7e6fa8cf8f0405}{get}}()-\/>*member;} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00896}00896 \}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00897}00897 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00901}00901 \textcolor{keyword}{template} <\textcolor{keyword}{typename} member\_type>} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00902}00902 \mbox{\hyperlink{namespacekblib_a366272ad8baad19be4ccf8128afb04a3}{enable\_if\_t::value}},} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00903}00903 member\_type>\&\&} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00904}\mbox{\hyperlink{classkblib_1_1poly__obj_a44060776051850000388639ff116d5a9}{00904}} \mbox{\hyperlink{classkblib_1_1poly__obj_a44060776051850000388639ff116d5a9}{operator-\/>*}}(member\_type Obj::*member) \&\& \textcolor{keyword}{noexcept} \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00905}00905 \textcolor{keywordflow}{return} std::move(\mbox{\hyperlink{namespacekblib_a951945f1ed7d42562a7e6fa8cf8f0405}{get}}()-\/>*member);} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00906}00906 \}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00907}00907 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00911}00911 \textcolor{keyword}{template} <\textcolor{keyword}{typename} member\_type>} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00912}00912 \textcolor{keyword}{const} \mbox{\hyperlink{namespacekblib_a366272ad8baad19be4ccf8128afb04a3}{enable\_if\_t}}<} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00913}00913 not std::is\_member\_function\_pointer::value,} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00914}00914 member\_type>\&\&} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00915}\mbox{\hyperlink{classkblib_1_1poly__obj_ad505cb7c38be86bfee9252ca9abce3ff}{00915}} \mbox{\hyperlink{classkblib_1_1poly__obj_ad505cb7c38be86bfee9252ca9abce3ff}{operator-\/>*}}(member\_type Obj::*member) \textcolor{keyword}{const}\&\& \textcolor{keyword}{noexcept} \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00916}00916 \textcolor{keywordflow}{return} std::move(\mbox{\hyperlink{namespacekblib_a951945f1ed7d42562a7e6fa8cf8f0405}{get}}()-\/>*member);} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00917}00917 \}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00918}00918 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00923}00923 \textcolor{keyword}{template} <\textcolor{keyword}{typename} member\_type, \textcolor{keyword}{typename}... Args>} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00924}\mbox{\hyperlink{classkblib_1_1poly__obj_a47b8ca1658a5f04da7fcda285cad310a}{00924}} \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1poly__obj_a47b8ca1658a5f04da7fcda285cad310a}{operator-\/>*}}(} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00925}00925 member\_type (Obj::*member)(Args...)) \& \textcolor{keyword}{noexcept} \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00926}00926 \textcolor{keywordflow}{return} [member, value = \mbox{\hyperlink{namespacekblib_a951945f1ed7d42562a7e6fa8cf8f0405}{get}}()](Args... args) -\/> \textcolor{keyword}{decltype}(\textcolor{keyword}{auto}) \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00927}00927 \textcolor{keywordflow}{return} (value-\/>*member)(std::forward(args)...);} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00928}00928 \};} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00929}00929 \}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00930}00930 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00935}00935 \textcolor{keyword}{template} <\textcolor{keyword}{typename} member\_type, \textcolor{keyword}{typename}... Args>} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00936}\mbox{\hyperlink{classkblib_1_1poly__obj_aa484b1617db09add6dd52ebbc8e748e5}{00936}} \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1poly__obj_aa484b1617db09add6dd52ebbc8e748e5}{operator-\/>*}}(member\_type (Obj::*member)(Args...)} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00937}00937 \textcolor{keyword}{const}) \& \textcolor{keyword}{noexcept} \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00938}00938 \textcolor{keywordflow}{return} [member, value = \mbox{\hyperlink{namespacekblib_a951945f1ed7d42562a7e6fa8cf8f0405}{get}}()](Args... args) -\/> \textcolor{keyword}{decltype}(\textcolor{keyword}{auto}) \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00939}00939 \textcolor{keywordflow}{return} (value-\/>*member)(std::forward(args)...);} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00940}00940 \};} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00941}00941 \}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00942}00942 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00947}00947 \textcolor{keyword}{template} <\textcolor{keyword}{typename} member\_type, \textcolor{keyword}{typename}... Args>} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00948}\mbox{\hyperlink{classkblib_1_1poly__obj_ab5cd87130f164432e806a98073b98fa5}{00948}} \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1poly__obj_ab5cd87130f164432e806a98073b98fa5}{operator-\/>*}}(member\_type (Obj::*member)(Args...)} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00949}00949 \textcolor{keyword}{const}) const\& noexcept \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00950}00950 \textcolor{keywordflow}{return} [member, value = \mbox{\hyperlink{namespacekblib_a951945f1ed7d42562a7e6fa8cf8f0405}{get}}()](Args... args) -\/> \textcolor{keyword}{decltype}(\textcolor{keyword}{auto}) \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00951}00951 \textcolor{keywordflow}{return} (value-\/>*member)(std::forward(args)...);} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00952}00952 \};} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00953}00953 \}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00954}00954 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00959}00959 \textcolor{keyword}{template} <\textcolor{keyword}{typename} member\_type, \textcolor{keyword}{typename}... Args>} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00960}\mbox{\hyperlink{classkblib_1_1poly__obj_ad6c81b0ba976695d825edbacd8cd9064}{00960}} \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1poly__obj_ad6c81b0ba976695d825edbacd8cd9064}{operator-\/>*}}(member\_type (Obj::*member)(Args...)} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00961}00961 \textcolor{keyword}{const}) \&\& \textcolor{keyword}{noexcept} \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00962}00962 \textcolor{keywordflow}{return} [member, value = \mbox{\hyperlink{namespacekblib_a951945f1ed7d42562a7e6fa8cf8f0405}{get}}()](Args... args) -\/> \textcolor{keyword}{decltype}(\textcolor{keyword}{auto}) \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00963}00963 \textcolor{keywordflow}{return} (value-\/>*member)(std::forward(args)...);} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00964}00964 \};} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00965}00965 \}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00966}00966 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00971}00971 \textcolor{keyword}{template} <\textcolor{keyword}{typename} member\_type, \textcolor{keyword}{typename}... Args>} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00972}\mbox{\hyperlink{classkblib_1_1poly__obj_a4d66bd7ffbaba5611ec57322ed04c7b6}{00972}} \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1poly__obj_a4d66bd7ffbaba5611ec57322ed04c7b6}{operator-\/>*}}(} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00973}00973 member\_type (Obj::*member)(Args...) \&) \& \textcolor{keyword}{noexcept} \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00974}00974 \textcolor{keywordflow}{return} [member, value = \mbox{\hyperlink{namespacekblib_a951945f1ed7d42562a7e6fa8cf8f0405}{get}}()](Args... args) -\/> \textcolor{keyword}{decltype}(\textcolor{keyword}{auto}) \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00975}00975 \textcolor{keywordflow}{return} (value-\/>*member)(std::forward(args)...);} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00976}00976 \};} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00977}00977 \}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00978}00978 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00983}00983 \textcolor{keyword}{template} <\textcolor{keyword}{typename} member\_type, \textcolor{keyword}{typename}... Args>} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00984}\mbox{\hyperlink{classkblib_1_1poly__obj_a2a90d6e595620cafcdebe0c8f4fd6c08}{00984}} \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1poly__obj_a2a90d6e595620cafcdebe0c8f4fd6c08}{operator-\/>*}}(member\_type (Obj::*member)(Args...)} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00985}00985 \textcolor{keyword}{const}\&) \& \textcolor{keyword}{noexcept} \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00986}00986 \textcolor{keywordflow}{return} [member, value = \mbox{\hyperlink{namespacekblib_a951945f1ed7d42562a7e6fa8cf8f0405}{get}}()](Args... args) -\/> \textcolor{keyword}{decltype}(\textcolor{keyword}{auto}) \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00987}00987 \textcolor{keywordflow}{return} (value-\/>*member)(std::forward(args)...);} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00988}00988 \};} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00989}00989 \}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00990}00990 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00995}00995 \textcolor{keyword}{template} <\textcolor{keyword}{typename} member\_type, \textcolor{keyword}{typename}... Args>} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00996}\mbox{\hyperlink{classkblib_1_1poly__obj_a47f9a09f551b21bb03610d8f41ae346c}{00996}} \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1poly__obj_a47f9a09f551b21bb03610d8f41ae346c}{operator-\/>*}}(member\_type (Obj::*member)(Args...)} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00997}00997 \textcolor{keyword}{const}\&) const\& noexcept \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00998}00998 \textcolor{keywordflow}{return} [member, value = \mbox{\hyperlink{namespacekblib_a951945f1ed7d42562a7e6fa8cf8f0405}{get}}()](Args... args) -\/> \textcolor{keyword}{decltype}(\textcolor{keyword}{auto}) \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l00999}00999 \textcolor{keywordflow}{return} (value-\/>*member)(std::forward(args)...);} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01000}01000 \};} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01001}01001 \}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01002}01002 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01007}01007 \textcolor{keyword}{template} <\textcolor{keyword}{typename} member\_type, \textcolor{keyword}{typename}... Args>} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01008}\mbox{\hyperlink{classkblib_1_1poly__obj_ad37345177103e39fb75a95239e2fd739}{01008}} \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1poly__obj_ad37345177103e39fb75a95239e2fd739}{operator-\/>*}}(member\_type (Obj::*member)(Args...)} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01009}01009 \&\&) \&\& \textcolor{keyword}{noexcept} \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01010}01010 \textcolor{keywordflow}{return} [member, value = \mbox{\hyperlink{namespacekblib_a951945f1ed7d42562a7e6fa8cf8f0405}{get}}()](Args... args) -\/> \textcolor{keyword}{decltype}(\textcolor{keyword}{auto}) \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01011}01011 \textcolor{keywordflow}{return} (std::move(*value).*member)(std::forward(args)...);} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01012}01012 \};} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01013}01013 \}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01014}01014 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01019}01019 \textcolor{keyword}{template} <\textcolor{keyword}{typename} member\_type, \textcolor{keyword}{typename}... Args>} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01020}\mbox{\hyperlink{classkblib_1_1poly__obj_aee7dd1b5d899076a4fb444d1b50a7d83}{01020}} \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1poly__obj_aee7dd1b5d899076a4fb444d1b50a7d83}{operator-\/>*}}(member\_type (Obj::*member)(Args...)} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01021}01021 \textcolor{keyword}{const}\&) \&\& \textcolor{keyword}{noexcept} \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01022}01022 \textcolor{keywordflow}{return} [member, value = \mbox{\hyperlink{namespacekblib_a951945f1ed7d42562a7e6fa8cf8f0405}{get}}()](Args... args) -\/> \textcolor{keyword}{decltype}(\textcolor{keyword}{auto}) \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01023}01023 \textcolor{keywordflow}{return} (value-\/>*member)(std::forward(args)...);} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01024}01024 \};} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01025}01025 \}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01026}01026 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01031}01031 \textcolor{keyword}{template} <\textcolor{keyword}{typename} member\_type, \textcolor{keyword}{typename}... Args>} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01032}\mbox{\hyperlink{classkblib_1_1poly__obj_aef3ff61c8e27445183e3bfcec41f70c5}{01032}} \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1poly__obj_aef3ff61c8e27445183e3bfcec41f70c5}{operator-\/>*}}(} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01033}01033 member\_type (Obj::*member)(Args...)) \&\& \textcolor{keyword}{noexcept} \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01034}01034 \textcolor{keywordflow}{return} [member, value = \mbox{\hyperlink{namespacekblib_a951945f1ed7d42562a7e6fa8cf8f0405}{get}}()](Args... args) -\/> \textcolor{keyword}{decltype}(\textcolor{keyword}{auto}) \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01035}01035 \textcolor{keywordflow}{return} (value-\/>*member)(std::forward(args)...);} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01036}01036 \};} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01037}01037 \}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01038}01038 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01043}01043 \textcolor{keyword}{template} <\textcolor{keyword}{typename} member\_type, \textcolor{keyword}{typename}... Args>} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01044}\mbox{\hyperlink{classkblib_1_1poly__obj_a0187a9ae8fdda053237701f4617e0120}{01044}} \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1poly__obj_a0187a9ae8fdda053237701f4617e0120}{operator-\/>*}}(member\_type (Obj::*member)(Args...)} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01045}01045 \textcolor{keyword}{const}\&\&) \&\& \textcolor{keyword}{noexcept} \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01046}01046 \textcolor{keywordflow}{return} [member, value = \mbox{\hyperlink{namespacekblib_a951945f1ed7d42562a7e6fa8cf8f0405}{get}}()](Args... args) -\/> \textcolor{keyword}{decltype}(\textcolor{keyword}{auto}) \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01047}01047 \textcolor{keywordflow}{return} (std::move(*value).*member)(std::forward(args)...);} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01048}01048 \};} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01049}01049 \}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01050}01050 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01055}01055 \textcolor{keyword}{template} <\textcolor{keyword}{typename} member\_type, \textcolor{keyword}{typename}... Args>} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01056}\mbox{\hyperlink{classkblib_1_1poly__obj_a9a83ebad41b9ddbacfcfc5a69824bcee}{01056}} \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1poly__obj_a9a83ebad41b9ddbacfcfc5a69824bcee}{operator-\/>*}}(member\_type (Obj::*member)(Args...)} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01057}01057 \textcolor{keyword}{const}\&\&) const\&\& noexcept \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01058}01058 \textcolor{keywordflow}{return} [member, value = \mbox{\hyperlink{namespacekblib_a951945f1ed7d42562a7e6fa8cf8f0405}{get}}()](Args... args) -\/> \textcolor{keyword}{decltype}(\textcolor{keyword}{auto}) \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01059}01059 \textcolor{keywordflow}{return} (std::move(*value).*member)(std::forward(args)...);} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01060}01060 \};} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01061}01061 \}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01062}01062 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01063}01063 \textcolor{keyword}{private}:} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01064}01064 \textcolor{keyword}{alignas}(Traits::alignment) \textcolor{keywordtype}{byte} data[capacity]\{\};} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01065}01065 Obj* ptr\{\};} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01066}01066 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01067}01067 \textcolor{keyword}{template} <\textcolor{keyword}{typename} U, \textcolor{keywordtype}{bool} = false>} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01068}01068 \textcolor{keyword}{struct }\mbox{\hyperlink{structtag}{tag}} \{\};} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01069}01069 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01070}01070 \textcolor{keyword}{template} <\textcolor{keyword}{typename} U, \textcolor{keyword}{typename}... Args>} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01071}01071 poly\_obj(\mbox{\hyperlink{structtag}{tag}}, Args\&\&... args) \textcolor{keyword}{noexcept}(} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01072}01072 std::is\_nothrow\_constructible::value)} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01073}01073 : ops\_t(detail\_poly::make\_ops\_t())} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01074}01074 , ptr(\textcolor{keyword}{new} (data) U(std::forward(args)...)) \{\}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01075}01075 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01076}01076 \textcolor{keyword}{template} <\textcolor{keyword}{typename} U, \textcolor{keyword}{typename}... Args>} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01077}01077 poly\_obj(\mbox{\hyperlink{structtag}{tag}}, Args\&\&... args) \textcolor{keyword}{noexcept}(} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01078}01078 std::is\_nothrow\_constructible::value)} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01079}01079 : ops\_t(detail\_poly::make\_ops\_t())} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01080}01080 , ptr(\textcolor{keyword}{new} (data) U\{std::forward(args)...\}) \{\}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01081}01081 \};} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01082}01082 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01083}01083 \textcolor{keyword}{template} <\textcolor{keywordtype}{bool} warn>} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01084}\mbox{\hyperlink{namespacekblib_a377adf58727d546906018e9e2675b98c}{01084}} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{namespacekblib_a377adf58727d546906018e9e2675b98c}{poly\_warn\_if}}() -\/> std::nullptr\_t \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01085}01085 \textcolor{keywordflow}{return} \{\};} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01086}01086 \}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01087}01087 \textcolor{keyword}{template} <>} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01088}01088 [[deprecated(} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01089}01089 \textcolor{stringliteral}{"{}make\_poly\_obj(): Specifying capacity with this "{}}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01090}01090 \textcolor{stringliteral}{"{}API is error-\/prone, consider "{}}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01091}\mbox{\hyperlink{namespacekblib_a500de2a9e580338a753636936fd7d533}{01091}} \textcolor{stringliteral}{"{}using a type alias instead to avoid repetition."{}})]] \textcolor{keyword}{constexpr} \textcolor{keyword}{inline} \textcolor{keyword}{auto}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01092}01092 \mbox{\hyperlink{namespacekblib_a500de2a9e580338a753636936fd7d533}{poly\_warn\_if}}() -\/> std::nullptr\_t \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01093}01093 \textcolor{keywordflow}{return} \{\};} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01094}01094 \}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01095}01095 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01100}01100 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T, \textcolor{keyword}{typename} D = T, std::size\_t Capacity = \textcolor{keyword}{sizeof}(D),} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01101}01101 \textcolor{keyword}{typename} Traits = poly\_obj\_traits, \textcolor{keyword}{typename}... Args>} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01102}\mbox{\hyperlink{classkblib_1_1poly__obj_ab278276b4bf1afaa2a59d73a16741ea6}{01102}} \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1poly__obj_ab278276b4bf1afaa2a59d73a16741ea6}{make\_poly\_obj}}(} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01103}01103 Args\&\&... args,} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01104}01104 std::nullptr\_t = \mbox{\hyperlink{namespacekblib_a377adf58727d546906018e9e2675b98c}{poly\_warn\_if}}<(Capacity != \textcolor{keyword}{sizeof}(D)} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01105}01105 and Capacity > Traits::default\_capacity)>())} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01106}01106 -\/> \mbox{\hyperlink{classkblib_1_1poly__obj}{poly\_obj}} \{} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01107}01107 \textcolor{keywordflow}{return} \mbox{\hyperlink{classkblib_1_1poly__obj}{poly\_obj}}::template make(std::forward(args)...);} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01109}01109 \}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01110}01110 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01111}01111 \} \textcolor{comment}{// namespace KBLIB\_NS}} \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01112}01112 } \DoxyCodeLine{\Hypertarget{poly__obj_8h_source_l01113}01113 \textcolor{preprocessor}{\#endif }\textcolor{comment}{// POLY\_OBJ\_H}} \end{DoxyCode}