\hypertarget{traits_8h}{}\doxysection{kblib/traits.h File Reference} \label{traits_8h}\index{kblib/traits.h@{kblib/traits.h}} Contains some type traits not in the standard library that are useful in the implementation of kblib. {\ttfamily \#include \char`\"{}fakestd.\+h\char`\"{}}\newline {\ttfamily \#include \char`\"{}tdecl.\+h\char`\"{}}\newline {\ttfamily \#include $<$array$>$}\newline {\ttfamily \#include $<$cstring$>$}\newline {\ttfamily \#include $<$tuple$>$}\newline {\ttfamily \#include $<$type\+\_\+traits$>$}\newline Include dependency graph for traits.\+h\+:\nopagebreak \begin{figure}[H] \begin{center} \leavevmode \includegraphics[width=350pt]{traits_8h__incl} \end{center} \end{figure} This graph shows which files directly or indirectly include this file\+:\nopagebreak \begin{figure}[H] \begin{center} \leavevmode \includegraphics[width=350pt]{traits_8h__dep__incl} \end{center} \end{figure} \doxysubsection*{Classes} \begin{DoxyCompactItemize} \item struct \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}{kblib\+::contains\+\_\+type$<$ std\+::tuple$<$ T, Ts... $>$, U $>$}} \item struct \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}{kblib\+::contains\+\_\+type$<$ std\+::tuple$<$ T, Ts... $>$, T $>$}} \item struct \mbox{\hyperlink{structkblib_1_1contains__type_3_01std_1_1tuple_3_4_00_01_t_01_4}{kblib\+::contains\+\_\+type$<$ std\+::tuple$<$$>$, T $>$}} \item struct \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}{kblib\+::contains\+\_\+types$<$ Tuple, std\+::tuple$<$ T, Ts... $>$ $>$}} \item struct \mbox{\hyperlink{structkblib_1_1contains__types_3_01_tuple_00_01std_1_1tuple_3_4_01_4}{kblib\+::contains\+\_\+types$<$ Tuple, std\+::tuple$<$$>$ $>$}} \item struct \mbox{\hyperlink{structkblib_1_1list__as__tuple_3_01_tuple_3_01_ts_8_8_8_01_4_01_4}{kblib\+::list\+\_\+as\+\_\+tuple$<$ Tuple$<$ Ts... $>$ $>$}} \item struct \mbox{\hyperlink{structkblib_1_1is__unbounded__array}{kblib\+::is\+\_\+unbounded\+\_\+array$<$ T $>$}} \item struct \mbox{\hyperlink{structkblib_1_1is__unbounded__array_3_01_t_0f_0e_4}{kblib\+::is\+\_\+unbounded\+\_\+array$<$ T\mbox{[}$\,$\mbox{]}$>$}} \item struct \mbox{\hyperlink{structkblib_1_1is__bounded__array}{kblib\+::is\+\_\+bounded\+\_\+array$<$ T $>$}} \item struct \mbox{\hyperlink{structkblib_1_1is__bounded__array_3_01_t_0f_n_0e_4}{kblib\+::is\+\_\+bounded\+\_\+array$<$ T\mbox{[}\+N\mbox{]}$>$}} \item struct \mbox{\hyperlink{structkblib_1_1ignore}{kblib\+::ignore$<$ typename, T $>$}} \begin{DoxyCompactList}\small\item\em Ignores its first template argument entirely, and returns its second. \end{DoxyCompactList}\item struct \mbox{\hyperlink{structkblib_1_1is__resizable}{kblib\+::is\+\_\+resizable$<$ C $>$}} \item struct \mbox{\hyperlink{structkblib_1_1has__reserve}{kblib\+::has\+\_\+reserve$<$ C $>$}} \begin{DoxyCompactList}\small\item\em True if and only if C contains an accessible reserve() member. \end{DoxyCompactList}\item struct \mbox{\hyperlink{structkblib_1_1is__contiguous}{kblib\+::is\+\_\+contiguous$<$ C $>$}} \item struct \mbox{\hyperlink{structkblib_1_1class__of_3_01_m_01_t_1_1_5_01_4}{kblib\+::class\+\_\+of$<$ M T\+::$\ast$ $>$}} \item struct \mbox{\hyperlink{structkblib_1_1member__of_3_01_m_01_t_1_1_5_01_4}{kblib\+::member\+\_\+of$<$ M T\+::$\ast$ $>$}} \item struct \mbox{\hyperlink{structkblib_1_1return__type_3_01_r_07_args_8_8_8_08_4}{kblib\+::return\+\_\+type$<$ R(\+Args...)$>$}} \item struct \mbox{\hyperlink{structkblib_1_1return__type_3_01_r_07_args_8_8_8_08_01const_01_4}{kblib\+::return\+\_\+type$<$ R(\+Args...) const $>$}} \item struct \mbox{\hyperlink{structkblib_1_1return__type_3_01_r_07_args_8_8_8_08_01volatile_01_4}{kblib\+::return\+\_\+type$<$ R(\+Args...) volatile $>$}} \item struct \mbox{\hyperlink{structkblib_1_1return__type_3_01_r_07_args_8_8_8_08_01const_01volatile_01_4}{kblib\+::return\+\_\+type$<$ R(\+Args...) const volatile $>$}} \item struct \mbox{\hyperlink{structkblib_1_1exists}{kblib\+::exists$<$ T $>$}} \item struct \mbox{\hyperlink{structkblib_1_1is__input__iterator}{kblib\+::is\+\_\+input\+\_\+iterator$<$ T, typename $>$}} \item struct \mbox{\hyperlink{structkblib_1_1is__input__iterator_3_01_t_00_01void__if__t_3_01std_1_1is__base__of_3_01std_1_1in234768fad8d9bb60c694b1d9d96c2c0c}{kblib\+::is\+\_\+input\+\_\+iterator$<$ T, void\+\_\+if\+\_\+t$<$ std\+::is\+\_\+base\+\_\+of$<$ std\+::input\+\_\+iterator\+\_\+tag, typename std\+::iterator\+\_\+traits$<$ T $>$\+::iterator\+\_\+category $>$\+::value $>$ $>$}} \item struct \mbox{\hyperlink{structkblib_1_1is__forward__iterator}{kblib\+::is\+\_\+forward\+\_\+iterator$<$ T, typename $>$}} \item struct \mbox{\hyperlink{structkblib_1_1is__forward__iterator_3_01_t_00_01void__if__t_3_01std_1_1is__base__of_3_01std_1_1123504ca44604c4d631a64f1c696432e}{kblib\+::is\+\_\+forward\+\_\+iterator$<$ T, void\+\_\+if\+\_\+t$<$ std\+::is\+\_\+base\+\_\+of$<$ std\+::forward\+\_\+iterator\+\_\+tag, typename std\+::iterator\+\_\+traits$<$ T $>$\+::iterator\+\_\+category $>$\+::value $>$ $>$}} \item struct \mbox{\hyperlink{structkblib_1_1is__bidirectional__iterator}{kblib\+::is\+\_\+bidirectional\+\_\+iterator$<$ T, typename $>$}} \item struct \mbox{\hyperlink{structkblib_1_1is__bidirectional__iterator_3_01_t_00_01void__if__t_3_01std_1_1is__base__of_3_01sa49b8d252b80c33e3e8c1f1cd38ed80a}{kblib\+::is\+\_\+bidirectional\+\_\+iterator$<$ T, void\+\_\+if\+\_\+t$<$ std\+::is\+\_\+base\+\_\+of$<$ std\+::bidirectional\+\_\+iterator\+\_\+tag, typename std\+::iterator\+\_\+traits$<$ T $>$\+::iterator\+\_\+category $>$\+::value $>$ $>$}} \item struct \mbox{\hyperlink{structkblib_1_1is__random__access__iterator}{kblib\+::is\+\_\+random\+\_\+access\+\_\+iterator$<$ T, typename $>$}} \item struct \mbox{\hyperlink{structkblib_1_1is__random__access__iterator_3_01_t_00_01void__if__t_3_01std_1_1is__base__of_3_0176e99d6e82616d065cc522966db7e3ec}{kblib\+::is\+\_\+random\+\_\+access\+\_\+iterator$<$ T, void\+\_\+if\+\_\+t$<$ std\+::is\+\_\+base\+\_\+of$<$ std\+::random\+\_\+access\+\_\+iterator\+\_\+tag, typename std\+::iterator\+\_\+traits$<$ T $>$\+::iterator\+\_\+category $>$\+::value $>$ $>$}} \item struct \mbox{\hyperlink{structkblib_1_1iterator__type__for_3_01_t_0f_n_0e_00_01void_01_4}{kblib\+::iterator\+\_\+type\+\_\+for$<$ T\mbox{[}\+N\mbox{]}, void $>$}} \item struct \mbox{\hyperlink{structkblib_1_1iterator__type__for_3_01_range_00_01void__t_3_01decltype_07begin_07std_1_1declval1101c10852428ba517f2e2551d7e07be}{kblib\+::iterator\+\_\+type\+\_\+for$<$ Range, void\+\_\+t$<$ decltype(begin(std\+::declval$<$ Range \& $>$()))$>$ $>$}} \item struct \mbox{\hyperlink{structkblib_1_1is__iterable}{kblib\+::is\+\_\+iterable$<$ Range, typename $>$}} \item struct \mbox{\hyperlink{structkblib_1_1is__iterable_3_01_range_00_01void__if__t_3_01is__input__iterator_3_01decltype_07b2bc8ae14696a5d961b6b820839a016a5}{kblib\+::is\+\_\+iterable$<$ Range, void\+\_\+if\+\_\+t$<$ is\+\_\+input\+\_\+iterator$<$ decltype(begin(std\+::declval$<$ Range \& $>$()))$>$\+::value $>$ $>$}} \item struct \mbox{\hyperlink{structkblib_1_1is__iterable_3_01_t_0f_n_0e_00_01void_01_4}{kblib\+::is\+\_\+iterable$<$ T\mbox{[}\+N\mbox{]}, void $>$}} \item struct \mbox{\hyperlink{structkblib_1_1is__iterable_3_01_t_07_6_08_0f_n_0e_00_01void_01_4}{kblib\+::is\+\_\+iterable$<$ T(\&)\mbox{[}\+N\mbox{]}, void $>$}} \item struct \mbox{\hyperlink{structkblib_1_1is__iterator}{kblib\+::is\+\_\+iterator$<$ T, typename $>$}} \item struct \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}{kblib\+::is\+\_\+iterator$<$ T, void\+\_\+t$<$ decltype($\ast$std\+::declval$<$ T \& $>$(), void(),++std\+::declval$<$ T \& $>$())$>$ $>$}} \item struct \mbox{\hyperlink{structkblib_1_1type__constant}{kblib\+::type\+\_\+constant$<$ T, V $>$}} \item struct \mbox{\hyperlink{structkblib_1_1is__aliasing__type}{kblib\+::is\+\_\+aliasing\+\_\+type$<$ T $>$}} \item struct \mbox{\hyperlink{structkblib_1_1is__aliasing__type_3_01char_01_4}{kblib\+::is\+\_\+aliasing\+\_\+type$<$ char $>$}} \item struct \mbox{\hyperlink{structkblib_1_1is__aliasing__type_3_01unsigned_01char_01_4}{kblib\+::is\+\_\+aliasing\+\_\+type$<$ unsigned char $>$}} \end{DoxyCompactItemize} \doxysubsection*{Namespaces} \begin{DoxyCompactItemize} \item namespace \mbox{\hyperlink{namespacekblib}{kblib}} \begin{DoxyCompactList}\small\item\em The main namespace in which all entities from kblib are defined. \end{DoxyCompactList}\item namespace \mbox{\hyperlink{namespacekblib_1_1detail}{kblib\+::detail}} \begin{DoxyCompactList}\small\item\em The namespace used for implementation details within kblib. \end{DoxyCompactList}\end{DoxyCompactItemize} \doxysubsection*{Typedefs} \begin{DoxyCompactItemize} \item {\footnotesize template$<$typename T $>$ }\\using \mbox{\hyperlink{namespacekblib_a8fe1791c4dfe674d145963ab5b3121ae}{kblib\+::alias}} = T \begin{DoxyCompactList}\small\item\em A simple identity alias for simplifying some compound type declarations, such as function pointers. \end{DoxyCompactList}\item {\footnotesize template$<$typename U , typename T $>$ }\\using \mbox{\hyperlink{namespacekblib_a3cec35675700d7e15c9139e0497768e6}{kblib\+::ignore\+\_\+t}} = typename ignore$<$ U, T $>$\+::type \begin{DoxyCompactList}\small\item\em An alias for \mbox{\hyperlink{structkblib_1_1ignore_aa8afaf19eb6bad07fa899e99a05e845a}{ignore$<$\+U, T$>$\+::type}}. \end{DoxyCompactList}\item {\footnotesize template$<$typename T $>$ }\\using \mbox{\hyperlink{namespacekblib_ac0d673e8dfabd5fe1fe4d89a08be7019}{kblib\+::class\+\_\+of\+\_\+t}} = typename class\+\_\+of$<$ T $>$\+::type \item {\footnotesize template$<$typename T $>$ }\\using \mbox{\hyperlink{namespacekblib_a8944b438ec39c111c64a1e8501fd7828}{kblib\+::member\+\_\+of\+\_\+t}} = typename member\+\_\+of$<$ T $>$\+::type \item {\footnotesize template$<$typename Range $>$ }\\using \mbox{\hyperlink{namespacekblib_a50228da6d1f395258a03db48257305d0}{kblib\+::iterator\+\_\+type\+\_\+for\+\_\+t}} = typename iterator\+\_\+type\+\_\+for$<$ Range $>$\+::type \item {\footnotesize template$<$typename T $>$ }\\using \mbox{\hyperlink{namespacekblib_a4be602e9cbe25a984f76f7a66a0466cd}{kblib\+::remove\+\_\+reference\+\_\+t}} = typename std\+::remove\+\_\+reference$<$ T $>$\+::type \begin{DoxyCompactList}\small\item\em Abbreviated name for std\+::remove\+\_\+reference$<$\+T$>$\+::type for C++14. \end{DoxyCompactList}\end{DoxyCompactItemize} \doxysubsection*{Functions} \begin{DoxyCompactItemize} \item {\footnotesize template$<$typename T , int N, int... I$>$ }\\constexpr auto \mbox{\hyperlink{namespacekblib_1_1detail_a8e69943e2b7ab538494374e097321357}{kblib\+::detail\+::trim\+\_\+array}} (const T(\&arr)\mbox{[}N\mbox{]}, std\+::integer\+\_\+sequence$<$ int, I... $>$) -\/$>$ std\+::array$<$ T, std\+::integer\+\_\+sequence$<$ int, I... $>$\+::size()$>$ \begin{DoxyCompactList}\small\item\em Truncates an array to its first N elements. \end{DoxyCompactList}\item {\footnotesize template$<$int trim, typename T , int N, typename Indices = std\+::make\+\_\+integer\+\_\+sequence$<$int, N -\/ trim$>$$>$ }\\constexpr auto \mbox{\hyperlink{namespacekblib_a07019c995e0508ce266be47f94f3a882}{kblib\+::trim\+\_\+array}} (const T(\&arr)\mbox{[}N\mbox{]}) -\/$>$ std\+::array$<$ T, N -\/ trim $>$ \begin{DoxyCompactList}\small\item\em Truncates the last trim elements from an array. \end{DoxyCompactList}\item {\footnotesize template$<$int N, typename Indices = std\+::make\+\_\+integer\+\_\+sequence$<$int, N -\/ 1$>$$>$ }\\constexpr auto \mbox{\hyperlink{namespacekblib_a9bfc51ee4b1118cf5effed3d4ae9dfed}{kblib\+::remove\+\_\+null\+\_\+terminator}} (const char(\&arr)\mbox{[}N\mbox{]}) -\/$>$ std\+::array$<$ char, N -\/ 1 $>$ \begin{DoxyCompactList}\small\item\em Creates an array of only the meaningful characters in a string literal, and not the null terminator. \end{DoxyCompactList}\item {\footnotesize template$<$typename T , typename F $>$ }\\auto \mbox{\hyperlink{namespacekblib_ae5b7fdf2bbba96527afa217fad0dea1f}{kblib\+::byte\+\_\+cast}} (F v) noexcept -\/$>$ T \begin{DoxyCompactList}\small\item\em Creates a T with the same object representation as the given F. \end{DoxyCompactList}\item {\footnotesize template$<$typename C , typename = decltype(std\+::declval$<$\+C\&$>$().\+resize(0))$>$ }\\auto \mbox{\hyperlink{namespacekblib_1_1detail_ac5dbc22e701244360a7107a086f67d3c}{kblib\+::detail\+::calc\+\_\+resizable}} (int) noexcept -\/$>$ std\+::true\+\_\+type \item {\footnotesize template$<$typename $>$ }\\auto \mbox{\hyperlink{namespacekblib_1_1detail_ac6e7201044196c9c8314f7f6c3a2f168}{kblib\+::detail\+::calc\+\_\+resizable}} (...) noexcept -\/$>$ std\+::false\+\_\+type \item {\footnotesize template$<$typename C , typename std\+::enable\+\_\+if$<$ has\+\_\+reserve\+\_\+v$<$ C $>$, int $>$\+::type = 0$>$ }\\auto \mbox{\hyperlink{namespacekblib_a7035cf97e9bcba5add3b1462ac01a0ed}{kblib\+::try\+\_\+reserve}} (C \&c, std\+::size\+\_\+t s) noexcept(noexcept(c.\+reserve(s))) -\/$>$ void \begin{DoxyCompactList}\small\item\em Attempt to reserve capacity in a container. No-\/op if unsupported. \end{DoxyCompactList}\end{DoxyCompactItemize} \doxysubsection*{Variables} \begin{DoxyCompactItemize} \item {\footnotesize template$<$typename... Ts$>$ }\\\mbox{\hyperlink{tdecl_8h_a9b2376bf15765fad0ad95e4aecf36e87}{KBLIB\+\_\+\+CONSTANT\+\_\+V}} \mbox{\hyperlink{namespacekblib_a462a4f145e951b0820c78d27c60d7389}{kblib\+::contains\+\_\+type\+\_\+v}} = contains\+\_\+type$<$Ts...$>$\+::value \item {\footnotesize template$<$typename... Ts$>$ }\\\mbox{\hyperlink{tdecl_8h_a9b2376bf15765fad0ad95e4aecf36e87}{KBLIB\+\_\+\+CONSTANT\+\_\+V}} \mbox{\hyperlink{namespacekblib_a7bf6ffaec25cb2430dcd6f43bd285ca4}{kblib\+::contains\+\_\+types\+\_\+v}} = contains\+\_\+types$<$Ts...$>$\+::value \item {\footnotesize template$<$typename C $>$ }\\\mbox{\hyperlink{tdecl_8h_a9b2376bf15765fad0ad95e4aecf36e87}{KBLIB\+\_\+\+CONSTANT\+\_\+V}} \mbox{\hyperlink{namespacekblib_a928b1f231946db62ee4c171a21593919}{kblib\+::is\+\_\+resizable\+\_\+v}} = decltype(detail\+::calc\+\_\+resizable$<$C$>$(0))\+::value \item {\footnotesize template$<$typename C , typename = void$>$ }\\\mbox{\hyperlink{tdecl_8h_a9b2376bf15765fad0ad95e4aecf36e87}{KBLIB\+\_\+\+CONSTANT\+\_\+V}} \mbox{\hyperlink{namespacekblib_ad122336bc521ea4a22d7759b529fb561}{kblib\+::has\+\_\+reserve\+\_\+v}} = false \item {\footnotesize template$<$typename C , typename = void$>$ }\\\mbox{\hyperlink{tdecl_8h_a9b2376bf15765fad0ad95e4aecf36e87}{KBLIB\+\_\+\+CONSTANT\+\_\+V}} \mbox{\hyperlink{namespacekblib_acec974f6a75e6884147ef326bbd78d35}{kblib\+::is\+\_\+contiguous\+\_\+v}} = false \begin{DoxyCompactList}\small\item\em Type trait to determine if a container is contiguous. \end{DoxyCompactList}\item {\footnotesize template$<$typename T $>$ }\\\mbox{\hyperlink{tdecl_8h_a9b2376bf15765fad0ad95e4aecf36e87}{KBLIB\+\_\+\+CONSTANT\+\_\+V}} \mbox{\hyperlink{namespacekblib_a38ad8c5b263ac766baf7ec36fe3b4a10}{kblib\+::is\+\_\+input\+\_\+iterator\+\_\+v}} = is\+\_\+input\+\_\+iterator$<$T$>$\+::value \item {\footnotesize template$<$typename T $>$ }\\\mbox{\hyperlink{tdecl_8h_a9b2376bf15765fad0ad95e4aecf36e87}{KBLIB\+\_\+\+CONSTANT\+\_\+V}} \mbox{\hyperlink{namespacekblib_a8bde12b9b9ad4463f4cc065fd2df6f99}{kblib\+::is\+\_\+forward\+\_\+iterator\+\_\+v}} = is\+\_\+forward\+\_\+iterator$<$T$>$\+::value \item {\footnotesize template$<$typename T $>$ }\\\mbox{\hyperlink{tdecl_8h_a9b2376bf15765fad0ad95e4aecf36e87}{KBLIB\+\_\+\+CONSTANT\+\_\+V}} \mbox{\hyperlink{namespacekblib_ab4a90d7f7bacba9a52aea362f42af35f}{kblib\+::is\+\_\+bidirectional\+\_\+iterator\+\_\+v}} = is\+\_\+bidirectional\+\_\+iterator$<$T$>$\+::value \item {\footnotesize template$<$typename T $>$ }\\\mbox{\hyperlink{tdecl_8h_a9b2376bf15765fad0ad95e4aecf36e87}{KBLIB\+\_\+\+CONSTANT\+\_\+V}} \mbox{\hyperlink{namespacekblib_a9f3169b47a686b2f29f36d4419530960}{kblib\+::is\+\_\+random\+\_\+access\+\_\+iterator\+\_\+v}} = is\+\_\+random\+\_\+access\+\_\+iterator$<$T$>$\+::value \item {\footnotesize template$<$typename T $>$ }\\\mbox{\hyperlink{tdecl_8h_a9b2376bf15765fad0ad95e4aecf36e87}{KBLIB\+\_\+\+CONSTANT\+\_\+V}} \mbox{\hyperlink{namespacekblib_a47c378eaff6fdce8aa2eaafe18eb1356}{kblib\+::is\+\_\+iterable\+\_\+v}} = is\+\_\+iterable$<$T$>$\+::value \item {\footnotesize template$<$typename T $>$ }\\\mbox{\hyperlink{tdecl_8h_a9b2376bf15765fad0ad95e4aecf36e87}{KBLIB\+\_\+\+CONSTANT\+\_\+V}} \mbox{\hyperlink{namespacekblib_a77a4b828d16a122e5fd65379109dc036}{kblib\+::is\+\_\+iterator\+\_\+v}} = is\+\_\+iterator$<$T$>$\+::value \item {\footnotesize template$<$typename T $>$ }\\\mbox{\hyperlink{tdecl_8h_a9b2376bf15765fad0ad95e4aecf36e87}{KBLIB\+\_\+\+CONSTANT\+\_\+V}} \mbox{\hyperlink{namespacekblib_a625498ea158a89d47216df312843feac}{kblib\+::is\+\_\+reference\+\_\+v}} = std\+::is\+\_\+reference$<$T$>$\+::value \begin{DoxyCompactList}\small\item\em Abbreviated name for std\+::is\+\_\+reference$<$\+T$>$\+::value for C++14. \end{DoxyCompactList}\item {\footnotesize template$<$typename CharT = char$>$ }\\\mbox{\hyperlink{tdecl_8h_a35b356d58929dd3ae764e8291838f5be}{KBLIB\+\_\+\+CONSTANT}} auto \mbox{\hyperlink{namespacekblib_af23ee1a0fd16161a62159681c8cf6e16}{kblib\+::eof}} = std\+::char\+\_\+traits$<$CharT$>$\+::eof() \begin{DoxyCompactList}\small\item\em Names the EOF value for the given character type in std\+::char\+\_\+traits. \end{DoxyCompactList}\item {\footnotesize template$<$typename T $>$ }\\\mbox{\hyperlink{tdecl_8h_a9b2376bf15765fad0ad95e4aecf36e87}{KBLIB\+\_\+\+CONSTANT\+\_\+V}} \mbox{\hyperlink{namespacekblib_aa9f553215f3b18343f6b298506426ce2}{kblib\+::is\+\_\+aliasing\+\_\+type\+\_\+v}} = is\+\_\+aliasing\+\_\+type$<$T$>$\+::value \end{DoxyCompactItemize} \doxysubsection{Detailed Description} Contains some type traits not in the standard library that are useful in the implementation of kblib. \begin{DoxyAuthor}{Author} killerbee \end{DoxyAuthor} \begin{DoxyDate}{Date} 2019-\/2021 \end{DoxyDate} \begin{DoxyCopyright}{Copyright} GNU General Public Licence v3.\+0 \end{DoxyCopyright} Definition in file \mbox{\hyperlink{traits_8h_source}{traits.\+h}}.