\hypertarget{tdecl_8h_source}{}\doxysection{tdecl.\+h}
\label{tdecl_8h_source}\index{kblib/tdecl.h@{kblib/tdecl.h}}
\mbox{\hyperlink{tdecl_8h}{Go to the documentation of this file.}}
\begin{DoxyCode}{0}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00001}00001 \textcolor{comment}{/* *****************************************************************************}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00002}00002 \textcolor{comment}{ * kblib is a general utility library for C++14 and C++17, intended to provide}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00003}00003 \textcolor{comment}{ * performant high-\/level abstractions and more expressive ways to do simple}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00004}00004 \textcolor{comment}{ * things.}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00005}00005 \textcolor{comment}{ *}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00006}00006 \textcolor{comment}{ * Copyright (c) 2021 killerbee}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00007}00007 \textcolor{comment}{ *}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00008}00008 \textcolor{comment}{ * This program is free software: you can redistribute it and/or modify}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00009}00009 \textcolor{comment}{ * it under the terms of the GNU General Public License as published by}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00010}00010 \textcolor{comment}{ * the Free Software Foundation, either version 3 of the License, or}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00011}00011 \textcolor{comment}{ * (at your option) any later version.}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00012}00012 \textcolor{comment}{ *}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00013}00013 \textcolor{comment}{ * This program is distributed in the hope that it will be useful,}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00014}00014 \textcolor{comment}{ * but WITHOUT ANY WARRANTY; without even the implied warranty of}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00015}00015 \textcolor{comment}{ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00016}00016 \textcolor{comment}{ * GNU General Public License for more details.}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00017}00017 \textcolor{comment}{ *}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00018}00018 \textcolor{comment}{ * You should have received a copy of the GNU General Public License}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00019}00019 \textcolor{comment}{ * along with this program.  If not, see <https://www.gnu.org/licenses/>.}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00020}00020 \textcolor{comment}{ * ****************************************************************************/}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00021}00021 }
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00031}00031 \textcolor{preprocessor}{\#ifndef KBLIB\_TDECL\_H}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00032}00032 \textcolor{preprocessor}{\#define KBLIB\_TDECL\_H}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00033}00033 }
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00034}00034 \textcolor{preprocessor}{\#include <cstddef>}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00035}00035 }
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00036}00036 \textcolor{preprocessor}{\#if \_\_cplusplus < 201402L}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00037}00037 \textcolor{preprocessor}{\#  error kblib requires C++14 or higher}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00038}00038 \textcolor{preprocessor}{\#endif}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00039}00039 }
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00040}\mbox{\hyperlink{tdecl_8h_a13c4fd7605bb61d9996dd70fe11a1ede}{00040}} \textcolor{preprocessor}{\#define KBLIB\_X(X) X}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00041}00041 }
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00042}\mbox{\hyperlink{tdecl_8h_a6c8bcea03ee838b1f1ea924f34791b0e}{00042}} \textcolor{preprocessor}{\#define KBLIB\_VERS\_MAJ 00}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00043}\mbox{\hyperlink{tdecl_8h_a88cdd322405e9b95db6b5ba6cc7ca5ce}{00043}} \textcolor{preprocessor}{\#define KBLIB\_VERS\_MIN 04}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00044}\mbox{\hyperlink{tdecl_8h_a7c0071096e942f3f1d7c6e71e732a218}{00044}} \textcolor{preprocessor}{\#define KBLIB\_VERS\_REV 00}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00045}\mbox{\hyperlink{tdecl_8h_aba471e619ee4e5be64e19f28cb493607}{00045}} \textcolor{preprocessor}{\#define KBLIB\_VERS\_I(P, MAJ, MIN, REV) KBLIB\_VERS\_I2(P, MAJ, MIN, REV)}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00046}\mbox{\hyperlink{tdecl_8h_ad8f5b9a069c71344f8cb30c09a12be2d}{00046}} \textcolor{preprocessor}{\#define KBLIB\_VERS\_I2(P, MAJ, MIN, REV) P\#\#MAJ\#\#MIN\#\#REV}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00047}00047 }
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00048}00048 \textcolor{comment}{// VMMmmrr}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00049}\mbox{\hyperlink{tdecl_8h_ad6e43ec2dd6937321c2590d84a5e2898}{00049}} \textcolor{preprocessor}{\#define KBLIB\_VERS\_S \(\backslash\)}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00050}00050 \textcolor{preprocessor}{   KBLIB\_VERS\_I(KBV, KBLIB\_VERS\_MAJ, KBLIB\_VERS\_MIN, KBLIB\_VERS\_REV)}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00051}00051 \textcolor{comment}{// 1MMmmrr}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00052}\mbox{\hyperlink{tdecl_8h_ae3550b996a1f8bc5bbc76ac74c82a67e}{00052}} \textcolor{preprocessor}{\#define KBLIB\_VERS \(\backslash\)}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00053}00053 \textcolor{preprocessor}{   KBLIB\_VERS\_I(1, KBLIB\_VERS\_MAJ, KBLIB\_VERS\_MIN, KBLIB\_VERS\_REV)}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00054}00054 }
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00060}00060 \textcolor{preprocessor}{\#if (\_\_cplusplus >= 201703L)}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00061}00061 \textcolor{preprocessor}{\#  define KBLIB\_USE\_CXX17 1}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00062}00062 \textcolor{preprocessor}{\#else}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00063}\mbox{\hyperlink{tdecl_8h_ac32538c02f53fedcffe93b2b239fe280}{00063}} \textcolor{preprocessor}{\#  define KBLIB\_USE\_CXX17 0}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00064}00064 \textcolor{preprocessor}{\#endif}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00065}00065 }
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00071}00071 \textcolor{preprocessor}{\#if (\_\_cplusplus >= 202002L)}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00072}00072 \textcolor{preprocessor}{\#  define KBLIB\_USE\_CXX20 1}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00073}00073 \textcolor{preprocessor}{\#else}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00074}\mbox{\hyperlink{tdecl_8h_aa38001e0ebc7250d21cfe173e0878b54}{00074}} \textcolor{preprocessor}{\#  define KBLIB\_USE\_CXX20 0}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00075}00075 \textcolor{preprocessor}{\#endif}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00081}00081 \textcolor{preprocessor}{\#ifndef KBLIB\_USE\_STRING\_VIEW}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00082}00082 \textcolor{preprocessor}{\#  if KBLIB\_USE\_CXX17}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00083}00083 \textcolor{preprocessor}{\#     define KBLIB\_USE\_STRING\_VIEW 1}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00084}00084 \textcolor{preprocessor}{\#  else}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00085}00085 \textcolor{preprocessor}{\#     define KBLIB\_USE\_STRING\_VIEW 0}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00086}00086 \textcolor{preprocessor}{\#  endif}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00087}00087 \textcolor{preprocessor}{\#endif}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00088}00088 }
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00093}00093 \textcolor{preprocessor}{\#if KBLIB\_USE\_CXX20}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00094}00094 \textcolor{preprocessor}{\#  define KBLIB\_CXX20(args) args}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00095}00095 \textcolor{preprocessor}{\#else}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00096}\mbox{\hyperlink{tdecl_8h_a9bae2bd5888633dceb4571b7e14f8b12}{00096}} \textcolor{preprocessor}{\#  define KBLIB\_CXX20(args)}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00097}00097 \textcolor{preprocessor}{\#endif}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00098}00098 }
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00099}00099 \textcolor{comment}{// used to prevent cross-\/linkage between incompatible library versions}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00100}\mbox{\hyperlink{tdecl_8h_a5f6e357487f040f659a96588d6e55863}{00100}} \textcolor{preprocessor}{\#define KBLIB\_VERS\_NS\_I(VS, CXX17, CXX\_SV, CXX20) \(\backslash\)}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00101}00101 \textcolor{preprocessor}{   KBLIB\_VERS\_NS\_I2(VS, CXX17, CXX\_SV, CXX20)}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00102}\mbox{\hyperlink{tdecl_8h_a112bbf0c82e218241f85b9229c9216d2}{00102}} \textcolor{preprocessor}{\#define KBLIB\_VERS\_NS\_I2(VS, CXX17, CXX\_SV, CXX20) VS\#\#\_\#\#CXX17\#\#CXX\_SV\#\#CXX20}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00103}00103 }
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00104}\mbox{\hyperlink{tdecl_8h_ac5faa7e88ad7f6ebb293721e83b332b8}{00104}} \textcolor{preprocessor}{\#define KBLIB\_VERS\_NS                                                    \(\backslash\)}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00105}00105 \textcolor{preprocessor}{   KBLIB\_VERS\_NS\_I(KBLIB\_VERS\_S, KBLIB\_USE\_CXX17, KBLIB\_USE\_STRING\_VIEW, \(\backslash\)}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00106}00106 \textcolor{preprocessor}{                   KBLIB\_USE\_CXX20)}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00107}00107 }
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00108}00108 \textcolor{preprocessor}{\#ifndef \_DOXYGEN\_}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00109}00109 \textcolor{preprocessor}{\#  define KBLIB\_NS KBLIB\_VERS\_NS}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00110}00110 \textcolor{keyword}{namespace }\mbox{\hyperlink{tdecl_8h_a4b5c574c663a392148218cd4410fd7a1}{KBLIB\_NS}} \{\}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00111}00111 \textcolor{keyword}{namespace }\mbox{\hyperlink{namespacekblib}{kblib}} = \mbox{\hyperlink{tdecl_8h_a4b5c574c663a392148218cd4410fd7a1}{KBLIB\_NS}};}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00112}00112 \textcolor{preprocessor}{\#else}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00113}\mbox{\hyperlink{tdecl_8h_a4b5c574c663a392148218cd4410fd7a1}{00113}} \textcolor{preprocessor}{\#  define KBLIB\_NS kblib}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00114}00114 \textcolor{preprocessor}{\#endif}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00115}00115 }
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00116}00116 \textcolor{comment}{// Note that \_\_has\_cpp\_attribute(nodiscard) does not work with at least certain}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00117}00117 \textcolor{comment}{// versions of Clang}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00128}00128 \textcolor{comment}{}\textcolor{preprocessor}{\#if KBLIB\_USE\_CXX17}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00129}\mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{00129}} \textcolor{preprocessor}{\#  define KBLIB\_NODISCARD [[nodiscard]]}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00130}\mbox{\hyperlink{tdecl_8h_a607cffc585fe3bfcb06b63be2948de4a}{00130}} \textcolor{preprocessor}{\#  define KBLIB\_UNUSED [[maybe\_unused]]}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00131}00131 \textcolor{preprocessor}{\#else}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00132}00132 \textcolor{preprocessor}{\#  define KBLIB\_NODISCARD [[gnu::warn\_unused\_result]]}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00133}00133 \textcolor{preprocessor}{\#  define KBLIB\_UNUSED [[gnu::unused]]}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00134}00134 \textcolor{preprocessor}{\#endif}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00135}00135 }
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00136}00136 \textcolor{preprocessor}{\#if KBLIB\_USE\_CXX17}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00137}\mbox{\hyperlink{tdecl_8h_a35b356d58929dd3ae764e8291838f5be}{00137}} \textcolor{preprocessor}{\#  define KBLIB\_CONSTANT constexpr inline}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00138}\mbox{\hyperlink{tdecl_8h_a9b2376bf15765fad0ad95e4aecf36e87}{00138}} \textcolor{preprocessor}{\#  define KBLIB\_CONSTANT\_V constexpr inline bool}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00139}\mbox{\hyperlink{tdecl_8h_ab79256916a9652cd2d1771ae9a38799f}{00139}} \textcolor{preprocessor}{\#  define KBLIB\_CONSTANT\_M constexpr inline static}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00140}\mbox{\hyperlink{tdecl_8h_ae80370916cdf0283545d3e726865f6ec}{00140}} \textcolor{preprocessor}{\#  define KBLIB\_CONSTANT\_MV constexpr inline static bool}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00141}00141 \textcolor{preprocessor}{\#else}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00142}00142 \textcolor{preprocessor}{\#  define KBLIB\_CONSTANT constexpr}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00143}00143 \textcolor{preprocessor}{\#  define KBLIB\_CONSTANT\_V constexpr bool}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00144}00144 \textcolor{preprocessor}{\#  define KBLIB\_CONSTANT\_M constexpr static}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00145}00145 \textcolor{preprocessor}{\#  define KBLIB\_CONSTANT\_MV constexpr static bool}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00146}00146 \textcolor{preprocessor}{\#endif}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00147}00147 }
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00148}00148 \textcolor{preprocessor}{\#if defined(\_DOXYGEN\_) and not defined(KBLIB\_DEF\_MACROS)}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00154}00154 \textcolor{preprocessor}{\#  define KBLIB\_DEF\_MACROS}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00155}00155 \textcolor{preprocessor}{\#endif}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00156}00156 }
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00162}00162 \textcolor{keyword}{namespace }\mbox{\hyperlink{tdecl_8h_a4b5c574c663a392148218cd4410fd7a1}{KBLIB\_NS}} \{}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00163}00163 }
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00170}00170 \textcolor{keyword}{namespace }detail \{}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00171}00171 }
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00172}00172    \textcolor{keyword}{template} <\textcolor{keyword}{typename} Container, bool, \textcolor{keyword}{typename}...>}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00173}\mbox{\hyperlink{structkblib_1_1detail_1_1buildiota__impl}{00173}}    \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1detail_1_1buildiota__impl}{buildiota\_impl}};}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00174}00174 }
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00175}00175    \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00176}\mbox{\hyperlink{structkblib_1_1detail_1_1tag}{00176}}    \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1detail_1_1tag}{tag}} \{}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00177}\mbox{\hyperlink{structkblib_1_1detail_1_1tag_a27d3ff81d13bcd09453eb8f6cc761f95}{00177}}       \textcolor{keyword}{using }\mbox{\hyperlink{structkblib_1_1detail_1_1tag_a27d3ff81d13bcd09453eb8f6cc761f95}{type}} = T;}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00178}00178    \};}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00179}00179 }
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00180}00180    \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00181}\mbox{\hyperlink{structkblib_1_1detail_1_1no__dangle}{00181}}    \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1detail_1_1no__dangle}{no\_dangle}} \{}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00182}\mbox{\hyperlink{structkblib_1_1detail_1_1no__dangle_a47fd6fc5086fcebe7ae76c70c5a1c329}{00182}}       \textcolor{keyword}{using }\mbox{\hyperlink{structkblib_1_1detail_1_1no__dangle_a47fd6fc5086fcebe7ae76c70c5a1c329}{type}} = T\&;}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00183}00183    \};}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00184}00184 }
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00185}00185    \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00186}\mbox{\hyperlink{structkblib_1_1detail_1_1no__dangle_3_01_t_01_6_6_01_4}{00186}}    \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1detail_1_1no__dangle_3_01_t_01_6_6_01_4}{no\_dangle<T\&\&>}} \{}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00187}\mbox{\hyperlink{structkblib_1_1detail_1_1no__dangle_3_01_t_01_6_6_01_4_a966bba1e5ec18a029ac84ad96ad34f07}{00187}}       \textcolor{keyword}{using }\mbox{\hyperlink{structkblib_1_1detail_1_1no__dangle_3_01_t_01_6_6_01_4_a966bba1e5ec18a029ac84ad96ad34f07}{type}} = T;}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00188}00188    \};}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00189}00189 }
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00190}00190    \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00191}\mbox{\hyperlink{namespacekblib_1_1detail_aca9cd901eb773c411961ea11739f3d40}{00191}}    \textcolor{keyword}{using }\mbox{\hyperlink{namespacekblib_1_1detail_aca9cd901eb773c411961ea11739f3d40}{no\_dangle\_t}} = \textcolor{keyword}{typename} \mbox{\hyperlink{structkblib_1_1detail_1_1no__dangle_a47fd6fc5086fcebe7ae76c70c5a1c329}{no\_dangle<T>::type}};}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00192}00192 }
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00193}00193 \} \textcolor{comment}{// namespace detail}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00194}\mbox{\hyperlink{namespacekblib_a6c5de3fbe12c9c907e81b9335cf22694}{00194}} \textcolor{keyword}{enum class} \mbox{\hyperlink{namespacekblib_a6c5de3fbe12c9c907e81b9335cf22694}{endian}} \{ \mbox{\hyperlink{namespacekblib_a6c5de3fbe12c9c907e81b9335cf22694aad921d60486366258809553a3db49a4a}{unknown}}, \mbox{\hyperlink{namespacekblib_a6c5de3fbe12c9c907e81b9335cf22694aaae6635e044ac56046b2893a529b5114}{little}}, \mbox{\hyperlink{namespacekblib_a6c5de3fbe12c9c907e81b9335cf22694ad861877da56b8b4ceb35c8cbfdf65bb4}{big}}, \mbox{\hyperlink{namespacekblib_a6c5de3fbe12c9c907e81b9335cf22694a498c381ba18fc1be2160719e3e0a7c45}{weird}} \};}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00195}00195 }
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00196}00196 \textcolor{preprocessor}{\#ifdef \_\_BYTE\_ORDER\_\_}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00197}00197 \textcolor{keyword}{namespace }detail \{}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00198}00198    \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} get\_system\_endian() -\/> \mbox{\hyperlink{namespacekblib_a6c5de3fbe12c9c907e81b9335cf22694}{endian}} \{}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00199}00199       \textcolor{keywordflow}{if} (\_\_BYTE\_ORDER\_\_ == \_\_ORDER\_BIG\_ENDIAN\_\_) \{}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00200}00200          \textcolor{keywordflow}{return} endian::big;}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00201}00201       \} \textcolor{keywordflow}{else} \textcolor{keywordflow}{if} (\_\_BYTE\_ORDER\_\_ == \_\_ORDER\_LITTLE\_ENDIAN\_\_) \{}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00202}00202          \textcolor{keywordflow}{return} endian::little;}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00203}00203       \} \textcolor{keywordflow}{else} \{}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00204}00204          \textcolor{keywordflow}{return} endian::weird;}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00205}00205       \}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00206}00206    \}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00207}00207 \} \textcolor{comment}{// namespace detail}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00208}00208 }
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00209}00209 \textcolor{keyword}{constexpr} \mbox{\hyperlink{namespacekblib_a6c5de3fbe12c9c907e81b9335cf22694}{endian}} \mbox{\hyperlink{namespacekblib_a3dae0627cf4328fdec529095574560c4}{system\_endian}} = detail::get\_system\_endian();}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00210}00210 \textcolor{preprocessor}{\#else}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00211}\mbox{\hyperlink{namespacekblib_a3dae0627cf4328fdec529095574560c4}{00211}} \textcolor{keyword}{constexpr} \mbox{\hyperlink{namespacekblib_a6c5de3fbe12c9c907e81b9335cf22694}{endian}} \mbox{\hyperlink{namespacekblib_a3dae0627cf4328fdec529095574560c4}{system\_endian}} = endian::unknown;}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00212}00212 \textcolor{preprocessor}{\#endif}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00213}00213 }
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00214}00214 \textcolor{keyword}{namespace }detail \{}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00215}\mbox{\hyperlink{namespacekblib_1_1detail_aa27cb7ef8337a7d338355c3a93e1431b}{00215}}    \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{namespacekblib_1_1detail_aa27cb7ef8337a7d338355c3a93e1431b}{get\_hash\_order}}() -\/> \mbox{\hyperlink{namespacekblib_a6c5de3fbe12c9c907e81b9335cf22694}{endian}} \{}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00216}00216       \textcolor{keywordflow}{if} (\mbox{\hyperlink{namespacekblib_a3dae0627cf4328fdec529095574560c4}{system\_endian}} == endian::little or \mbox{\hyperlink{namespacekblib_a3dae0627cf4328fdec529095574560c4}{system\_endian}} == endian::big) \{}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00217}00217          \textcolor{keywordflow}{return} \mbox{\hyperlink{namespacekblib_a3dae0627cf4328fdec529095574560c4}{system\_endian}};}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00218}00218       \} \textcolor{keywordflow}{else} \{}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00219}00219          \textcolor{keywordflow}{return} endian::little;}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00220}00220       \}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00221}00221    \}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00222}00222 \} \textcolor{comment}{// namespace detail}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00223}00223 }
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00224}00224 \textcolor{preprocessor}{\#ifdef KBLIB\_CONSISTENT\_HASHES}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00225}00225 \textcolor{keyword}{constexpr} \mbox{\hyperlink{namespacekblib_a6c5de3fbe12c9c907e81b9335cf22694}{endian}} \mbox{\hyperlink{namespacekblib_adfb43b754fe059940c0e827f48f97e41}{hash\_order}} = little;}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00226}00226 \textcolor{preprocessor}{\#else}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00227}\mbox{\hyperlink{namespacekblib_adfb43b754fe059940c0e827f48f97e41}{00227}} \textcolor{keyword}{constexpr} \mbox{\hyperlink{namespacekblib_a6c5de3fbe12c9c907e81b9335cf22694}{endian}} \mbox{\hyperlink{namespacekblib_adfb43b754fe059940c0e827f48f97e41}{hash\_order}} = \mbox{\hyperlink{namespacekblib_1_1detail_aa27cb7ef8337a7d338355c3a93e1431b}{detail::get\_hash\_order}}();}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00228}00228 \textcolor{preprocessor}{\#endif}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00229}00229 }
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00230}00230 \textcolor{preprocessor}{\#if KBLIB\_USE\_CXX17}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00231}00231 \textcolor{keyword}{using }std::byte;}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00232}00232 \textcolor{preprocessor}{\#else}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00233}00233 \textcolor{keyword}{using }byte = \textcolor{keywordtype}{unsigned} char;}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00234}00234 \textcolor{preprocessor}{\#endif}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00235}00235 }
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00236}00236 \} \textcolor{comment}{// namespace KBLIB\_NS}}
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00237}00237 }
\DoxyCodeLine{\Hypertarget{tdecl_8h_source_l00238}00238 \textcolor{preprocessor}{\#endif }\textcolor{comment}{// KBLIB\_TDECL\_H}}

\end{DoxyCode}
