\hypertarget{traits_8h_source}{}\doxysection{traits.\+h}
\label{traits_8h_source}\index{kblib/traits.h@{kblib/traits.h}}
\mbox{\hyperlink{traits_8h}{Go to the documentation of this file.}}
\begin{DoxyCode}{0}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00001}00001 \textcolor{comment}{/* *****************************************************************************}}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00002}00002 \textcolor{comment}{ * kblib is a general utility library for C++14 and C++17, intended to provide}}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00003}00003 \textcolor{comment}{ * performant high-\/level abstractions and more expressive ways to do simple}}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00004}00004 \textcolor{comment}{ * things.}}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00005}00005 \textcolor{comment}{ *}}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00006}00006 \textcolor{comment}{ * Copyright (c) 2021 killerbee}}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00007}00007 \textcolor{comment}{ *}}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00008}00008 \textcolor{comment}{ * This program is free software: you can redistribute it and/or modify}}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00009}00009 \textcolor{comment}{ * it under the terms of the GNU General Public License as published by}}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00010}00010 \textcolor{comment}{ * the Free Software Foundation, either version 3 of the License, or}}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00011}00011 \textcolor{comment}{ * (at your option) any later version.}}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00012}00012 \textcolor{comment}{ *}}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00013}00013 \textcolor{comment}{ * This program is distributed in the hope that it will be useful,}}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00014}00014 \textcolor{comment}{ * but WITHOUT ANY WARRANTY; without even the implied warranty of}}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00015}00015 \textcolor{comment}{ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the}}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00016}00016 \textcolor{comment}{ * GNU General Public License for more details.}}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00017}00017 \textcolor{comment}{ *}}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00018}00018 \textcolor{comment}{ * You should have received a copy of the GNU General Public License}}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00019}00019 \textcolor{comment}{ * along with this program.  If not, see <https://www.gnu.org/licenses/>.}}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00020}00020 \textcolor{comment}{ * ****************************************************************************/}}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00021}00021 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00032}00032 \textcolor{preprocessor}{\#ifndef KBLIB\_TRAITS\_H\_INCLUDED\_}}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00033}00033 \textcolor{preprocessor}{\#define KBLIB\_TRAITS\_H\_INCLUDED\_}}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00034}00034 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00035}00035 \textcolor{preprocessor}{\#include "{}\mbox{\hyperlink{fakestd_8h}{fakestd.h}}"{}}}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00036}00036 \textcolor{preprocessor}{\#include "{}\mbox{\hyperlink{tdecl_8h}{tdecl.h}}"{}}}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00037}00037 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00038}00038 \textcolor{preprocessor}{\#include <array>}}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00039}00039 \textcolor{preprocessor}{\#include <cstring>}}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00040}00040 \textcolor{preprocessor}{\#include <tuple>}}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00041}00041 \textcolor{preprocessor}{\#include <type\_traits>}}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00042}00042 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00043}00043 \textcolor{keyword}{namespace }\mbox{\hyperlink{tdecl_8h_a4b5c574c663a392148218cd4410fd7a1}{KBLIB\_NS}} \{}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00044}00044 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00045}00045 \textcolor{comment}{// contains\_types adapted from code by Maarten Bamelis,}}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00046}00046 \textcolor{comment}{// https://stackoverflow.com/a/42581257/1924641}}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00047}00047 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00051}00051 \textcolor{keyword}{template} <\textcolor{keyword}{typename} Tuple, \textcolor{keyword}{typename} T>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00052}\mbox{\hyperlink{structkblib_1_1contains__type}{00052}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1contains__type}{contains\_type}};}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00053}00053 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00054}00054 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T, \textcolor{keyword}{typename} U, \textcolor{keyword}{typename}... Ts>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00055}\mbox{\hyperlink{structkblib_1_1contains__type_3_01std_1_1tuple_3_01_t_00_01_ts_8_8_8_01_4_00_01_u_01_4}{00055}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1contains__type}{contains\_type}}<\mbox{\hyperlink{namespacestd}{std}}::tuple<T, Ts...>, U>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00056}00056     : \mbox{\hyperlink{structkblib_1_1contains__type}{contains\_type}}<std::tuple<Ts...>, U> \{\};}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00057}00057 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00058}00058 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T, \textcolor{keyword}{typename}... Ts>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00059}\mbox{\hyperlink{structkblib_1_1contains__type_3_01std_1_1tuple_3_01_t_00_01_ts_8_8_8_01_4_00_01_t_01_4}{00059}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1contains__type}{contains\_type}}<\mbox{\hyperlink{namespacestd}{std}}::tuple<T, Ts...>, T> : std::true\_type \{\};}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00060}00060 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00061}00061 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00062}\mbox{\hyperlink{structkblib_1_1contains__type_3_01std_1_1tuple_3_4_00_01_t_01_4}{00062}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1contains__type}{contains\_type}}<\mbox{\hyperlink{namespacestd}{std}}::tuple<>, T> : std::false\_type \{\};}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00063}00063 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00064}00064 \textcolor{keyword}{template} <\textcolor{keyword}{typename}... Ts>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00065}\mbox{\hyperlink{namespacekblib_a462a4f145e951b0820c78d27c60d7389}{00065}} \mbox{\hyperlink{tdecl_8h_a9b2376bf15765fad0ad95e4aecf36e87}{KBLIB\_CONSTANT\_V}} \mbox{\hyperlink{namespacekblib_a462a4f145e951b0820c78d27c60d7389}{contains\_type\_v}} = \mbox{\hyperlink{structkblib_1_1contains__type}{contains\_type}}<Ts...>::value;}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00066}00066 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00071}00071 \textcolor{keyword}{template} <\textcolor{keyword}{typename} Lhs, \textcolor{keyword}{typename} Rhs>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00072}\mbox{\hyperlink{structkblib_1_1contains__types}{00072}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1contains__types}{contains\_types}};}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00073}00073 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00074}00074 \textcolor{keyword}{template} <\textcolor{keyword}{typename} Tuple, \textcolor{keyword}{typename} T, \textcolor{keyword}{typename}... Ts>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00075}\mbox{\hyperlink{structkblib_1_1contains__types_3_01_tuple_00_01std_1_1tuple_3_01_t_00_01_ts_8_8_8_01_4_01_4}{00075}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1contains__types}{contains\_types}}<Tuple, \mbox{\hyperlink{namespacestd}{std}}::tuple<T, Ts...>>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00076}00076     : std::integral\_constant<}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00077}00077           bool, contains\_type<Tuple, T>::value}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00078}00078                     and contains\_types<Tuple, std::tuple<Ts...>>::value> \{\};}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00079}00079 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00080}00080 \textcolor{keyword}{template} <\textcolor{keyword}{typename} Tuple>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00081}\mbox{\hyperlink{structkblib_1_1contains__types_3_01_tuple_00_01std_1_1tuple_3_4_01_4}{00081}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1contains__types}{contains\_types}}<Tuple, \mbox{\hyperlink{namespacestd}{std}}::tuple<>> : std::true\_type \{\};}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00082}00082 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00083}00083 \textcolor{keyword}{template} <\textcolor{keyword}{typename}... Ts>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00084}\mbox{\hyperlink{namespacekblib_a7bf6ffaec25cb2430dcd6f43bd285ca4}{00084}} \mbox{\hyperlink{tdecl_8h_a9b2376bf15765fad0ad95e4aecf36e87}{KBLIB\_CONSTANT\_V}} \mbox{\hyperlink{namespacekblib_a7bf6ffaec25cb2430dcd6f43bd285ca4}{contains\_types\_v}} = \mbox{\hyperlink{structkblib_1_1contains__types}{contains\_types}}<Ts...>::value;}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00085}00085 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00086}00086 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00087}\mbox{\hyperlink{structkblib_1_1list__as__tuple}{00087}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1list__as__tuple}{list\_as\_tuple}};}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00088}00088 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00089}00089 \textcolor{keyword}{template} <\textcolor{keyword}{template} <\textcolor{keyword}{typename}...> \textcolor{keyword}{class }Tuple, \textcolor{keyword}{typename}... Ts>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00090}\mbox{\hyperlink{structkblib_1_1list__as__tuple_3_01_tuple_3_01_ts_8_8_8_01_4_01_4}{00090}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1list__as__tuple}{list\_as\_tuple}}<Tuple<Ts...>> \{}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00091}\mbox{\hyperlink{structkblib_1_1list__as__tuple_3_01_tuple_3_01_ts_8_8_8_01_4_01_4_a182b7beb02c752c24bb78692b11c6472}{00091}}    \textcolor{keyword}{using }\mbox{\hyperlink{structkblib_1_1list__as__tuple_3_01_tuple_3_01_ts_8_8_8_01_4_01_4_a182b7beb02c752c24bb78692b11c6472}{type}} = std::tuple<Ts...>;}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00092}00092 \};}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00093}00093 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00094}00094 \textcolor{keyword}{namespace }detail \{}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00095}00095 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00104}00104    \textcolor{keyword}{template} <\textcolor{keyword}{typename} T, \textcolor{keywordtype}{int} N, \textcolor{keywordtype}{int}... I>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00105}\mbox{\hyperlink{namespacekblib_1_1detail_a8e69943e2b7ab538494374e097321357}{00105}}    \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{namespacekblib_a07019c995e0508ce266be47f94f3a882}{trim\_array}}(\textcolor{keyword}{const} T (\&arr)[N],}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00106}00106                                              std::integer\_sequence<int, I...>)}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00107}00107        -\/> \mbox{\hyperlink{namespacekblib_1_1fakestd_adb8781bc0e5d1ba4ca4624293c0c98ae}{std::array<T, std::integer\_sequence<int, I...>::size}}()> \{}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00108}00108       \textcolor{keywordflow}{return} \{arr[I]...\};}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00109}00109    \}}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00110}00110 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00111}00111 \} \textcolor{comment}{// namespace detail}}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00112}00112 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00119}00119 \textcolor{keyword}{template} <\textcolor{keywordtype}{int} trim, \textcolor{keyword}{typename} T, \textcolor{keywordtype}{int} N,}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00120}00120           \textcolor{keyword}{typename} Indices = std::make\_integer\_sequence<int, N -\/ trim>>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00121}\mbox{\hyperlink{namespacekblib_a07019c995e0508ce266be47f94f3a882}{00121}} \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{namespacekblib_a07019c995e0508ce266be47f94f3a882}{trim\_array}}(\textcolor{keyword}{const} T (\&arr)[N])}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00122}00122     -\/> std::array<T, N -\/ trim> \{}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00123}00123    \textcolor{keywordflow}{return} \mbox{\hyperlink{namespacekblib_a07019c995e0508ce266be47f94f3a882}{detail::trim\_array}}(arr, Indices\{\});}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00124}00124 \}}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00125}00125 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00134}00134 \textcolor{keyword}{template} <\textcolor{keywordtype}{int} N, \textcolor{keyword}{typename} Indices = std::make\_integer\_sequence<int, N -\/ 1>>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00135}\mbox{\hyperlink{namespacekblib_a9bfc51ee4b1118cf5effed3d4ae9dfed}{00135}} \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{namespacekblib_a9bfc51ee4b1118cf5effed3d4ae9dfed}{remove\_null\_terminator}}(\textcolor{keyword}{const} \textcolor{keywordtype}{char} (\&arr)[N])}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00136}00136     -\/> std::array<char, N -\/ 1> \{}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00137}00137    \textcolor{keywordflow}{return} \mbox{\hyperlink{namespacekblib_a07019c995e0508ce266be47f94f3a882}{detail::trim\_array}}(arr, Indices\{\});}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00138}00138 \}}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00139}00139 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00140}00140 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00141}\mbox{\hyperlink{structkblib_1_1is__unbounded__array}{00141}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1is__unbounded__array}{is\_unbounded\_array}} : std::false\_type \{\};}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00142}00142 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00143}\mbox{\hyperlink{structkblib_1_1is__unbounded__array_3_01_t_0f_0e_4}{00143}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1is__unbounded__array}{is\_unbounded\_array}}<T[]> : std::true\_type \{\};}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00144}00144 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00145}00145 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00146}\mbox{\hyperlink{structkblib_1_1is__bounded__array}{00146}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1is__bounded__array}{is\_bounded\_array}} : std::false\_type \{\};}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00147}00147 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T, std::\textcolor{keywordtype}{size\_t} N>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00148}\mbox{\hyperlink{structkblib_1_1is__bounded__array_3_01_t_0f_n_0e_4}{00148}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1is__bounded__array}{is\_bounded\_array}}<T[N]> : std::true\_type \{\};}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00149}00149 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00150}00150 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00155}\mbox{\hyperlink{namespacekblib_a8fe1791c4dfe674d145963ab5b3121ae}{00155}} \textcolor{keyword}{using }\mbox{\hyperlink{namespacekblib_a8fe1791c4dfe674d145963ab5b3121ae}{alias}} = T;}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00156}00156 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00160}00160 \textcolor{keyword}{template} <\textcolor{keyword}{typename}, \textcolor{keyword}{typename} T>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00161}\mbox{\hyperlink{structkblib_1_1ignore}{00161}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1ignore}{ignore}} \{}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00162}\mbox{\hyperlink{structkblib_1_1ignore_aa8afaf19eb6bad07fa899e99a05e845a}{00162}}    \textcolor{keyword}{using }\mbox{\hyperlink{structkblib_1_1ignore_aa8afaf19eb6bad07fa899e99a05e845a}{type}} = T;}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00163}00163 \};}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00168}00168 \textcolor{keyword}{template} <\textcolor{keyword}{typename} U, \textcolor{keyword}{typename} T>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00169}\mbox{\hyperlink{namespacekblib_a3cec35675700d7e15c9139e0497768e6}{00169}} \textcolor{keyword}{using }\mbox{\hyperlink{namespacekblib_a3cec35675700d7e15c9139e0497768e6}{ignore\_t}} = \textcolor{keyword}{typename} \mbox{\hyperlink{structkblib_1_1ignore_aa8afaf19eb6bad07fa899e99a05e845a}{ignore<U, T>::type}};}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00170}00170 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00181}00181 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T, \textcolor{keyword}{typename} F>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00182}\mbox{\hyperlink{namespacekblib_ae5b7fdf2bbba96527afa217fad0dea1f}{00182}} \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{auto} \mbox{\hyperlink{namespacekblib_ae5b7fdf2bbba96527afa217fad0dea1f}{byte\_cast}}(F v) \textcolor{keyword}{noexcept} -\/> T \{}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00183}00183    \textcolor{keyword}{static\_assert}(}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00184}00184        \textcolor{keyword}{sizeof}(T) == \textcolor{keyword}{sizeof}(F),}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00185}00185        \textcolor{stringliteral}{"{}Source and destination types for byte\_cast must be the same size."{}});}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00186}00186    \textcolor{keyword}{static\_assert}(std::is\_trivially\_copyable<T>::value}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00187}00187                      and std::is\_trivially\_copyable<F>::value,}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00188}00188                  \textcolor{stringliteral}{"{}Source and destination types for byte\_cast must be trivially "{}}}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00189}00189                  \textcolor{stringliteral}{"{}copyable."{}});}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00190}00190    T ret\{\};}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00191}00191    std::memcpy(\&ret, \&v, \textcolor{keyword}{sizeof}(T));}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00192}00192    \textcolor{keywordflow}{return} ret;}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00193}00193 \}}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00194}00194 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00195}00195 \textcolor{keyword}{namespace }detail \{}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00196}00196 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00197}00197    template <typename C, typename = decltype(std::declval<C\&>().resize(0))>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00198}\mbox{\hyperlink{namespacekblib_1_1detail_ac5dbc22e701244360a7107a086f67d3c}{00198}}    \textcolor{keyword}{auto} \mbox{\hyperlink{namespacekblib_1_1detail_ac6e7201044196c9c8314f7f6c3a2f168}{calc\_resizable}}(\textcolor{keywordtype}{int}) \textcolor{keyword}{noexcept} -\/> std::true\_type;}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00199}00199 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00200}00200    template <typename C, int = std::tuple\_size<C>::value>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00201}00201    \textcolor{keyword}{auto} \mbox{\hyperlink{namespacekblib_1_1detail_ac6e7201044196c9c8314f7f6c3a2f168}{calc\_resizable}}(\textcolor{keywordtype}{int}) \textcolor{keyword}{noexcept} -\/> std::false\_type;}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00202}00202 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00203}00203    \textcolor{keyword}{template} <\textcolor{keyword}{typename}>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00204}\mbox{\hyperlink{namespacekblib_1_1detail_ac6e7201044196c9c8314f7f6c3a2f168}{00204}}    \textcolor{keyword}{auto} \mbox{\hyperlink{namespacekblib_1_1detail_ac6e7201044196c9c8314f7f6c3a2f168}{calc\_resizable}}(...) noexcept -\/> \mbox{\hyperlink{namespacestd}{std}}::false\_type;}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00205}00205 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00206}00206 \} \textcolor{comment}{// namespace detail}}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00207}00207 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00208}00208 \textcolor{comment}{// Note that when a type that is not resizable, but also doesn't have a}}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00209}00209 \textcolor{comment}{// constexpr size, is passed, there is a hard error.}}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00213}00213 \textcolor{comment}{}template <typename C>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00214}\mbox{\hyperlink{namespacekblib_a928b1f231946db62ee4c171a21593919}{00214}} \mbox{\hyperlink{tdecl_8h_a9b2376bf15765fad0ad95e4aecf36e87}{KBLIB\_CONSTANT\_V}} \mbox{\hyperlink{namespacekblib_a928b1f231946db62ee4c171a21593919}{is\_resizable\_v}} = decltype(detail::\mbox{\hyperlink{namespacekblib_1_1detail_ac6e7201044196c9c8314f7f6c3a2f168}{calc\_resizable}}<C>(0))::value;}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00215}00215 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00216}00216 template <typename C>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00217}\mbox{\hyperlink{structkblib_1_1is__resizable}{00217}} struct \mbox{\hyperlink{structkblib_1_1is__resizable}{is\_resizable}} : \mbox{\hyperlink{namespacekblib_aab6846d277428f1e4b61ced2ed64dd0b}{bool\_constant}}<\mbox{\hyperlink{namespacekblib_a928b1f231946db62ee4c171a21593919}{is\_resizable\_v}}<C>> \{\};}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00218}00218 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00219}00219 \textcolor{keyword}{template} <\textcolor{keyword}{typename} C, \textcolor{keyword}{typename} = \textcolor{keywordtype}{void}>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00220}\mbox{\hyperlink{namespacekblib_ad122336bc521ea4a22d7759b529fb561}{00220}} \mbox{\hyperlink{tdecl_8h_a9b2376bf15765fad0ad95e4aecf36e87}{KBLIB\_CONSTANT\_V}} \mbox{\hyperlink{namespacekblib_ad122336bc521ea4a22d7759b529fb561}{has\_reserve\_v}} = \textcolor{keyword}{false};}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00221}00221 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00222}00222 \textcolor{keyword}{template} <\textcolor{keyword}{typename} C>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00223}00223 \mbox{\hyperlink{tdecl_8h_a9b2376bf15765fad0ad95e4aecf36e87}{KBLIB\_CONSTANT\_V}}}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00224}00224     has\_reserve\_v<C, void\_t<decltype(std::declval<C\&>().reserve(0))>> = \textcolor{keyword}{true};}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00225}00225 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00229}00229 \textcolor{keyword}{template} <\textcolor{keyword}{typename} C>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00230}\mbox{\hyperlink{structkblib_1_1has__reserve}{00230}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1has__reserve}{has\_reserve}} : \mbox{\hyperlink{namespacekblib_aab6846d277428f1e4b61ced2ed64dd0b}{bool\_constant}}<has\_reserve\_v<C>> \{\};}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00231}00231 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00238}00238 \textcolor{keyword}{template} <\textcolor{keyword}{typename} C, \textcolor{keyword}{typename} std::enable\_if<has\_reserve\_v<C>, \textcolor{keywordtype}{int}>::type = 0>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00239}\mbox{\hyperlink{namespacekblib_a7035cf97e9bcba5add3b1462ac01a0ed}{00239}} \textcolor{keyword}{auto} \mbox{\hyperlink{namespacekblib_a7035cf97e9bcba5add3b1462ac01a0ed}{try\_reserve}}(C\& c, std::size\_t s) \textcolor{keyword}{noexcept}(\textcolor{keyword}{noexcept}(c.reserve(s))) -\/> \textcolor{keywordtype}{void} \{}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00240}00240    c.reserve(s);}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00241}00241    \textcolor{keywordflow}{return};}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00242}00242 \}}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00243}00243 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00250}00250 \textcolor{keyword}{template} <\textcolor{keyword}{typename} C,}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00251}00251           \textcolor{keyword}{typename} std::enable\_if<not has\_reserve\_v<C>, \textcolor{keywordtype}{int}>::type = 0>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00252}00252 \textcolor{keyword}{auto} \mbox{\hyperlink{namespacekblib_a7035cf97e9bcba5add3b1462ac01a0ed}{try\_reserve}}(C\&, std::size\_t) \textcolor{keyword}{noexcept} -\/> \textcolor{keywordtype}{void} \{}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00253}00253    \textcolor{keywordflow}{return};}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00254}00254 \}}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00255}00255 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00260}00260 \textcolor{keyword}{template} <\textcolor{keyword}{typename} C, \textcolor{keyword}{typename} = \textcolor{keywordtype}{void}>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00261}\mbox{\hyperlink{namespacekblib_acec974f6a75e6884147ef326bbd78d35}{00261}} \mbox{\hyperlink{tdecl_8h_a9b2376bf15765fad0ad95e4aecf36e87}{KBLIB\_CONSTANT\_V}} \mbox{\hyperlink{namespacekblib_acec974f6a75e6884147ef326bbd78d35}{is\_contiguous\_v}} = \textcolor{keyword}{false};}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00262}00262 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00263}00263 \textcolor{keyword}{template} <\textcolor{keyword}{typename} C>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00264}00264 \mbox{\hyperlink{tdecl_8h_a9b2376bf15765fad0ad95e4aecf36e87}{KBLIB\_CONSTANT\_V}}}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00265}00265     is\_contiguous\_v<C, void\_t<decltype(std::declval<C\&>().data())>> = \textcolor{keyword}{true};}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00266}00266 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00267}00267 \textcolor{keyword}{template} <\textcolor{keyword}{typename} C>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00268}\mbox{\hyperlink{structkblib_1_1is__contiguous}{00268}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1is__contiguous}{is\_contiguous}} : \mbox{\hyperlink{namespacekblib_aab6846d277428f1e4b61ced2ed64dd0b}{bool\_constant}}<is\_contiguous\_v<C>> \{\};}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00269}00269 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00270}00270 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00271}\mbox{\hyperlink{structkblib_1_1class__of}{00271}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1class__of}{class\_of}};}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00272}00272 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00273}00273 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T, \textcolor{keyword}{typename} M>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00274}\mbox{\hyperlink{structkblib_1_1class__of_3_01_m_01_t_1_1_5_01_4}{00274}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1class__of}{class\_of}}<M T::*> \{}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00275}\mbox{\hyperlink{structkblib_1_1class__of_3_01_m_01_t_1_1_5_01_4_a65443a884cd09d35d730491967a45980}{00275}}    \textcolor{keyword}{using }\mbox{\hyperlink{structkblib_1_1class__of_3_01_m_01_t_1_1_5_01_4_a65443a884cd09d35d730491967a45980}{type}} = T;}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00276}00276 \};}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00277}00277 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00278}00278 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00279}\mbox{\hyperlink{namespacekblib_ac0d673e8dfabd5fe1fe4d89a08be7019}{00279}} \textcolor{keyword}{using }\mbox{\hyperlink{namespacekblib_ac0d673e8dfabd5fe1fe4d89a08be7019}{class\_of\_t}} = \textcolor{keyword}{typename} \mbox{\hyperlink{structkblib_1_1class__of}{class\_of<T>::type}};}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00280}00280 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00281}00281 \textcolor{preprocessor}{\#if \_\_cpp\_nontype\_template\_parameter\_auto}}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00282}00282 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00283}00283 \textcolor{keyword}{template} <auto M>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00284}00284 \textcolor{keyword}{using }class\_t = \textcolor{keyword}{typename} \mbox{\hyperlink{structkblib_1_1class__of}{class\_of}}<\textcolor{keyword}{decltype}(M)>::type;}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00285}00285 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00286}00286 \textcolor{preprocessor}{\#endif}}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00287}00287 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00288}00288 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00289}\mbox{\hyperlink{structkblib_1_1member__of}{00289}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1member__of}{member\_of}};}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00290}00290 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00291}00291 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T, \textcolor{keyword}{typename} M>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00292}\mbox{\hyperlink{structkblib_1_1member__of_3_01_m_01_t_1_1_5_01_4}{00292}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1member__of}{member\_of}}<M T::*> \{}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00293}\mbox{\hyperlink{structkblib_1_1member__of_3_01_m_01_t_1_1_5_01_4_a32c10a82f51c831b947a5664ff483298}{00293}}    \textcolor{keyword}{using }\mbox{\hyperlink{structkblib_1_1member__of_3_01_m_01_t_1_1_5_01_4_a32c10a82f51c831b947a5664ff483298}{type}} = M;}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00294}00294 \};}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00295}00295 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00296}00296 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00297}\mbox{\hyperlink{namespacekblib_a8944b438ec39c111c64a1e8501fd7828}{00297}} \textcolor{keyword}{using }\mbox{\hyperlink{namespacekblib_a8944b438ec39c111c64a1e8501fd7828}{member\_of\_t}} = \textcolor{keyword}{typename} \mbox{\hyperlink{structkblib_1_1member__of}{member\_of<T>::type}};}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00298}00298 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00299}00299 \textcolor{preprocessor}{\#if \_\_cpp\_nontype\_template\_parameter\_auto}}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00304}00304 \textcolor{keyword}{template} <\textcolor{keyword}{typename}, auto M>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00305}00305 \textcolor{keyword}{using }member\_t = \mbox{\hyperlink{namespacekblib_a8944b438ec39c111c64a1e8501fd7828}{member\_of\_t}}<\textcolor{keyword}{decltype}(M)>;}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00306}00306 \textcolor{preprocessor}{\#endif}}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00307}00307 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00308}00308 \textcolor{keyword}{template} <\textcolor{keyword}{typename} F>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00309}\mbox{\hyperlink{structkblib_1_1return__type}{00309}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1return__type}{return\_type}};}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00310}00310 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00311}00311 \textcolor{keyword}{template} <\textcolor{keyword}{typename} R, \textcolor{keyword}{typename}... Args>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00312}\mbox{\hyperlink{structkblib_1_1return__type_3_01_r_07_args_8_8_8_08_4}{00312}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1return__type}{return\_type}}<R(Args...)> : \mbox{\hyperlink{structkblib_1_1meta__type}{meta\_type}}<R> \{\};}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00313}00313 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00314}00314 \textcolor{keyword}{template} <\textcolor{keyword}{typename} R, \textcolor{keyword}{typename}... Args>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00315}\mbox{\hyperlink{structkblib_1_1return__type_3_01_r_07_args_8_8_8_08_01const_01_4}{00315}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1return__type}{return\_type}}<R(Args...) const> : \mbox{\hyperlink{structkblib_1_1meta__type}{meta\_type}}<R> \{\};}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00316}00316 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00317}00317 \textcolor{keyword}{template} <\textcolor{keyword}{typename} R, \textcolor{keyword}{typename}... Args>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00318}\mbox{\hyperlink{structkblib_1_1return__type_3_01_r_07_args_8_8_8_08_01volatile_01_4}{00318}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1return__type}{return\_type}}<R(Args...) volatile> : \mbox{\hyperlink{structkblib_1_1meta__type}{meta\_type}}<R> \{\};}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00319}00319 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00320}00320 \textcolor{keyword}{template} <\textcolor{keyword}{typename} R, \textcolor{keyword}{typename}... Args>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00321}\mbox{\hyperlink{structkblib_1_1return__type_3_01_r_07_args_8_8_8_08_01const_01volatile_01_4}{00321}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1return__type}{return\_type}}<R(Args...) const volatile> : \mbox{\hyperlink{structkblib_1_1meta__type}{meta\_type}}<R> \{\};}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00322}00322 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00323}00323 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00324}\mbox{\hyperlink{structkblib_1_1exists}{00324}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1exists}{exists}} : std::true\_type \{\};}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00325}00325 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00326}00326 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T, \textcolor{keyword}{typename} = \textcolor{keywordtype}{void}>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00327}\mbox{\hyperlink{structkblib_1_1is__input__iterator}{00327}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1is__input__iterator}{is\_input\_iterator}} : std::false\_type \{\};}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00328}00328 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00329}00329 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00330}\mbox{\hyperlink{structkblib_1_1is__input__iterator_3_01_t_00_01void__if__t_3_01std_1_1is__base__of_3_01std_1_1in234768fad8d9bb60c694b1d9d96c2c0c}{00330}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1is__input__iterator}{is\_input\_iterator}}<}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00331}00331     T, \mbox{\hyperlink{namespacekblib_ab3cc24416f0b9a6504e1c6a437ed6230}{void\_if\_t}}<\mbox{\hyperlink{namespacestd}{std}}::is\_base\_of<}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00332}00332            std::input\_iterator\_tag,}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00333}00333            typename std::iterator\_traits<T>::iterator\_category>::value>>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00334}00334     : std::true\_type \{\};}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00335}00335 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00336}00336 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00337}\mbox{\hyperlink{namespacekblib_a38ad8c5b263ac766baf7ec36fe3b4a10}{00337}} \mbox{\hyperlink{tdecl_8h_a9b2376bf15765fad0ad95e4aecf36e87}{KBLIB\_CONSTANT\_V}} \mbox{\hyperlink{namespacekblib_a38ad8c5b263ac766baf7ec36fe3b4a10}{is\_input\_iterator\_v}} = \mbox{\hyperlink{structkblib_1_1is__input__iterator}{is\_input\_iterator<T>::value}};}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00338}00338 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00339}00339 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T, \textcolor{keyword}{typename} = \textcolor{keywordtype}{void}>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00340}\mbox{\hyperlink{structkblib_1_1is__forward__iterator}{00340}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1is__forward__iterator}{is\_forward\_iterator}} : std::false\_type \{\};}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00341}00341 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00342}00342 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00343}\mbox{\hyperlink{structkblib_1_1is__forward__iterator_3_01_t_00_01void__if__t_3_01std_1_1is__base__of_3_01std_1_1123504ca44604c4d631a64f1c696432e}{00343}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1is__forward__iterator}{is\_forward\_iterator}}<}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00344}00344     T, \mbox{\hyperlink{namespacekblib_ab3cc24416f0b9a6504e1c6a437ed6230}{void\_if\_t}}<\mbox{\hyperlink{namespacestd}{std}}::is\_base\_of<}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00345}00345            std::forward\_iterator\_tag,}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00346}00346            typename std::iterator\_traits<T>::iterator\_category>::value>>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00347}00347     : std::true\_type \{\};}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00348}00348 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00349}00349 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00350}\mbox{\hyperlink{namespacekblib_a8bde12b9b9ad4463f4cc065fd2df6f99}{00350}} \mbox{\hyperlink{tdecl_8h_a9b2376bf15765fad0ad95e4aecf36e87}{KBLIB\_CONSTANT\_V}} \mbox{\hyperlink{namespacekblib_a8bde12b9b9ad4463f4cc065fd2df6f99}{is\_forward\_iterator\_v}} = \mbox{\hyperlink{structkblib_1_1is__forward__iterator}{is\_forward\_iterator<T>::value}};}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00351}00351 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00352}00352 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T, \textcolor{keyword}{typename} = \textcolor{keywordtype}{void}>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00353}\mbox{\hyperlink{structkblib_1_1is__bidirectional__iterator}{00353}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1is__bidirectional__iterator}{is\_bidirectional\_iterator}} : std::false\_type \{\};}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00354}00354 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00355}00355 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00356}\mbox{\hyperlink{structkblib_1_1is__bidirectional__iterator_3_01_t_00_01void__if__t_3_01std_1_1is__base__of_3_01sa49b8d252b80c33e3e8c1f1cd38ed80a}{00356}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1is__bidirectional__iterator}{is\_bidirectional\_iterator}}<}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00357}00357     T, \mbox{\hyperlink{namespacekblib_ab3cc24416f0b9a6504e1c6a437ed6230}{void\_if\_t}}<\mbox{\hyperlink{namespacestd}{std}}::is\_base\_of<}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00358}00358            std::bidirectional\_iterator\_tag,}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00359}00359            typename std::iterator\_traits<T>::iterator\_category>::value>>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00360}00360     : std::true\_type \{\};}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00361}00361 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00362}00362 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00363}\mbox{\hyperlink{namespacekblib_ab4a90d7f7bacba9a52aea362f42af35f}{00363}} \mbox{\hyperlink{tdecl_8h_a9b2376bf15765fad0ad95e4aecf36e87}{KBLIB\_CONSTANT\_V}} \mbox{\hyperlink{namespacekblib_ab4a90d7f7bacba9a52aea362f42af35f}{is\_bidirectional\_iterator\_v}}}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00364}00364     = \mbox{\hyperlink{structkblib_1_1is__bidirectional__iterator}{is\_bidirectional\_iterator<T>::value}};}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00365}00365 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00366}00366 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T, \textcolor{keyword}{typename} = \textcolor{keywordtype}{void}>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00367}\mbox{\hyperlink{structkblib_1_1is__random__access__iterator}{00367}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1is__random__access__iterator}{is\_random\_access\_iterator}} : std::false\_type \{\};}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00368}00368 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00369}00369 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00370}\mbox{\hyperlink{structkblib_1_1is__random__access__iterator_3_01_t_00_01void__if__t_3_01std_1_1is__base__of_3_0176e99d6e82616d065cc522966db7e3ec}{00370}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1is__random__access__iterator}{is\_random\_access\_iterator}}<}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00371}00371     T, \mbox{\hyperlink{namespacekblib_ab3cc24416f0b9a6504e1c6a437ed6230}{void\_if\_t}}<\mbox{\hyperlink{namespacestd}{std}}::is\_base\_of<}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00372}00372            std::random\_access\_iterator\_tag,}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00373}00373            typename std::iterator\_traits<T>::iterator\_category>::value>>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00374}00374     : std::true\_type \{\};}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00375}00375 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00376}00376 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00377}\mbox{\hyperlink{namespacekblib_a9f3169b47a686b2f29f36d4419530960}{00377}} \mbox{\hyperlink{tdecl_8h_a9b2376bf15765fad0ad95e4aecf36e87}{KBLIB\_CONSTANT\_V}} \mbox{\hyperlink{namespacekblib_a9f3169b47a686b2f29f36d4419530960}{is\_random\_access\_iterator\_v}}}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00378}00378     = \mbox{\hyperlink{structkblib_1_1is__random__access__iterator}{is\_random\_access\_iterator<T>::value}};}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00379}00379 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00384}00384 \textcolor{keyword}{template} <\textcolor{keyword}{typename} Range, \textcolor{keyword}{typename} = \textcolor{keywordtype}{void}>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00385}\mbox{\hyperlink{structkblib_1_1iterator__type__for}{00385}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1iterator__type__for}{iterator\_type\_for}};}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00386}00386 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T, std::\textcolor{keywordtype}{size\_t} N>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00387}\mbox{\hyperlink{structkblib_1_1iterator__type__for_3_01_t_0f_n_0e_00_01void_01_4}{00387}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1iterator__type__for}{iterator\_type\_for}}<T[N], void> \{}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00388}\mbox{\hyperlink{structkblib_1_1iterator__type__for_3_01_t_0f_n_0e_00_01void_01_4_a189a53ca3459f070f75b30f6b6fda169}{00388}}    \textcolor{keyword}{using }\mbox{\hyperlink{structkblib_1_1iterator__type__for_3_01_t_0f_n_0e_00_01void_01_4_a189a53ca3459f070f75b30f6b6fda169}{type}} = T*;}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00389}00389 \};}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00390}00390 \textcolor{keyword}{template} <\textcolor{keyword}{typename} Range>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00391}\mbox{\hyperlink{structkblib_1_1iterator__type__for_3_01_range_00_01void__t_3_01decltype_07begin_07std_1_1declval1101c10852428ba517f2e2551d7e07be}{00391}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1iterator__type__for}{iterator\_type\_for}}<Range,}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00392}00392                          \mbox{\hyperlink{namespacekblib_1_1fakestd_a2df414d5a1a1f59c8f33520890755f84}{void\_t}}<decltype(begin(\mbox{\hyperlink{namespacestd}{std}}::declval<Range\&>()))>> \{}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00393}\mbox{\hyperlink{structkblib_1_1iterator__type__for_3_01_range_00_01void__t_3_01decltype_07begin_07std_1_1declval1101c10852428ba517f2e2551d7e07be_ad074a0673058a32207d4bfd8acc050f4}{00393}}    \textcolor{keyword}{using }\mbox{\hyperlink{structkblib_1_1iterator__type__for_3_01_range_00_01void__t_3_01decltype_07begin_07std_1_1declval1101c10852428ba517f2e2551d7e07be_ad074a0673058a32207d4bfd8acc050f4}{type}} = \textcolor{keyword}{decltype}(begin(std::declval<Range\&>()));}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00394}00394 \};}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00395}00395 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00396}00396 \textcolor{keyword}{template} <\textcolor{keyword}{typename} Range>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00397}\mbox{\hyperlink{namespacekblib_a50228da6d1f395258a03db48257305d0}{00397}} \textcolor{keyword}{using }\mbox{\hyperlink{namespacekblib_a50228da6d1f395258a03db48257305d0}{iterator\_type\_for\_t}} = \textcolor{keyword}{typename} \mbox{\hyperlink{structkblib_1_1iterator__type__for}{iterator\_type\_for<Range>::type}};}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00398}00398 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00399}00399 \textcolor{keyword}{template} <\textcolor{keyword}{typename} Range, \textcolor{keyword}{typename} = \textcolor{keywordtype}{void}>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00400}\mbox{\hyperlink{structkblib_1_1is__iterable}{00400}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1is__iterable}{is\_iterable}} : std::false\_type \{\};}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00401}00401 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00402}00402 \textcolor{keyword}{template} <\textcolor{keyword}{typename} Range>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00403}\mbox{\hyperlink{structkblib_1_1is__iterable_3_01_range_00_01void__if__t_3_01is__input__iterator_3_01decltype_07b2bc8ae14696a5d961b6b820839a016a5}{00403}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1is__iterable}{is\_iterable}}<Range, \mbox{\hyperlink{namespacekblib_ab3cc24416f0b9a6504e1c6a437ed6230}{void\_if\_t}}<\mbox{\hyperlink{structkblib_1_1is__input__iterator}{is\_input\_iterator}}<decltype(}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00404}00404                               begin(\mbox{\hyperlink{namespacestd}{std}}::declval<Range\&>()))>::value>>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00405}00405     : std::true\_type \{\};}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00406}00406 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00407}00407 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T, std::\textcolor{keywordtype}{size\_t} N>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00408}\mbox{\hyperlink{structkblib_1_1is__iterable_3_01_t_0f_n_0e_00_01void_01_4}{00408}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1is__iterable}{is\_iterable}}<T[N], void> : std::true\_type \{\};}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00409}00409 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T, std::\textcolor{keywordtype}{size\_t} N>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00410}\mbox{\hyperlink{structkblib_1_1is__iterable_3_01_t_07_6_08_0f_n_0e_00_01void_01_4}{00410}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1is__iterable}{is\_iterable}}<T (\&)[N], \textcolor{keywordtype}{void}> : std::true\_type \{\};}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00411}00411 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00412}00412 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00413}\mbox{\hyperlink{namespacekblib_a47c378eaff6fdce8aa2eaafe18eb1356}{00413}} \mbox{\hyperlink{tdecl_8h_a9b2376bf15765fad0ad95e4aecf36e87}{KBLIB\_CONSTANT\_V}} \mbox{\hyperlink{namespacekblib_a47c378eaff6fdce8aa2eaafe18eb1356}{is\_iterable\_v}} = \mbox{\hyperlink{structkblib_1_1is__iterable}{is\_iterable<T>::value}};}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00414}00414 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00415}00415 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T, \textcolor{keyword}{typename} = \textcolor{keywordtype}{void}>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00416}\mbox{\hyperlink{structkblib_1_1is__iterator}{00416}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1is__iterator}{is\_iterator}} : std::false\_type \{\};}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00417}00417 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00418}00418 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00419}\mbox{\hyperlink{structkblib_1_1is__iterator_3_01_t_00_01void__t_3_01decltype_07_5std_1_1declval_3_01_t_01_6_01_417754e2a59262d22e4830b1d5c55d7cc}{00419}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1is__iterator}{is\_iterator}}<}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00420}00420     T, \mbox{\hyperlink{namespacekblib_1_1fakestd_a2df414d5a1a1f59c8f33520890755f84}{void\_t}}<decltype(*std::declval<T\&>(), void(), ++std::declval<T\&>())>>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00421}00421     : std::true\_type \{\};}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00422}00422 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00423}00423 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00424}\mbox{\hyperlink{namespacekblib_a77a4b828d16a122e5fd65379109dc036}{00424}} \mbox{\hyperlink{tdecl_8h_a9b2376bf15765fad0ad95e4aecf36e87}{KBLIB\_CONSTANT\_V}} \mbox{\hyperlink{namespacekblib_a77a4b828d16a122e5fd65379109dc036}{is\_iterator\_v}} = \mbox{\hyperlink{structkblib_1_1is__iterator}{is\_iterator<T>::value}};}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00425}00425 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00430}00430 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00431}\mbox{\hyperlink{namespacekblib_a625498ea158a89d47216df312843feac}{00431}} \mbox{\hyperlink{tdecl_8h_a9b2376bf15765fad0ad95e4aecf36e87}{KBLIB\_CONSTANT\_V}} \mbox{\hyperlink{namespacekblib_a625498ea158a89d47216df312843feac}{is\_reference\_v}} = std::is\_reference<T>::value;}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00432}00432 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00437}00437 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00438}\mbox{\hyperlink{namespacekblib_a4be602e9cbe25a984f76f7a66a0466cd}{00438}} \textcolor{keyword}{using }\mbox{\hyperlink{namespacekblib_a4be602e9cbe25a984f76f7a66a0466cd}{remove\_reference\_t}} = \textcolor{keyword}{typename} std::remove\_reference<T>::type;}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00439}00439 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00443}00443 \textcolor{keyword}{template} <\textcolor{keyword}{typename} CharT = \textcolor{keywordtype}{char}>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00444}\mbox{\hyperlink{namespacekblib_af23ee1a0fd16161a62159681c8cf6e16}{00444}} \mbox{\hyperlink{tdecl_8h_a35b356d58929dd3ae764e8291838f5be}{KBLIB\_CONSTANT}} \textcolor{keyword}{auto} \mbox{\hyperlink{namespacekblib_af23ee1a0fd16161a62159681c8cf6e16}{eof}} = \mbox{\hyperlink{namespacekblib_af23ee1a0fd16161a62159681c8cf6e16}{std::char\_traits<CharT>::eof}}();}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00445}00445 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00446}00446 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T, T V>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00447}\mbox{\hyperlink{structkblib_1_1type__constant}{00447}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1type__constant}{type\_constant}} \{}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00448}\mbox{\hyperlink{structkblib_1_1type__constant_aaa63f8ab55353f3852893d4557dd5078}{00448}}    \textcolor{keyword}{constexpr} \textcolor{keyword}{operator} T() const noexcept \{ \textcolor{keywordflow}{return} V; \}}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00449}\mbox{\hyperlink{structkblib_1_1type__constant_a8c0c46cea35f2930663b2b6c051d4404}{00449}}    \textcolor{keyword}{static} \textcolor{keyword}{constexpr} T value = V;}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00450}00450 \};}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00451}00451 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00452}00452 \textcolor{preprocessor}{\#if \_\_cpp\_nontype\_template\_parameter\_auto}}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00453}00453 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00454}00454 \textcolor{keyword}{template} <auto V>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00455}00455 \textcolor{keyword}{using }type\_constant\_for = \mbox{\hyperlink{structkblib_1_1type__constant}{type\_constant}}<\textcolor{keyword}{decltype}(V), V>;}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00456}00456 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00457}00457 \textcolor{preprocessor}{\#endif}}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00458}00458 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00459}00459 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00460}\mbox{\hyperlink{structkblib_1_1is__aliasing__type}{00460}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1is__aliasing__type}{is\_aliasing\_type}} : std::false\_type \{\};}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00461}00461 \textcolor{keyword}{template} <>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00462}\mbox{\hyperlink{structkblib_1_1is__aliasing__type_3_01char_01_4}{00462}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1is__aliasing__type}{is\_aliasing\_type}}<char> : std::true\_type \{\};}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00463}00463 \textcolor{keyword}{template} <>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00464}\mbox{\hyperlink{structkblib_1_1is__aliasing__type_3_01unsigned_01char_01_4}{00464}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1is__aliasing__type}{is\_aliasing\_type}}<unsigned char> : std::true\_type \{\};}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00465}00465 \textcolor{preprocessor}{\#if \_\_cpp\_lib\_byte}}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00466}00466 \textcolor{keyword}{template} <>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00467}00467 \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1is__aliasing__type}{is\_aliasing\_type}}<\mbox{\hyperlink{namespacestd}{std}}::byte> : std::true\_type \{\};}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00468}00468 \textcolor{preprocessor}{\#endif}}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00469}00469 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00470}00470 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00471}\mbox{\hyperlink{namespacekblib_aa9f553215f3b18343f6b298506426ce2}{00471}} \mbox{\hyperlink{tdecl_8h_a9b2376bf15765fad0ad95e4aecf36e87}{KBLIB\_CONSTANT\_V}} \mbox{\hyperlink{namespacekblib_aa9f553215f3b18343f6b298506426ce2}{is\_aliasing\_type\_v}} = \mbox{\hyperlink{structkblib_1_1is__aliasing__type}{is\_aliasing\_type<T>::value}};}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00472}00472 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00473}00473 \} \textcolor{comment}{// namespace KBLIB\_NS}}
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00474}00474 }
\DoxyCodeLine{\Hypertarget{traits_8h_source_l00475}00475 \textcolor{preprocessor}{\#endif }\textcolor{comment}{// KBLIB\_TRAITS\_H\_INCLUDED\_}}

\end{DoxyCode}
