\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 .}} \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 }} \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}} \{} \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::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}