\hypertarget{iterators_8h_source}{}\doxysection{iterators.\+h}
\label{iterators_8h_source}\index{kblib/iterators.h@{kblib/iterators.h}}
\mbox{\hyperlink{iterators_8h}{Go to the documentation of this file.}}
\begin{DoxyCode}{0}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00001}00001 \textcolor{comment}{/* *****************************************************************************}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00002}00002 \textcolor{comment}{ * kblib is a general utility library for C++14 and C++17, intended to provide}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00003}00003 \textcolor{comment}{ * performant high-\/level abstractions and more expressive ways to do simple}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00004}00004 \textcolor{comment}{ * things.}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00005}00005 \textcolor{comment}{ *}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00006}00006 \textcolor{comment}{ * Copyright (c) 2021 killerbee}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00007}00007 \textcolor{comment}{ *}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00008}00008 \textcolor{comment}{ * This program is free software: you can redistribute it and/or modify}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00009}00009 \textcolor{comment}{ * it under the terms of the GNU General Public License as published by}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00010}00010 \textcolor{comment}{ * the Free Software Foundation, either version 3 of the License, or}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00011}00011 \textcolor{comment}{ * (at your option) any later version.}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00012}00012 \textcolor{comment}{ *}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00013}00013 \textcolor{comment}{ * This program is distributed in the hope that it will be useful,}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00014}00014 \textcolor{comment}{ * but WITHOUT ANY WARRANTY; without even the implied warranty of}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00015}00015 \textcolor{comment}{ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00016}00016 \textcolor{comment}{ * GNU General Public License for more details.}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00017}00017 \textcolor{comment}{ *}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00018}00018 \textcolor{comment}{ * You should have received a copy of the GNU General Public License}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00019}00019 \textcolor{comment}{ * along with this program.  If not, see <https://www.gnu.org/licenses/>.}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00020}00020 \textcolor{comment}{ * ****************************************************************************/}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00021}00021 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00032}00032 \textcolor{preprocessor}{\#ifndef KBLIB\_ITERATORS\_H}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00033}00033 \textcolor{preprocessor}{\#define KBLIB\_ITERATORS\_H}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00034}00034 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00035}00035 \textcolor{preprocessor}{\#include "{}\mbox{\hyperlink{enumerate-contrib-cry_8h}{enumerate-\/contrib-\/cry.h}}"{}}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00036}00036 \textcolor{preprocessor}{\#include "{}\mbox{\hyperlink{enumerate-contrib-tw_8h}{enumerate-\/contrib-\/tw.h}}"{}}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00037}00037 \textcolor{preprocessor}{\#include "{}\mbox{\hyperlink{fakestd_8h}{fakestd.h}}"{}}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00038}00038 \textcolor{preprocessor}{\#include "{}\mbox{\hyperlink{traits_8h}{traits.h}}"{}}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00039}00039 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00040}00040 \textcolor{preprocessor}{\#include <cassert>}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00041}00041 \textcolor{preprocessor}{\#include <iterator>}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00042}00042 \textcolor{preprocessor}{\#include <vector>}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00043}00043 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00044}00044 \textcolor{preprocessor}{\#if KBLIB\_USE\_CXX17}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00045}00045 \textcolor{preprocessor}{\#  include <optional>}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00046}00046 \textcolor{preprocessor}{\#endif}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00047}00047 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00048}00048 \textcolor{keyword}{namespace }\mbox{\hyperlink{tdecl_8h_a4b5c574c663a392148218cd4410fd7a1}{KBLIB\_NS}} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00049}00049 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00050}00050 \textcolor{keyword}{template} <\textcolor{keyword}{typename} ptr>}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00051}\mbox{\hyperlink{structkblib_1_1to__pointer__impl}{00051}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1to__pointer__impl}{to\_pointer\_impl}} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00052}\mbox{\hyperlink{structkblib_1_1to__pointer__impl_a34c5114f6123f97b18da8bd50aa9c091}{00052}}    \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1to__pointer__impl_a34c5114f6123f97b18da8bd50aa9c091}{operator()}}(ptr\&\& p) \textcolor{keyword}{const} \textcolor{keyword}{noexcept} -\/> \textcolor{keyword}{auto} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00053}00053       \textcolor{keywordflow}{return} \mbox{\hyperlink{structkblib_1_1to__pointer__impl}{to\_pointer\_impl}}<\textcolor{keyword}{decltype}(p.operator-\/>())>\{\}(p.operator-\/>());}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00054}00054    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00055}\mbox{\hyperlink{structkblib_1_1to__pointer__impl_a128ce82fad41f41dd0170e03a474dcf5}{00055}}    \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1to__pointer__impl_a128ce82fad41f41dd0170e03a474dcf5}{operator()}}(\textcolor{keyword}{const} ptr\& p) \textcolor{keyword}{const} \textcolor{keyword}{noexcept} -\/> \textcolor{keyword}{auto} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00056}00056       \textcolor{keywordflow}{return} \mbox{\hyperlink{structkblib_1_1to__pointer__impl}{to\_pointer\_impl}}<\textcolor{keyword}{decltype}(p.operator-\/>())>\{\}(p.operator-\/>());}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00057}00057    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00058}00058 \};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00059}00059 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00060}00060 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00061}\mbox{\hyperlink{structkblib_1_1to__pointer__impl_3_01_t_01_5_01_4}{00061}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1to__pointer__impl}{to\_pointer\_impl}}<T*> \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00062}\mbox{\hyperlink{structkblib_1_1to__pointer__impl_3_01_t_01_5_01_4_a5c803767431b69b3cadb7c3e6c7a86e5}{00062}}    \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1to__pointer__impl_3_01_t_01_5_01_4_a5c803767431b69b3cadb7c3e6c7a86e5}{operator()}}(T* p) \textcolor{keyword}{const} \textcolor{keyword}{noexcept} -\/> T* \{ \textcolor{keywordflow}{return} p; \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00063}00063 \};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00064}00064 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00071}00071 \textcolor{keyword}{template} <\textcolor{keyword}{typename} P>}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00072}\mbox{\hyperlink{namespacekblib_a1c2aa67048789f77bea56734a583d3d1}{00072}} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{namespacekblib_a1c2aa67048789f77bea56734a583d3d1}{to\_pointer}}(P\&\& p) \textcolor{keyword}{noexcept} -\/> \textcolor{keyword}{auto}* \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00073}00073    \textcolor{keywordflow}{return} \mbox{\hyperlink{structkblib_1_1to__pointer__impl}{to\_pointer\_impl<std::decay\_t<P>}}>\{\}(p);}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00074}00074 \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00075}00075 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00076}00076 \textcolor{keyword}{template} <\textcolor{keyword}{typename} Container,}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00077}00077           \textcolor{keyword}{typename} Comp = std::less<value\_type\_linear\_t<Container>>>}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00078}\mbox{\hyperlink{namespacekblib_a7d43c2f73a1e2d35ca150b9ac3a43d58}{00078}} \textcolor{keyword}{auto} \mbox{\hyperlink{namespacekblib_a7d43c2f73a1e2d35ca150b9ac3a43d58}{max\_element}}(Container\& c, Comp comp) -\/> \mbox{\hyperlink{namespacekblib_ac04bc7261d579d570a3847df654bc209}{value\_type\_linear\_t<Container>}}* \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00079}00079    \textcolor{keyword}{auto} it = \mbox{\hyperlink{namespacekblib_a7d43c2f73a1e2d35ca150b9ac3a43d58}{max\_element}}(std::begin(c), std::end(c), comp);}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00080}00080    \textcolor{keywordflow}{if} (it != std::end(c)) \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00081}00081       \textcolor{keywordflow}{return} \mbox{\hyperlink{namespacekblib_a1c2aa67048789f77bea56734a583d3d1}{to\_pointer}}(it);}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00082}00082    \} \textcolor{keywordflow}{else} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00083}00083       \textcolor{keywordflow}{return} \textcolor{keyword}{nullptr};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00084}00084    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00085}00085 \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00090}00090 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T, \textcolor{keyword}{typename} E, \textcolor{keyword}{typename} = \textcolor{keywordtype}{void}>}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00091}\mbox{\hyperlink{structkblib_1_1is__output__iterator__for}{00091}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1is__output__iterator__for}{is\_output\_iterator\_for}} : std::false\_type \{\};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00092}00092 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00093}00093 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T, \textcolor{keyword}{typename} E>}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00094}\mbox{\hyperlink{structkblib_1_1is__output__iterator__for_3_01_t_00_01_e_00_01void__t_3_01decltype_07_5std_1_1dec93bfaad0990f9bf6c57857b906bb5af3}{00094}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1is__output__iterator__for}{is\_output\_iterator\_for}}<}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00095}00095     T, E, \mbox{\hyperlink{namespacekblib_1_1fakestd_a2df414d5a1a1f59c8f33520890755f84}{void\_t}}<decltype(*std::declval<T\&>()++ = std::declval<const E\&>())>>}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00096}00096     : std::true\_type \{\};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00097}00097 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00098}00098 \textcolor{keyword}{template} <\textcolor{keyword}{typename} Container>}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00107}\mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator}{00107}} \textcolor{keyword}{class }\mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator}{counting\_back\_insert\_iterator}} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00108}00108  \textcolor{keyword}{public}:}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00109}\mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator_ade5ba48579164d64990ab403e00be9e6}{00109}}    \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator_ade5ba48579164d64990ab403e00be9e6}{value\_type}} = void;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00110}\mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator_a69d3239ba2d1850cfb7fd65fb8d6d8e6}{00110}}    \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator_a69d3239ba2d1850cfb7fd65fb8d6d8e6}{difference\_type}} = std::ptrdiff\_t;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00111}\mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator_a14ff8afd3d2f7750462bc055dd6c7e12}{00111}}    \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator_a14ff8afd3d2f7750462bc055dd6c7e12}{pointer}} = void;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00112}\mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator_a4c965631476aea652d01a78f74775b21}{00112}}    \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator_a4c965631476aea652d01a78f74775b21}{reference}} = void;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00113}\mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator_aefb201f1eb9c9483044b2394325c551d}{00113}}    \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator_aefb201f1eb9c9483044b2394325c551d}{iterator\_category}} = std::output\_iterator\_tag;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00114}00114 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00115}\mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator_ac5ed3173eb79c2da628df8addec358cc}{00115}}    \mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator_ac5ed3173eb79c2da628df8addec358cc}{counting\_back\_insert\_iterator}}() noexcept = default;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00116}\mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator_ab9b6328179e44458d13a4ae4149e8088}{00116}}    explicit \mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator}{counting\_back\_insert\_iterator}}(Container\& c, \mbox{\hyperlink{namespacestd}{std}}::\textcolor{keywordtype}{size\_t} n = 0)}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00117}00117        : container(\mbox{\hyperlink{namespacestd}{std}}::addressof(c))}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00118}00118        , count(n) \{\}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00119}\mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator_aeb8e204f116e74e73be7d2069c258c68}{00119}}    \textcolor{keyword}{explicit} \mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator_aeb8e204f116e74e73be7d2069c258c68}{counting\_back\_insert\_iterator}}(std::size\_t n)}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00120}00120        : count(n) \{\}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00121}00121 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00122}\mbox{\hyperlink{structkblib_1_1counting__back__insert__iterator_1_1proxy__iterator}{00122}}    \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1counting__back__insert__iterator_1_1proxy__iterator}{proxy\_iterator}} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00123}\mbox{\hyperlink{structkblib_1_1counting__back__insert__iterator_1_1proxy__iterator_abd8fd45f3621766603a39b346c807e8b}{00123}}       \textcolor{keyword}{using }\mbox{\hyperlink{structkblib_1_1counting__back__insert__iterator_1_1proxy__iterator_abd8fd45f3621766603a39b346c807e8b}{value\_type}} = \textcolor{keyword}{typename} Container::value\_type;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00124}00124 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00125}\mbox{\hyperlink{structkblib_1_1counting__back__insert__iterator_1_1proxy__iterator_a31b07e9d36cbc0e4251d79744d793dfd}{00125}}       \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1counting__back__insert__iterator_1_1proxy__iterator_a31b07e9d36cbc0e4251d79744d793dfd}{operator=}}(\textcolor{keyword}{const} \mbox{\hyperlink{structkblib_1_1counting__back__insert__iterator_1_1proxy__iterator_abd8fd45f3621766603a39b346c807e8b}{value\_type}}\& value) \& -\/> \mbox{\hyperlink{structkblib_1_1counting__back__insert__iterator_1_1proxy__iterator}{proxy\_iterator}}\& \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00126}00126          assert(container);}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00127}00127          \textcolor{comment}{// Multiple assignments for a single dereference are not allowed}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00128}00128          assert(*dirty);}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00129}00129          *dirty = \textcolor{keyword}{false};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00130}00130          container-\/>push\_back(value);}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00131}00131          \textcolor{keywordflow}{return} *\textcolor{keyword}{this};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00132}00132       \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00133}00133 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00134}\mbox{\hyperlink{structkblib_1_1counting__back__insert__iterator_1_1proxy__iterator_a2896b092bfe21155466c07f9fbfe60ff}{00134}}       \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1counting__back__insert__iterator_1_1proxy__iterator_a2896b092bfe21155466c07f9fbfe60ff}{operator=}}(\mbox{\hyperlink{structkblib_1_1counting__back__insert__iterator_1_1proxy__iterator_abd8fd45f3621766603a39b346c807e8b}{value\_type}}\&\& value) \& -\/> \mbox{\hyperlink{structkblib_1_1counting__back__insert__iterator_1_1proxy__iterator}{proxy\_iterator}}\& \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00135}00135          assert(container);}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00136}00136          \textcolor{comment}{// Multiple assignments for a single dereference are not allowed}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00137}00137          assert(*dirty);}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00138}00138          *dirty = \textcolor{keyword}{false};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00139}00139          container-\/>push\_back(std::move(value));}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00140}00140          \textcolor{keywordflow}{return} *\textcolor{keyword}{this};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00141}00141       \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00142}00142 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00143}\mbox{\hyperlink{structkblib_1_1counting__back__insert__iterator_1_1proxy__iterator_adeb83205bd178b48a03cab3e98988f7a}{00143}}       Container* \mbox{\hyperlink{structkblib_1_1counting__back__insert__iterator_1_1proxy__iterator_adeb83205bd178b48a03cab3e98988f7a}{container}};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00144}\mbox{\hyperlink{structkblib_1_1counting__back__insert__iterator_1_1proxy__iterator_a5a4455004aaeee43e2160f521d30866a}{00144}}       \textcolor{keywordtype}{bool}* \mbox{\hyperlink{structkblib_1_1counting__back__insert__iterator_1_1proxy__iterator_a5a4455004aaeee43e2160f521d30866a}{dirty}};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00145}00145    \};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00146}00146 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00147}\mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator_ad979ad26eefc9501ebbdf6037dedbaad}{00147}}    \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator_ad979ad26eefc9501ebbdf6037dedbaad}{operator*}}() noexcept -\/> \mbox{\hyperlink{structkblib_1_1counting__back__insert__iterator_1_1proxy__iterator}{proxy\_iterator}} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00148}00148       assert(dirty);}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00149}00149       \textcolor{keywordflow}{return} \{container, \&dirty\};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00150}00150    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00151}00151 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00152}\mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator_aace73cca4051a496fe7bc9fb5533e334}{00152}}    \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator_aace73cca4051a496fe7bc9fb5533e334}{operator++}}() \& \textcolor{keyword}{noexcept} -\/> \mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator}{counting\_back\_insert\_iterator}}\& \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00153}00153       assert(not dirty);}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00154}00154       ++count;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00155}00155       dirty = \textcolor{keyword}{true};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00156}00156       \textcolor{keywordflow}{return} *\textcolor{keyword}{this};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00157}00157    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00158}\mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator_a7b1f92c07cf42b5957e53e45eec92a7e}{00158}}    \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator_a7b1f92c07cf42b5957e53e45eec92a7e}{operator++}}(\textcolor{keywordtype}{int}) \textcolor{keyword}{noexcept} -\/> \mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator}{counting\_back\_insert\_iterator}} = \textcolor{keyword}{delete};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00159}00159 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00160}\mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator_a4003d2e91f377a678aa4537662e034ea}{00160}}    \textcolor{keyword}{friend} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator_a4003d2e91f377a678aa4537662e034ea}{operator==}}(\textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator}{counting\_back\_insert\_iterator}}\& \mbox{\hyperlink{namespacekblib_a22831dce77d5f35c13930b5e30a59f07}{a}},}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00161}00161                           \textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator}{counting\_back\_insert\_iterator}}\& b) \textcolor{keyword}{noexcept}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00162}00162        -\/> \textcolor{keywordtype}{bool} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00163}00163       \textcolor{keywordflow}{return} \mbox{\hyperlink{namespacekblib_a22831dce77d5f35c13930b5e30a59f07}{a}}.count == b.count;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00164}00164    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00165}\mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator_ab9fe0664ba99710a8b92feb938794857}{00165}}    \textcolor{keyword}{friend} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator_ab9fe0664ba99710a8b92feb938794857}{operator!=}}(\textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator}{counting\_back\_insert\_iterator}}\& \mbox{\hyperlink{namespacekblib_a22831dce77d5f35c13930b5e30a59f07}{a}},}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00166}00166                           \textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator}{counting\_back\_insert\_iterator}}\& b) \textcolor{keyword}{noexcept}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00167}00167        -\/> \textcolor{keywordtype}{bool} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00168}00168       \textcolor{keywordflow}{return} \mbox{\hyperlink{namespacekblib_a22831dce77d5f35c13930b5e30a59f07}{a}}.count != b.count;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00169}00169    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00170}\mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator_aa1500957b74596104cb90f950dcfd5b4}{00170}}    \textcolor{keyword}{friend} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator_aa1500957b74596104cb90f950dcfd5b4}{operator<}}(\textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator}{counting\_back\_insert\_iterator}}\& \mbox{\hyperlink{namespacekblib_a22831dce77d5f35c13930b5e30a59f07}{a}},}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00171}00171                          \textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator}{counting\_back\_insert\_iterator}}\& b) \textcolor{keyword}{noexcept}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00172}00172        -\/> \textcolor{keywordtype}{bool} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00173}00173       \textcolor{keywordflow}{return} \mbox{\hyperlink{namespacekblib_a22831dce77d5f35c13930b5e30a59f07}{a}}.count < b.count;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00174}00174    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00175}\mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator_af0644c280df17d37e12839609cbd4477}{00175}}    \textcolor{keyword}{friend} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator_af0644c280df17d37e12839609cbd4477}{operator<=}}(\textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator}{counting\_back\_insert\_iterator}}\& \mbox{\hyperlink{namespacekblib_a22831dce77d5f35c13930b5e30a59f07}{a}},}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00176}00176                           \textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator}{counting\_back\_insert\_iterator}}\& b) \textcolor{keyword}{noexcept}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00177}00177        -\/> \textcolor{keywordtype}{bool} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00178}00178       \textcolor{keywordflow}{return} \mbox{\hyperlink{namespacekblib_a22831dce77d5f35c13930b5e30a59f07}{a}}.count <= b.count;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00179}00179    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00180}\mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator_aa670e3932112fd200c1949faa3303683}{00180}}    \textcolor{keyword}{friend} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator_aa670e3932112fd200c1949faa3303683}{operator>}}(\textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator}{counting\_back\_insert\_iterator}}\& \mbox{\hyperlink{namespacekblib_a22831dce77d5f35c13930b5e30a59f07}{a}},}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00181}00181                          \textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator}{counting\_back\_insert\_iterator}}\& b) \textcolor{keyword}{noexcept}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00182}00182        -\/> \textcolor{keywordtype}{bool} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00183}00183       \textcolor{keywordflow}{return} \mbox{\hyperlink{namespacekblib_a22831dce77d5f35c13930b5e30a59f07}{a}}.count > b.count;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00184}00184    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00185}\mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator_a37986a7c3876f9d0801480e1e2e7d526}{00185}}    \textcolor{keyword}{friend} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator_a37986a7c3876f9d0801480e1e2e7d526}{operator>=}}(\textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator}{counting\_back\_insert\_iterator}}\& \mbox{\hyperlink{namespacekblib_a22831dce77d5f35c13930b5e30a59f07}{a}},}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00186}00186                           \textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator}{counting\_back\_insert\_iterator}}\& b) \textcolor{keyword}{noexcept}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00187}00187        -\/> \textcolor{keywordtype}{bool} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00188}00188       \textcolor{keywordflow}{return} \mbox{\hyperlink{namespacekblib_a22831dce77d5f35c13930b5e30a59f07}{a}}.count >= b.count;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00189}00189    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00190}\mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator_a8744e224b5debfd93bf9724c7e8bceef}{00190}}    \textcolor{keyword}{friend} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator_a8744e224b5debfd93bf9724c7e8bceef}{operator-\/}}(\textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator}{counting\_back\_insert\_iterator}}\& \mbox{\hyperlink{namespacekblib_a22831dce77d5f35c13930b5e30a59f07}{a}},}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00191}00191                          \textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator}{counting\_back\_insert\_iterator}}\& b) \textcolor{keyword}{noexcept}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00192}00192        -\/> std::ptrdiff\_t \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00193}00193       \textcolor{keywordflow}{return} std::ptrdiff\_t(\mbox{\hyperlink{namespacekblib_a22831dce77d5f35c13930b5e30a59f07}{a}}.count) -\/ ptrdiff\_t(b.count);}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00194}00194    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00195}00195 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00196}00196  \textcolor{keyword}{protected}:}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00197}\mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator_a2f651ff51de25df31e9b5de20e0247d0}{00197}}    Container* container = \textcolor{keyword}{nullptr};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00198}\mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator_aafd735c0f6c6b0f9f035be3490b6e101}{00198}}    std::size\_t count = 0;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00199}\mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator_a74f695a1798231be71fb5d980853f71e}{00199}}    \textcolor{keywordtype}{bool} dirty = \textcolor{keyword}{true};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00200}00200 \};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00201}00201 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00202}00202 \textcolor{keyword}{template} <\textcolor{keyword}{typename} C>}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00203}\mbox{\hyperlink{namespacekblib_a459982020db617ac2a1dbd2c3e2345ea}{00203}} \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator}{counting\_back\_insert\_iterator<C>}} \mbox{\hyperlink{namespacekblib_a459982020db617ac2a1dbd2c3e2345ea}{counting\_back\_inserter}}(}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00204}00204     C\& c, std::size\_t count = 0) \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00205}00205    \textcolor{keywordflow}{return} \mbox{\hyperlink{classkblib_1_1counting__back__insert__iterator}{counting\_back\_insert\_iterator<C>}}\{c, count\};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00206}00206 \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00207}00207 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00221}00221 \textcolor{keyword}{template} <\textcolor{keyword}{typename} Value, \textcolor{keyword}{typename} Delta>}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00222}\mbox{\hyperlink{classkblib_1_1range__t}{00222}} \textcolor{keyword}{class }\mbox{\hyperlink{classkblib_1_1range__t}{range\_t}} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00223}00223  \textcolor{keyword}{private}:}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00224}00224    Value \mbox{\hyperlink{namespacekblib_1_1nums_a24555c4b07301e176bf192adf4e80499}{min}}, \mbox{\hyperlink{namespacekblib_1_1nums_a64067ecc4167ce1cfe32860ef5c1dc47}{max}};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00225}00225    Delta step;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00226}00226 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00227}00227    \textcolor{keyword}{constexpr} \textcolor{keyword}{static} \textcolor{keywordtype}{bool} nothrow\_copyable}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00228}00228        = std::is\_nothrow\_copy\_constructible<Value>::value;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00229}00229    \textcolor{keyword}{constexpr} \textcolor{keyword}{static} \textcolor{keywordtype}{bool} nothrow\_steppable = \textcolor{keyword}{noexcept}(\mbox{\hyperlink{namespacekblib_1_1nums_a24555c4b07301e176bf192adf4e80499}{min}} + step);}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00230}00230 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00231}00231  \textcolor{keyword}{public}:}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00240}\mbox{\hyperlink{classkblib_1_1range__t_ae3de19c205331d5a959f14b8eb912ec7}{00240}}    \textcolor{keyword}{constexpr} \mbox{\hyperlink{classkblib_1_1range__t_ae3de19c205331d5a959f14b8eb912ec7}{range\_t}}(Value min\_, Value max\_, Delta step\_ = 1)}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00241}00241        : \mbox{\hyperlink{namespacekblib_1_1nums_a24555c4b07301e176bf192adf4e80499}{min}}(min\_)}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00242}00242        , \mbox{\hyperlink{namespacekblib_1_1nums_a64067ecc4167ce1cfe32860ef5c1dc47}{max}}(max\_)}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00243}00243        , step(step\_) \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00244}00244       normalize();}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00245}00245    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00252}\mbox{\hyperlink{classkblib_1_1range__t_aa5a309c3eb79e6d76d685ecac0caece4}{00252}}    \textcolor{keyword}{constexpr} \mbox{\hyperlink{classkblib_1_1range__t_aa5a309c3eb79e6d76d685ecac0caece4}{range\_t}}(Value max\_)}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00253}00253        : \mbox{\hyperlink{classkblib_1_1range__t}{range\_t}}(Value\{\}, max\_, (max\_ >= Value\{\}) ? 1 : -\/1) \{\}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00254}00254 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00259}\mbox{\hyperlink{structkblib_1_1range__t_1_1iterator}{00259}}    \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1range__t_1_1iterator}{iterator}} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00260}\mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_a30c6d9b456ea99326563157668798ac9}{00260}}       Value \mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_a30c6d9b456ea99326563157668798ac9}{val}};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00261}\mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_ae59bccc6efff736de76994dd18125d9f}{00261}}       Delta \mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_ae59bccc6efff736de76994dd18125d9f}{step}};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00262}00262 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00263}\mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_a914497be54bb426f5de7dfc2a985b846}{00263}}       \textcolor{keyword}{using }\mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_a914497be54bb426f5de7dfc2a985b846}{difference\_type}} = std::ptrdiff\_t;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00264}\mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_a6f406d6d7132255881b1da3191125ca4}{00264}}       \textcolor{keyword}{using }\mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_a6f406d6d7132255881b1da3191125ca4}{value\_type}} = Value;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00265}\mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_a691d420850cb73d644e884a775b4b68f}{00265}}       \textcolor{keyword}{using }\mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_a691d420850cb73d644e884a775b4b68f}{pointer}} = \textcolor{keyword}{const} Value*;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00266}\mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_a682e7449f7f839d3d8206feebfbca69e}{00266}}       \textcolor{keyword}{using }\mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_a682e7449f7f839d3d8206feebfbca69e}{reference}} = Value;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00267}\mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_aeab2334080cd7bd9e381e6ecf13a8587}{00267}}       \textcolor{keyword}{using }\mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_aeab2334080cd7bd9e381e6ecf13a8587}{iterator\_category}} = std::input\_iterator\_tag;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00268}00268 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00274}\mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_a47e782c6accf944706abdafaddc1de83}{00274}}       \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_a47e782c6accf944706abdafaddc1de83}{operator*}}() const noexcept(nothrow\_copyable) -\/> Value \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00275}00275          \textcolor{keywordflow}{return} val;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00276}00276       \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00283}\mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_aa7a0d42e4febc97061160598536943fc}{00283}}       \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_aa7a0d42e4febc97061160598536943fc}{operator-\/>}}() const noexcept -\/> \mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_a691d420850cb73d644e884a775b4b68f}{pointer}} \{ \textcolor{keywordflow}{return} \&val; \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00289}\mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_a96770fb0146a015985e3a49ebcba5f8f}{00289}}       \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_a96770fb0146a015985e3a49ebcba5f8f}{operator++}}() \& \textcolor{keyword}{noexcept}(nothrow\_steppable) -\/> \mbox{\hyperlink{structkblib_1_1range__t_1_1iterator}{iterator}}\& \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00290}00290          val = \textcolor{keyword}{static\_cast<}Value\textcolor{keyword}{>}(val + step);}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00291}00291          \textcolor{keywordflow}{return} *\textcolor{keyword}{this};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00292}00292       \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00299}\mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_a2a4f6e0b5f07b2fc5d9d27f7d48a0ef5}{00299}}       \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_a2a4f6e0b5f07b2fc5d9d27f7d48a0ef5}{operator++}}(\textcolor{keywordtype}{int}) \textcolor{keyword}{noexcept}(nothrow\_steppable) -\/> \mbox{\hyperlink{structkblib_1_1range__t_1_1iterator}{iterator}} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00300}00300          \textcolor{keyword}{auto} ret = *\textcolor{keyword}{this};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00301}00301          val = val + step;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00302}00302          \textcolor{keywordflow}{return} ret;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00303}00303       \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00310}\mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_ae3414fe5601b97423c7c90b08f393ab6}{00310}}       \textcolor{keyword}{constexpr} \textcolor{keyword}{friend} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_ae3414fe5601b97423c7c90b08f393ab6}{operator==}}(\mbox{\hyperlink{structkblib_1_1range__t_1_1iterator}{iterator}} l, \mbox{\hyperlink{structkblib_1_1range__t_1_1iterator}{iterator}} r) \textcolor{keyword}{noexcept}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00311}00311           -\/> \textcolor{keywordtype}{bool} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00312}00312          \textcolor{keywordflow}{return} l.val == r.val and l.step == r.step;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00313}00313       \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00320}\mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_a316eeb0da30d5d2e13e4f74535642c9e}{00320}}       \textcolor{keyword}{constexpr} \textcolor{keyword}{friend} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_a316eeb0da30d5d2e13e4f74535642c9e}{operator!=}}(\mbox{\hyperlink{structkblib_1_1range__t_1_1iterator}{iterator}} l, \mbox{\hyperlink{structkblib_1_1range__t_1_1iterator}{iterator}} r) \textcolor{keyword}{noexcept}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00321}00321           -\/> \textcolor{keywordtype}{bool} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00322}00322          \textcolor{keywordflow}{return} l.val != r.val or l.step != r.step;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00323}00323       \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00330}\mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_a34aba56ce509f4dfa3cf37b8a8de7f4b}{00330}}       \textcolor{keyword}{constexpr} \textcolor{keyword}{friend} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_a34aba56ce509f4dfa3cf37b8a8de7f4b}{operator<}}(\mbox{\hyperlink{structkblib_1_1range__t_1_1iterator}{iterator}} l, \mbox{\hyperlink{structkblib_1_1range__t_1_1iterator}{iterator}} r) \textcolor{keyword}{noexcept} -\/> \textcolor{keywordtype}{bool} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00331}00331          \textcolor{keywordflow}{if} (l.step > 0)}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00332}00332             \textcolor{keywordflow}{return} l.val < r.val;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00333}00333          \textcolor{keywordflow}{else}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00334}00334             \textcolor{keywordflow}{return} l.val > r.val;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00335}00335       \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00342}\mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_a71a14c52ef5888860d2f4886e772e570}{00342}}       \textcolor{keyword}{constexpr} \textcolor{keyword}{friend} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_a71a14c52ef5888860d2f4886e772e570}{operator<=}}(\mbox{\hyperlink{structkblib_1_1range__t_1_1iterator}{iterator}} l, \mbox{\hyperlink{structkblib_1_1range__t_1_1iterator}{iterator}} r) \textcolor{keyword}{noexcept}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00343}00343           -\/> \textcolor{keywordtype}{bool} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00344}00344          \textcolor{keywordflow}{return} not (r < l);}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00345}00345       \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00352}\mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_a24fcdc24ff283706e475458b78987beb}{00352}}       \textcolor{keyword}{constexpr} \textcolor{keyword}{friend} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_a24fcdc24ff283706e475458b78987beb}{operator>}}(\mbox{\hyperlink{structkblib_1_1range__t_1_1iterator}{iterator}} l, \mbox{\hyperlink{structkblib_1_1range__t_1_1iterator}{iterator}} r) \textcolor{keyword}{noexcept} -\/> \textcolor{keywordtype}{bool} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00353}00353          \textcolor{keywordflow}{return} r < l;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00354}00354       \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00361}\mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_a574d1c5a42025e001b54abb21ce3a2ba}{00361}}       \textcolor{keyword}{constexpr} \textcolor{keyword}{friend} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_a574d1c5a42025e001b54abb21ce3a2ba}{operator>=}}(\mbox{\hyperlink{structkblib_1_1range__t_1_1iterator}{iterator}} l, \mbox{\hyperlink{structkblib_1_1range__t_1_1iterator}{iterator}} r) \textcolor{keyword}{noexcept}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00362}00362           -\/> \textcolor{keywordtype}{bool} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00363}00363          \textcolor{keywordflow}{return} not (l < r);}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00364}00364       \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00365}\mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_a6a97b4c20d4c8e0f19665daf80c9014d}{00365}}       \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_a6a97b4c20d4c8e0f19665daf80c9014d}{operator[]}}(std::ptrdiff\_t x) \textcolor{keyword}{const} \textcolor{keyword}{noexcept} -\/> Value \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00366}00366          \textcolor{keywordflow}{return} \textcolor{keyword}{static\_cast<}Value\textcolor{keyword}{>}(val + x * step);}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00367}00367       \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00368}00368       \textcolor{keyword}{template} <\textcolor{keyword}{typename} Integral>}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00369}\mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_a27cc85ac03fa74faf1a533d8f10cf20d}{00369}}       \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_a27cc85ac03fa74faf1a533d8f10cf20d}{operator[]}}(Integral x) \textcolor{keyword}{const} \textcolor{keyword}{noexcept} -\/> Value \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00370}00370          \textcolor{keywordflow}{return} \textcolor{keyword}{static\_cast<}Value\textcolor{keyword}{>}(val + std::ptrdiff\_t(x) * step);}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00371}00371       \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00372}00372    \};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00373}00373 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00377}\mbox{\hyperlink{classkblib_1_1range__t_ad99bfa41676f9181d7597fb21a8b1ed2}{00377}}    \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1range__t_ad99bfa41676f9181d7597fb21a8b1ed2}{begin}}() const noexcept -\/> \mbox{\hyperlink{structkblib_1_1range__t_1_1iterator}{iterator}} \{ \textcolor{keywordflow}{return} \{\mbox{\hyperlink{namespacekblib_1_1nums_a24555c4b07301e176bf192adf4e80499}{min}}, step\}; \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00381}\mbox{\hyperlink{classkblib_1_1range__t_a622a7bd9c78e511f70a3dd229871bad1}{00381}}    \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1range__t_a622a7bd9c78e511f70a3dd229871bad1}{end}}() const noexcept -\/> \mbox{\hyperlink{structkblib_1_1range__t_1_1iterator}{iterator}} \{ \textcolor{keywordflow}{return} \{\mbox{\hyperlink{namespacekblib_1_1nums_a64067ecc4167ce1cfe32860ef5c1dc47}{max}}, step\}; \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00382}00382 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00386}\mbox{\hyperlink{classkblib_1_1range__t_aa16e18d4ea94674c40e7c33586b4a9de}{00386}}    \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1range__t_aa16e18d4ea94674c40e7c33586b4a9de}{size}}() const noexcept -\/> \mbox{\hyperlink{namespacestd}{std}}::\textcolor{keywordtype}{size\_t} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00387}00387       \textcolor{keywordflow}{return} \textcolor{keyword}{static\_cast<}std::size\_t\textcolor{keyword}{>}(std::abs(\mbox{\hyperlink{namespacekblib_1_1nums_a64067ecc4167ce1cfe32860ef5c1dc47}{max}} -\/ \mbox{\hyperlink{namespacekblib_1_1nums_a24555c4b07301e176bf192adf4e80499}{min}}) / step);}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00388}00388    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00389}00389 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00393}\mbox{\hyperlink{classkblib_1_1range__t_a40a7672ee50f6f1823e177d674df8a4c}{00393}}    \textcolor{keyword}{friend} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1range__t_a40a7672ee50f6f1823e177d674df8a4c}{begin}}(\textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1range__t}{range\_t}}\& r) \textcolor{keyword}{noexcept} -\/> \mbox{\hyperlink{structkblib_1_1range__t_1_1iterator}{iterator}} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00394}00394       \textcolor{keywordflow}{return} \{r.min, r.\mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_ae59bccc6efff736de76994dd18125d9f}{step}}\};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00395}00395    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00399}\mbox{\hyperlink{classkblib_1_1range__t_a725f198750193671043f4a1ce06547e1}{00399}}    \textcolor{keyword}{friend} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1range__t_a725f198750193671043f4a1ce06547e1}{end}}(\textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1range__t}{range\_t}}\& r) \textcolor{keyword}{noexcept} -\/> \mbox{\hyperlink{structkblib_1_1range__t_1_1iterator}{iterator}} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00400}00400       \textcolor{keywordflow}{return} \{r.max, r.\mbox{\hyperlink{structkblib_1_1range__t_1_1iterator_ae59bccc6efff736de76994dd18125d9f}{step}}\};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00401}00401    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00402}00402 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00406}\mbox{\hyperlink{classkblib_1_1range__t_a1bc83d205dc56fe68f676e7f23c09f60}{00406}}    \textcolor{keyword}{friend} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1range__t_a1bc83d205dc56fe68f676e7f23c09f60}{size}}(\textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1range__t}{range\_t}}\& r) \textcolor{keyword}{noexcept} -\/> std::size\_t \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00407}00407       \textcolor{keywordflow}{return} (r.max -\/ r.min) / r.step;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00408}00408    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00409}00409 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00413}\mbox{\hyperlink{classkblib_1_1range__t_a97e080e5dba3337466df2f2cbed97cee}{00413}}    \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1range__t_a97e080e5dba3337466df2f2cbed97cee}{empty}}() const noexcept -\/> \textcolor{keywordtype}{bool} \{ \textcolor{keywordflow}{return} \mbox{\hyperlink{namespacekblib_1_1fakestd_adb8781bc0e5d1ba4ca4624293c0c98ae}{size}}() == 0; \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00414}00414 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00415}00415    \textcolor{keyword}{template} <\textcolor{keyword}{typename} Integral>}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00416}\mbox{\hyperlink{classkblib_1_1range__t_a277f45f3498f7cdac0e3f1852e89d89b}{00416}}    \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1range__t_a277f45f3498f7cdac0e3f1852e89d89b}{operator[]}}(Integral x) \textcolor{keyword}{const} \textcolor{keyword}{noexcept}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00417}00417        -\/> \textcolor{keyword}{decltype}(begin()[x]) \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00418}00418       \textcolor{keywordflow}{return} begin()[x];}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00419}00419    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00420}00420 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00421}\mbox{\hyperlink{classkblib_1_1range__t_a4e3345239799479144706b6e75ec32db}{00421}}    \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1range__t_a4e3345239799479144706b6e75ec32db}{lesser}}() const noexcept(nothrow\_copyable) -\/> Value \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00422}00422       \textcolor{keywordflow}{return} (step > 0) ? \mbox{\hyperlink{namespacekblib_1_1nums_a64067ecc4167ce1cfe32860ef5c1dc47}{max}} : \mbox{\hyperlink{namespacekblib_1_1nums_a24555c4b07301e176bf192adf4e80499}{min}};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00423}00423    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00424}00424 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00425}\mbox{\hyperlink{classkblib_1_1range__t_a9b4773530795da0c585118301ccbe703}{00425}}    \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1range__t_a9b4773530795da0c585118301ccbe703}{greater}}() const noexcept(nothrow\_copyable) -\/> Value \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00426}00426       \textcolor{keywordflow}{return} (step > 0) ? \mbox{\hyperlink{namespacekblib_1_1nums_a24555c4b07301e176bf192adf4e80499}{min}} : \mbox{\hyperlink{namespacekblib_1_1nums_a64067ecc4167ce1cfe32860ef5c1dc47}{max}};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00427}00427    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00428}00428 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00432}00432    \textcolor{keyword}{template} <}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00433}00433        \textcolor{keyword}{typename} Container,}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00434}00434        \mbox{\hyperlink{namespacekblib_a366272ad8baad19be4ccf8128afb04a3}{enable\_if\_t}}<}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00435}00435            is\_linear\_container\_v<}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00436}00436                Container> and std::is\_constructible<Container, iterator, iterator>::value>* = \textcolor{keyword}{nullptr}>}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00437}\mbox{\hyperlink{classkblib_1_1range__t_a339ff51d207ffdcdf390f60b80b554bc}{00437}}    \textcolor{keyword}{explicit} \textcolor{keyword}{operator} Container() const}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00438}00438        noexcept(noexcept(Container(\mbox{\hyperlink{namespacestd}{std}}::declval<\mbox{\hyperlink{structkblib_1_1range__t_1_1iterator}{iterator}}>(),}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00439}00439                                    \mbox{\hyperlink{namespacestd}{std}}::declval<\mbox{\hyperlink{structkblib_1_1range__t_1_1iterator}{iterator}}>()))) \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00440}00440       \textcolor{keywordflow}{return} Container(begin(), end());}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00441}00441    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00442}00442 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00446}00446    \textcolor{keyword}{template} <}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00447}00447        \textcolor{keyword}{typename} Container,}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00448}00448        \mbox{\hyperlink{namespacekblib_a366272ad8baad19be4ccf8128afb04a3}{enable\_if\_t}}<}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00449}00449            is\_setlike\_v<}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00450}00450                Container> and std::is\_constructible<Container, iterator, iterator>::value>* = \textcolor{keyword}{nullptr}>}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00451}\mbox{\hyperlink{classkblib_1_1range__t_a339ff51d207ffdcdf390f60b80b554bc}{00451}}    \textcolor{keyword}{explicit} \textcolor{keyword}{operator} Container() const}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00452}00452        noexcept(noexcept(Container(\mbox{\hyperlink{namespacestd}{std}}::declval<\mbox{\hyperlink{structkblib_1_1range__t_1_1iterator}{iterator}}>(),}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00453}00453                                    \mbox{\hyperlink{namespacestd}{std}}::declval<\mbox{\hyperlink{structkblib_1_1range__t_1_1iterator}{iterator}}>()))) \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00454}00454       \textcolor{keywordflow}{return} Container(begin(), end());}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00455}00455    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00456}00456 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00462}\mbox{\hyperlink{classkblib_1_1range__t_ab49e34be5a3c024d4c978c02b30a8e8c}{00462}}    \textcolor{keyword}{constexpr} \textcolor{keyword}{friend} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1range__t_ab49e34be5a3c024d4c978c02b30a8e8c}{operator==}}(\mbox{\hyperlink{classkblib_1_1range__t}{range\_t}} l, \mbox{\hyperlink{classkblib_1_1range__t}{range\_t}} r) \textcolor{keyword}{noexcept} -\/> \textcolor{keywordtype}{bool} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00463}00463       \textcolor{keywordflow}{return} (l.empty() and r.empty())}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00464}00464              or ((l.begin() == r.begin()) and (l.end() == r.end())}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00465}00465                  and (l.step == r.step));}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00466}00466    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00472}\mbox{\hyperlink{classkblib_1_1range__t_abbaa2e24023c9366928dd4b5473db026}{00472}}    \textcolor{keyword}{constexpr} \textcolor{keyword}{friend} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1range__t_abbaa2e24023c9366928dd4b5473db026}{operator!=}}(\mbox{\hyperlink{classkblib_1_1range__t}{range\_t}} l, \mbox{\hyperlink{classkblib_1_1range__t}{range\_t}} r) \textcolor{keyword}{noexcept} -\/> \textcolor{keywordtype}{bool} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00473}00473       \textcolor{keywordflow}{return} not (l == r);}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00474}00474    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00475}00475 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00476}00476  \textcolor{keyword}{private}:}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00477}00477    \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00478}00478    \textcolor{keyword}{static} \textcolor{keyword}{constexpr} \mbox{\hyperlink{namespacekblib_a366272ad8baad19be4ccf8128afb04a3}{enable\_if\_t<not std::is\_signed<T>::value}}, std::true\_type>}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00479}00479    positive(\textcolor{keyword}{const} T\&) \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00480}00480       \textcolor{keywordflow}{return} \{\};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00481}00481    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00482}00482    \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00483}00483    \textcolor{keyword}{static} \textcolor{keyword}{constexpr} enable\_if\_t<std::is\_signed<T>::value, \textcolor{keywordtype}{bool}> positive(T v) \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00484}00484       \textcolor{keywordflow}{return} v >= 0;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00485}00485    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00486}00486    \textcolor{keyword}{template} <\textcolor{keyword}{typename} R, \textcolor{keyword}{typename} T,}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00487}00487              enable\_if\_t<std::is\_integral<R>::value}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00488}00488                          and std::is\_integral<T>::value>* = \textcolor{keyword}{nullptr}>}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00489}00489    \textcolor{keyword}{static} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{namespacekblib_accb66942cbfbca80c254045501c96cc9}{signed\_cast}}(T v) \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00490}00490       \textcolor{keywordflow}{return} kblib::signed\_cast<R>(v);}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00491}00491    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00492}00492    \textcolor{keyword}{template} <\textcolor{keyword}{typename} R, \textcolor{keyword}{typename} T,}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00493}00493              \mbox{\hyperlink{namespacekblib_a366272ad8baad19be4ccf8128afb04a3}{enable\_if\_t}}<not (std::is\_integral<R>::value}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00494}00494                               and std::is\_integral<T>::value)>* = \textcolor{keyword}{nullptr}>}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00495}00495    \textcolor{keyword}{static} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{namespacekblib_accb66942cbfbca80c254045501c96cc9}{signed\_cast}}(T v) \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00496}00496       \textcolor{keywordflow}{return} v;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00497}00497    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00498}00498 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00499}00499    \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} normalize() noexcept(nothrow\_steppable) -\/> \textcolor{keywordtype}{void} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00500}00500       \textcolor{keywordflow}{if} (\mbox{\hyperlink{namespacekblib_1_1nums_a24555c4b07301e176bf192adf4e80499}{min}} == \mbox{\hyperlink{namespacekblib_1_1nums_a64067ecc4167ce1cfe32860ef5c1dc47}{max}}) \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00501}00501       \} \textcolor{keywordflow}{else} \textcolor{keywordflow}{if} (step == 0) \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00502}00502          \textcolor{keywordflow}{if} (\mbox{\hyperlink{namespacekblib_1_1nums_a24555c4b07301e176bf192adf4e80499}{min}} != \mbox{\hyperlink{namespacekblib_1_1nums_a64067ecc4167ce1cfe32860ef5c1dc47}{std::numeric\_limits<Value>::max}}()) \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00503}00503             \mbox{\hyperlink{namespacekblib_1_1nums_a64067ecc4167ce1cfe32860ef5c1dc47}{max}} = \mbox{\hyperlink{namespacekblib_1_1nums_a24555c4b07301e176bf192adf4e80499}{min}} + 1;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00504}00504          \} \textcolor{keywordflow}{else} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00505}00505             \mbox{\hyperlink{namespacekblib_1_1nums_a64067ecc4167ce1cfe32860ef5c1dc47}{max}} = \mbox{\hyperlink{namespacekblib_1_1nums_a24555c4b07301e176bf192adf4e80499}{min}} -\/ 1;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00506}00506          \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00507}00507       \} \textcolor{keywordflow}{else} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00508}00508 \textcolor{preprocessor}{\#pragma GCC diagnostic push}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00509}00509 \textcolor{preprocessor}{\#pragma GCC diagnostic ignored "{}-\/Wsign-\/conversion"{}}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00510}00510 \textcolor{preprocessor}{\#pragma GCC diagnostic ignored "{}-\/Wconversion"{}}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00511}00511 \textcolor{preprocessor}{\#pragma GCC diagnostic ignored "{}-\/Wsign-\/compare"{}}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00512}00512 \textcolor{preprocessor}{\#pragma GCC diagnostic ignored "{}-\/Wimplicit-\/int-\/conversion"{}}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00513}00513 \textcolor{preprocessor}{\#pragma GCC diagnostic ignored "{}-\/Wshorten-\/64-\/to-\/32"{}}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00514}00514          \textcolor{keyword}{auto} difference = \mbox{\hyperlink{namespacekblib_1_1nums_a64067ecc4167ce1cfe32860ef5c1dc47}{max}} -\/ \mbox{\hyperlink{namespacekblib_1_1nums_a24555c4b07301e176bf192adf4e80499}{min}};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00515}00515          std::ptrdiff\_t sign = (step > 0) ? 1 : -\/1;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00516}00516          \textcolor{keywordflow}{if} ((sign * \mbox{\hyperlink{namespacekblib_a1909a64960663825ccc4eb98e4637df2}{to\_signed}}(difference)) <= (sign * step)) \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00517}00517             step = sign;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00518}00518             \mbox{\hyperlink{namespacekblib_1_1nums_a64067ecc4167ce1cfe32860ef5c1dc47}{max}} = \mbox{\hyperlink{namespacekblib_1_1nums_a24555c4b07301e176bf192adf4e80499}{min}} + step;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00519}00519          \} \textcolor{keywordflow}{else} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00520}00520             \textcolor{keyword}{auto} remainder = difference \% step;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00521}00521             \textcolor{keywordflow}{if} (remainder != 0) \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00522}00522                \mbox{\hyperlink{namespacekblib_1_1nums_a64067ecc4167ce1cfe32860ef5c1dc47}{max}} = \mbox{\hyperlink{namespacekblib_1_1nums_a64067ecc4167ce1cfe32860ef5c1dc47}{max}} -\/ remainder;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00523}00523                assert(not (positive(\mbox{\hyperlink{namespacekblib_1_1nums_a64067ecc4167ce1cfe32860ef5c1dc47}{max}})}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00524}00524                            and (signed\_cast<Delta>(}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00525}00525                                     \mbox{\hyperlink{namespacekblib_1_1nums_a64067ecc4167ce1cfe32860ef5c1dc47}{std::numeric\_limits<Value>::max}}() -\/ \mbox{\hyperlink{namespacekblib_1_1nums_a64067ecc4167ce1cfe32860ef5c1dc47}{max}})}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00526}00526                                 < step)));}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00527}00527                \mbox{\hyperlink{namespacekblib_1_1nums_a64067ecc4167ce1cfe32860ef5c1dc47}{max}} = \mbox{\hyperlink{namespacekblib_1_1nums_a64067ecc4167ce1cfe32860ef5c1dc47}{max}} + step;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00528}00528             \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00529}00529          \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00530}00530 \textcolor{preprocessor}{\#pragma GCC diagnostic pop}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00531}00531       \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00532}00532    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00533}00533 \};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00534}00534 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00535}\mbox{\hyperlink{namespacekblib_1_1detail__iterators}{00535}} \textcolor{keyword}{namespace }detail\_iterators \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00536}00536    \textcolor{keyword}{template} <\textcolor{keyword}{typename} T, \textcolor{keyword}{typename} U, \textcolor{keyword}{typename} = \textcolor{keywordtype}{void}>}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00537}\mbox{\hyperlink{structkblib_1_1detail__iterators_1_1is__addable}{00537}}    \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1detail__iterators_1_1is__addable}{is\_addable}} : std::false\_type \{\};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00538}00538 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00539}00539    \textcolor{keyword}{template} <\textcolor{keyword}{typename} T, \textcolor{keyword}{typename} U>}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00540}\mbox{\hyperlink{structkblib_1_1detail__iterators_1_1is__addable_3_01_t_00_01_u_00_01void__t_3_01decltype_07std_154f3f86b521bad5734a3fe6bbf63c54f}{00540}}    \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1detail__iterators_1_1is__addable}{is\_addable}}<T, U,}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00541}00541                      \mbox{\hyperlink{namespacekblib_1_1fakestd_a2df414d5a1a1f59c8f33520890755f84}{void\_t}}<decltype(\mbox{\hyperlink{namespacestd}{std}}::declval<T\&>() + std::declval<U\&>())>>}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00542}00542        : std::true\_type \{\};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00543}00543 \} \textcolor{comment}{// namespace detail\_iterators}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00544}00544 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00545}\mbox{\hyperlink{structkblib_1_1adjuster}{00545}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1adjuster}{adjuster}} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00546}\mbox{\hyperlink{structkblib_1_1adjuster_a9c5245dad8f70a17fe352274bec753dc}{00546}}    std::ptrdiff\_t \mbox{\hyperlink{structkblib_1_1adjuster_a9c5245dad8f70a17fe352274bec753dc}{adj}};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00547}\mbox{\hyperlink{structkblib_1_1adjuster_a2d023cea34c7cb293f9e2c23b076d0d3}{00547}}    \textcolor{keyword}{constexpr} \mbox{\hyperlink{structkblib_1_1adjuster_a2d023cea34c7cb293f9e2c23b076d0d3}{adjuster}}(std::ptrdiff\_t adj\_) noexcept}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00548}00548        : adj(adj\_) \{\}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00549}\mbox{\hyperlink{structkblib_1_1adjuster_a6b7f68c785f836428eb8629a9491b8f9}{00549}}    \textcolor{keyword}{constexpr} \textcolor{keyword}{operator} std::ptrdiff\_t() const noexcept \{ \textcolor{keywordflow}{return} adj; \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00550}00550 \};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00551}00551 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00552}00552 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00553}\mbox{\hyperlink{namespacekblib_a5127cbe40846f5ab2a05694de92d3d2e}{00553}} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{namespacekblib_ab8c4154f71801dac0f43dcb2e1869e8b}{operator+}}(T val, \mbox{\hyperlink{structkblib_1_1adjuster}{adjuster}} \mbox{\hyperlink{namespacekblib_a22831dce77d5f35c13930b5e30a59f07}{a}}) \textcolor{keyword}{noexcept}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00554}00554     -\/> \mbox{\hyperlink{namespacekblib_a366272ad8baad19be4ccf8128afb04a3}{enable\_if\_t<not detail\_iterators::is\_addable<T, std::ptrdiff\_t>::value}},}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00555}00555                    \textcolor{keyword}{decltype}(std::advance(val, \mbox{\hyperlink{namespacekblib_a22831dce77d5f35c13930b5e30a59f07}{a}}.adj))> \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00556}00556    \textcolor{keywordflow}{return} std::advance(val, \mbox{\hyperlink{namespacekblib_a22831dce77d5f35c13930b5e30a59f07}{a}}.adj);}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00557}00557 \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00558}00558 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00563}\mbox{\hyperlink{structkblib_1_1incrementer}{00563}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1incrementer}{incrementer}} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00564}\mbox{\hyperlink{structkblib_1_1incrementer_a6e22ffadc3504ed1c26f719c37dee0da}{00564}}    \textcolor{keyword}{constexpr} \mbox{\hyperlink{structkblib_1_1incrementer_a6e22ffadc3504ed1c26f719c37dee0da}{incrementer}}() noexcept = default;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00565}\mbox{\hyperlink{structkblib_1_1incrementer_a830bff4684dd37096b898cb4bc721dd4}{00565}}    constexpr \mbox{\hyperlink{structkblib_1_1incrementer}{incrementer}}(\textcolor{keywordtype}{int}) noexcept \{\}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00566}\mbox{\hyperlink{structkblib_1_1incrementer_a89cc6962471129551334b307f1e5c9e1}{00566}}    \textcolor{keyword}{constexpr} \textcolor{keyword}{operator} int() const noexcept \{ \textcolor{keywordflow}{return} 1; \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00567}\mbox{\hyperlink{structkblib_1_1incrementer_ac5650dea10eb78921b499895d9e352c1}{00567}}    \textcolor{keyword}{friend} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1incrementer_ac5650dea10eb78921b499895d9e352c1}{operator*}}(std::ptrdiff\_t x, \mbox{\hyperlink{structkblib_1_1incrementer}{incrementer}}) \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00568}00568       \textcolor{keywordflow}{return} \mbox{\hyperlink{structkblib_1_1adjuster}{adjuster}}\{x\};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00569}00569    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00570}00570 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00571}00571    \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00572}\mbox{\hyperlink{structkblib_1_1incrementer_aaa867d341b158ed46a8bdc6b525fe159}{00572}}    \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1incrementer_aaa867d341b158ed46a8bdc6b525fe159}{operator()}}(T\& t) -\/> T\& \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00573}00573       \textcolor{keywordflow}{return} ++t;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00574}00574    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00575}00575 \};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00576}00576 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00580}00580 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00581}\mbox{\hyperlink{namespacekblib_ab797e9d5c5989c277312518fc95667ae}{00581}} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{namespacekblib_ab8c4154f71801dac0f43dcb2e1869e8b}{operator+}}(T val, \mbox{\hyperlink{structkblib_1_1incrementer}{incrementer}}) -\/> T \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00582}00582    \textcolor{keywordflow}{return} ++val;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00583}00583 \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00584}00584 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00589}\mbox{\hyperlink{structkblib_1_1decrementer}{00589}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1decrementer}{decrementer}} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00590}\mbox{\hyperlink{structkblib_1_1decrementer_a9d51ac86883ff3161020304f31a65004}{00590}}    \textcolor{keyword}{constexpr} \mbox{\hyperlink{structkblib_1_1decrementer_a9d51ac86883ff3161020304f31a65004}{decrementer}}() noexcept = default;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00591}\mbox{\hyperlink{structkblib_1_1decrementer_a0238f259021b327a61e7e08c919f7b6b}{00591}}    constexpr \mbox{\hyperlink{structkblib_1_1decrementer}{decrementer}}(\textcolor{keywordtype}{int}) noexcept \{\}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00592}\mbox{\hyperlink{structkblib_1_1decrementer_a040c6a4307291cba6da8b9e0be914cb4}{00592}}    \textcolor{keyword}{constexpr} \textcolor{keyword}{operator} int() const noexcept \{ \textcolor{keywordflow}{return} -\/1; \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00593}\mbox{\hyperlink{structkblib_1_1decrementer_a2bd9f4a70b2024ae47fe726eedb33faf}{00593}}    \textcolor{keyword}{friend} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1decrementer_a2bd9f4a70b2024ae47fe726eedb33faf}{operator*}}(std::ptrdiff\_t x, \mbox{\hyperlink{structkblib_1_1decrementer}{decrementer}}) \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00594}00594       \textcolor{keywordflow}{return} \mbox{\hyperlink{structkblib_1_1adjuster}{adjuster}}\{-\/x\};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00595}00595    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00596}00596    \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00597}\mbox{\hyperlink{structkblib_1_1decrementer_aadf94708e26cb234eace1fd2e8054a06}{00597}}    \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1decrementer_aadf94708e26cb234eace1fd2e8054a06}{operator()}}(T\& t) -\/> T\& \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00598}00598       \textcolor{keywordflow}{return} -\/-\/t;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00599}00599    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00600}00600 \};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00601}00601 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00605}00605 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00606}\mbox{\hyperlink{namespacekblib_ab8c4154f71801dac0f43dcb2e1869e8b}{00606}} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{namespacekblib_ab8c4154f71801dac0f43dcb2e1869e8b}{operator+}}(T val, \mbox{\hyperlink{structkblib_1_1decrementer}{decrementer}}) -\/> T \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00607}00607    \textcolor{keywordflow}{return} -\/-\/val;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00608}00608 \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00609}00609 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00620}00620 \textcolor{keyword}{template} <\textcolor{keyword}{typename} Value, \textcolor{keyword}{typename} Delta = \textcolor{keywordtype}{int}>}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00621}\mbox{\hyperlink{namespacekblib_a72690688922a2d4ae9a3e46ff0c1a9a9}{00621}} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{namespacekblib_ac136a707b14a83235d82c267830f0cd9}{range}}(Value \mbox{\hyperlink{namespacekblib_1_1nums_a24555c4b07301e176bf192adf4e80499}{min}}, Value \mbox{\hyperlink{namespacekblib_1_1nums_a64067ecc4167ce1cfe32860ef5c1dc47}{max}}, Delta step = 0)}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00622}00622     -\/> \mbox{\hyperlink{classkblib_1_1range__t}{range\_t<Value, Delta>}} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00623}00623    \textcolor{keywordflow}{if} (step == 0) \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00624}00624       \textcolor{keywordflow}{if} (\mbox{\hyperlink{namespacekblib_1_1nums_a24555c4b07301e176bf192adf4e80499}{min}} <= \mbox{\hyperlink{namespacekblib_1_1nums_a64067ecc4167ce1cfe32860ef5c1dc47}{max}}) \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00625}00625          \textcolor{keywordflow}{return} \{\mbox{\hyperlink{namespacekblib_1_1nums_a24555c4b07301e176bf192adf4e80499}{min}}, \mbox{\hyperlink{namespacekblib_1_1nums_a64067ecc4167ce1cfe32860ef5c1dc47}{max}}, 1\};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00626}00626       \} \textcolor{keywordflow}{else} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00627}00627          \textcolor{keywordflow}{return} \{\mbox{\hyperlink{namespacekblib_1_1nums_a24555c4b07301e176bf192adf4e80499}{min}}, \mbox{\hyperlink{namespacekblib_1_1nums_a64067ecc4167ce1cfe32860ef5c1dc47}{max}}, -\/1\};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00628}00628       \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00629}00629    \} \textcolor{keywordflow}{else} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00630}00630       \textcolor{keywordflow}{return} \{\mbox{\hyperlink{namespacekblib_1_1nums_a24555c4b07301e176bf192adf4e80499}{min}}, \mbox{\hyperlink{namespacekblib_1_1nums_a64067ecc4167ce1cfe32860ef5c1dc47}{max}}, step\};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00631}00631    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00632}00632 \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00633}00633 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00641}00641 \textcolor{keyword}{template} <\textcolor{keyword}{typename} Value>}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00642}\mbox{\hyperlink{namespacekblib_ac136a707b14a83235d82c267830f0cd9}{00642}} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{namespacekblib_ac136a707b14a83235d82c267830f0cd9}{range}}(Value \mbox{\hyperlink{namespacekblib_1_1nums_a64067ecc4167ce1cfe32860ef5c1dc47}{max}}) -\/> \mbox{\hyperlink{classkblib_1_1range__t}{range\_t<Value, incrementer>}} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00643}00643    \textcolor{keywordflow}{return} \{\mbox{\hyperlink{namespacekblib_1_1nums_a64067ecc4167ce1cfe32860ef5c1dc47}{max}}\};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00644}00644 \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00645}00645 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00646}00646 \textcolor{preprocessor}{\#if KBLIB\_USE\_CXX17}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00647}00647 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00648}00648 \textcolor{keyword}{template} <\textcolor{keyword}{typename} Value, \textcolor{keyword}{typename} Delta>}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00649}\mbox{\hyperlink{classkblib_1_1irange__t}{00649}} \textcolor{keyword}{class }\mbox{\hyperlink{classkblib_1_1irange__t}{irange\_t}} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00650}00650  \textcolor{keyword}{public}:}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00651}\mbox{\hyperlink{classkblib_1_1irange__t_a51e845a7e877768715aeb6e56758b2b6}{00651}}    Value \mbox{\hyperlink{namespacekblib_1_1nums_a24555c4b07301e176bf192adf4e80499}{min}}, \mbox{\hyperlink{classkblib_1_1irange__t_a51e845a7e877768715aeb6e56758b2b6}{max}};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00652}\mbox{\hyperlink{classkblib_1_1irange__t_a2099a40174e590953d93b5adeeeb36f3}{00652}}    Delta \mbox{\hyperlink{classkblib_1_1irange__t_a2099a40174e590953d93b5adeeeb36f3}{step}};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00653}00653 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00654}\mbox{\hyperlink{classkblib_1_1irange__t_a743c4292094d77c648a3c9781c62e1ed}{00654}}    \textcolor{keyword}{constexpr} \textcolor{keyword}{static} \textcolor{keywordtype}{bool} nothrow\_copyable}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00655}00655        = std::is\_nothrow\_copy\_constructible<Value>::value;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00656}\mbox{\hyperlink{classkblib_1_1irange__t_affa30cf3b7882ba17e2ef75d6c93f617}{00656}}    \textcolor{keyword}{constexpr} \textcolor{keyword}{static} \textcolor{keywordtype}{bool} nothrow\_steppable = \textcolor{keyword}{noexcept}(\mbox{\hyperlink{namespacekblib_1_1nums_a24555c4b07301e176bf192adf4e80499}{min}} + step);}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00657}00657 \};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00658}00658 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00659}00659 \textcolor{keyword}{template} <\textcolor{keyword}{typename} Value, \textcolor{keyword}{typename} Delta = \textcolor{keywordtype}{int}>}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00660}\mbox{\hyperlink{namespacekblib_a75ac0367cce25b0498451e5e5c711297}{00660}} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{namespacekblib_a75ac0367cce25b0498451e5e5c711297}{irange}}(Value, Value, Delta = 0) \{\}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00661}00661 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00662}00662 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00663}00663 \textcolor{keyword}{class }enumerator\_iterator;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00664}00664 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00668}\mbox{\hyperlink{namespacekblib_1_1detail__enumerate}{00668}} \textcolor{keyword}{namespace }detail\_enumerate \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00669}00669 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00670}00670    \textcolor{keyword}{template} <\textcolor{keyword}{typename} T1, \textcolor{keyword}{typename} T2>}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00671}\mbox{\hyperlink{namespacekblib_1_1detail__enumerate_ac4e2d91f1419790b70ee4fcc9ba0fdff}{00671}}    \textcolor{keyword}{auto} \mbox{\hyperlink{namespacekblib_1_1detail__enumerate_ac4e2d91f1419790b70ee4fcc9ba0fdff}{get\_or}}(T1\&\& t1, T2\&\& t2) -\/> \textcolor{keyword}{decltype}(\textcolor{keyword}{auto}) \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00672}00672       \textcolor{keywordflow}{return} t1 ? *t1 : *t2;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00673}00673    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00674}00674 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00675}\mbox{\hyperlink{structkblib_1_1detail__enumerate_1_1force__copy__tag}{00675}}    \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1detail__enumerate_1_1force__copy__tag}{force\_copy\_tag}} \{\};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00676}00676    \textcolor{comment}{// Get a pointer which is guaranteed to be invalid to use (but not UB to}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00677}00677    \textcolor{comment}{// merely store)}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00678}00678    \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00679}\mbox{\hyperlink{namespacekblib_1_1detail__enumerate_a01999a441ce3915f1d6c2c85b6f650d4}{00679}}    \textcolor{keyword}{auto} \mbox{\hyperlink{namespacekblib_1_1detail__enumerate_a01999a441ce3915f1d6c2c85b6f650d4}{get\_magic\_ptr}}() -\/> T* \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00680}00680       \textcolor{keyword}{static} \textcolor{keyword}{const} \textcolor{keywordtype}{char} enumeration\_magic\_pointer = \textcolor{charliteral}{'\(\backslash\)0'};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00681}00681       \textcolor{keywordflow}{return} \textcolor{keyword}{reinterpret\_cast<}T*\textcolor{keyword}{>}(}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00682}00682           \textcolor{keyword}{const\_cast<}\textcolor{keywordtype}{char}*\textcolor{keyword}{>}(\&enumeration\_magic\_pointer));}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00683}00683    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00684}00684 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00685}00685 \} \textcolor{comment}{// namespace detail\_enumerate}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00686}00686 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00687}00687 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00688}\mbox{\hyperlink{classkblib_1_1enumeration}{00688}} \textcolor{keyword}{class }\mbox{\hyperlink{classkblib_1_1enumeration}{enumeration}} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00689}00689  \textcolor{keyword}{public}:}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00690}\mbox{\hyperlink{classkblib_1_1enumeration_a9f1a9a31f43193c68dafbec43428515b}{00690}}    \mbox{\hyperlink{classkblib_1_1enumeration_a9f1a9a31f43193c68dafbec43428515b}{enumeration}}() = \textcolor{keywordflow}{default};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00691}00691 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00692}\mbox{\hyperlink{classkblib_1_1enumeration_a9a7e10caa6fa6995d4910165c0bdd782}{00692}}    \mbox{\hyperlink{classkblib_1_1enumeration_a9a7e10caa6fa6995d4910165c0bdd782}{enumeration}}(\textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1enumeration}{enumeration}}\& other)}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00693}00693        : idx(other.idx)}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00694}00694        , local([\&] \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00695}00695           assert(other.source or other.local);}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00696}00696           assert(other.source != detail\_enumerate::get\_magic\_ptr<T>());}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00697}00697           \textcolor{keywordflow}{return} other.\mbox{\hyperlink{classkblib_1_1enumeration_a0db1eb096e86386ef5498ea248b7d966}{copied}}();}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00698}00698        \}())}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00699}00699        , source(\textcolor{keyword}{nullptr}) \{\}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00700}\mbox{\hyperlink{classkblib_1_1enumeration_a48dea8dc9b7305c9d5ac11f97801754b}{00700}}    \mbox{\hyperlink{classkblib_1_1enumeration_a48dea8dc9b7305c9d5ac11f97801754b}{enumeration}}(\textcolor{keyword}{volatile} \mbox{\hyperlink{classkblib_1_1enumeration}{enumeration}}\& other)}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00701}00701        : \mbox{\hyperlink{classkblib_1_1enumeration}{enumeration}}(const\_cast<const \mbox{\hyperlink{classkblib_1_1enumeration}{enumeration}}\&>(other)) \{\}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00702}00702 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00703}\mbox{\hyperlink{classkblib_1_1enumeration_ac46ce62229fc0860d76b45a334cdbdcb}{00703}}    \mbox{\hyperlink{classkblib_1_1enumeration_ac46ce62229fc0860d76b45a334cdbdcb}{enumeration}}(\mbox{\hyperlink{classkblib_1_1enumeration}{enumeration}}\&\&) = \textcolor{keyword}{delete};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00704}\mbox{\hyperlink{classkblib_1_1enumeration_a0207f4c0d30bcd3ea31f6dd735086722}{00704}}    \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1enumeration_a0207f4c0d30bcd3ea31f6dd735086722}{operator=}}(\textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1enumeration}{enumeration}}\&) = \textcolor{keyword}{delete};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00705}\mbox{\hyperlink{classkblib_1_1enumeration_a3378b0d743025f609c0bb7f1b8e29a4d}{00705}}    \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1enumeration_a3378b0d743025f609c0bb7f1b8e29a4d}{operator=}}(\mbox{\hyperlink{classkblib_1_1enumeration}{enumeration}}\&\&) = \textcolor{keyword}{delete};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00706}00706 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00707}\mbox{\hyperlink{classkblib_1_1enumeration_a975ae59ac82b62d55c41e6e6f6a22bfa}{00707}}    \mbox{\hyperlink{classkblib_1_1enumeration_a975ae59ac82b62d55c41e6e6f6a22bfa}{\string~enumeration}}() = \textcolor{keywordflow}{default};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00708}00708 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00709}00709  \textcolor{keyword}{private}:}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00710}00710    \mbox{\hyperlink{classkblib_1_1enumeration}{enumeration}}(\mbox{\hyperlink{structkblib_1_1detail__enumerate_1_1force__copy__tag}{detail\_enumerate::force\_copy\_tag}}, std::size\_t i)}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00711}00711        : idx(i) \{\}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00712}00712 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00713}00713  \textcolor{keyword}{public}:}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00714}\mbox{\hyperlink{classkblib_1_1enumeration_a46009b4c2b93bee9a082cb432ae5a3ba}{00714}}    \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1enumeration_a46009b4c2b93bee9a082cb432ae5a3ba}{index}}() const noexcept -\/> \mbox{\hyperlink{namespacestd}{std}}::\textcolor{keywordtype}{size\_t} \{ \textcolor{keywordflow}{return} idx; \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00715}00715 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00716}\mbox{\hyperlink{classkblib_1_1enumeration_a0db1eb096e86386ef5498ea248b7d966}{00716}}    \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1enumeration_a0db1eb096e86386ef5498ea248b7d966}{copied}}() \& \textcolor{keyword}{noexcept} -\/> std::remove\_const\_t<T>\& \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00717}00717       assert(source != detail\_enumerate::get\_magic\_ptr<T>());}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00718}00718       assert(local);}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00719}00719       \textcolor{keywordflow}{return} *local;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00720}00720    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00721}\mbox{\hyperlink{classkblib_1_1enumeration_a5bead6ac445174dcd2ad1ec08e4b4e8d}{00721}}    \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1enumeration_a5bead6ac445174dcd2ad1ec08e4b4e8d}{copied}}() const\& noexcept -\/> const T\& \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00722}00722       assert(source != detail\_enumerate::get\_magic\_ptr<T>());}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00723}00723       \textcolor{keywordflow}{return} \mbox{\hyperlink{namespacekblib_1_1detail__enumerate_ac4e2d91f1419790b70ee4fcc9ba0fdff}{detail\_enumerate::get\_or}}(local, source);}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00724}00724    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00725}00725 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00726}\mbox{\hyperlink{classkblib_1_1enumeration_a3d336565b478dddf18494ed2c90ccedf}{00726}}    \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1enumeration_a3d336565b478dddf18494ed2c90ccedf}{reffed}}() \& \textcolor{keyword}{noexcept} -\/> T\& \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00727}00727       assert(source != detail\_enumerate::get\_magic\_ptr<T>());}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00728}00728       \textcolor{keywordflow}{return} \mbox{\hyperlink{namespacekblib_1_1detail__enumerate_ac4e2d91f1419790b70ee4fcc9ba0fdff}{detail\_enumerate::get\_or}}(local, source);}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00729}00729    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00730}\mbox{\hyperlink{classkblib_1_1enumeration_a5f0c008db095d268a70603626303da0c}{00730}}    \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1enumeration_a5f0c008db095d268a70603626303da0c}{reffed}}() const\& noexcept -\/> const T\& \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00731}00731       assert(source != detail\_enumerate::get\_magic\_ptr<T>());}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00732}00732       \textcolor{keywordflow}{return} \mbox{\hyperlink{namespacekblib_1_1detail__enumerate_ac4e2d91f1419790b70ee4fcc9ba0fdff}{detail\_enumerate::get\_or}}(local, source);}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00733}00733    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00734}00734 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00735}00735  \textcolor{keyword}{private}:}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00736}00736    \textcolor{keyword}{auto} set(T* t) \& -\/> \textcolor{keywordtype}{void} \{ source = t; \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00737}00737 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00738}00738    \textcolor{keyword}{auto} advance() \& \textcolor{keyword}{noexcept} -\/> \textcolor{keywordtype}{void} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00739}00739       ++idx;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00740}00740       source = detail\_enumerate::get\_magic\_ptr<T>();}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00741}00741       local = std::nullopt;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00742}00742    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00743}00743 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00744}00744    std::size\_t idx = 0;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00745}00745    \textcolor{keyword}{mutable} std::optional<std::remove\_const\_t<T>> local = std::nullopt;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00746}00746    T* source = detail\_enumerate::get\_magic\_ptr<T>();}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00747}00747 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00748}00748    \textcolor{keyword}{template} <\textcolor{keyword}{typename}>}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00749}\mbox{\hyperlink{classkblib_1_1enumeration_a6dd8e668aab608987b6c0fabbb2689eb}{00749}}    \textcolor{keyword}{friend} \textcolor{keyword}{class }\mbox{\hyperlink{classkblib_1_1enumerator__iterator}{enumerator\_iterator}};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00750}00750 \};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00751}00751 \} \textcolor{comment}{// namespace kblib}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00752}00752 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00753}00753 \textcolor{keyword}{namespace }\mbox{\hyperlink{namespacestd}{std}} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00754}00754 \textcolor{preprocessor}{\#  if defined(\_\_clang\_\_)}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00755}00755 \textcolor{comment}{// Fix from: https://github.com/nlohmann/json/issues/1401}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00756}00756 \textcolor{preprocessor}{\#     pragma clang diagnostic push}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00757}00757 \textcolor{preprocessor}{\#     pragma clang diagnostic ignored "{}-\/Wmismatched-\/tags"{}}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00758}00758 \textcolor{preprocessor}{\#  endif}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00759}00759 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00760}00760 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00761}\mbox{\hyperlink{classstd_1_1tuple__size_3_1_1kblib_1_1enumeration_3_01_t_01_4_01_4}{00761}} \textcolor{keyword}{class }tuple\_size<::\mbox{\hyperlink{classkblib_1_1enumeration}{kblib::enumeration}}<T>>}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00762}00762     : \textcolor{keyword}{public} std::integral\_constant<std::size\_t, 2> \{\};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00763}00763 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00764}00764 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00765}\mbox{\hyperlink{classstd_1_1tuple__element_3_010_00_01_1_1kblib_1_1enumeration_3_01_t_01_4_01_4}{00765}} \textcolor{keyword}{class }tuple\_element<0, ::\mbox{\hyperlink{classkblib_1_1enumeration}{kblib::enumeration}}<T>> \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00766}00766  \textcolor{keyword}{public}:}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00767}\mbox{\hyperlink{classstd_1_1tuple__element_3_010_00_01_1_1kblib_1_1enumeration_3_01_t_01_4_01_4_a5ffbe665f94da52faae19913e1c6b4b4}{00767}}    \textcolor{keyword}{using }\mbox{\hyperlink{classstd_1_1tuple__element_3_010_00_01_1_1kblib_1_1enumeration_3_01_t_01_4_01_4_a5ffbe665f94da52faae19913e1c6b4b4}{type}} = std::size\_t;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00768}00768 \};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00769}00769 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00770}\mbox{\hyperlink{classstd_1_1tuple__element_3_010_00_01volatile_01_1_1kblib_1_1enumeration_3_01_t_01_4_01_4}{00770}} \textcolor{keyword}{class }tuple\_element<0, volatile ::\mbox{\hyperlink{classkblib_1_1enumeration}{kblib::enumeration}}<T>> \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00771}00771  \textcolor{keyword}{public}:}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00772}\mbox{\hyperlink{classstd_1_1tuple__element_3_010_00_01volatile_01_1_1kblib_1_1enumeration_3_01_t_01_4_01_4_a56170bacd225380db58a1577896e2aff}{00772}}    \textcolor{keyword}{using }\mbox{\hyperlink{classstd_1_1tuple__element_3_010_00_01volatile_01_1_1kblib_1_1enumeration_3_01_t_01_4_01_4_a56170bacd225380db58a1577896e2aff}{type}} = std::size\_t;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00773}00773 \};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00774}00774 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00775}\mbox{\hyperlink{classstd_1_1tuple__element_3_010_00_01const_01volatile_01_1_1kblib_1_1enumeration_3_01_t_01_4_01_4}{00775}} \textcolor{keyword}{class }tuple\_element<0, const volatile ::\mbox{\hyperlink{classkblib_1_1enumeration}{kblib::enumeration}}<T>> \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00776}00776  \textcolor{keyword}{public}:}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00777}\mbox{\hyperlink{classstd_1_1tuple__element_3_010_00_01const_01volatile_01_1_1kblib_1_1enumeration_3_01_t_01_4_01_4_a839f00a197f6e882d3c40e3a9bdb460c}{00777}}    \textcolor{keyword}{using }\mbox{\hyperlink{classstd_1_1tuple__element_3_010_00_01const_01volatile_01_1_1kblib_1_1enumeration_3_01_t_01_4_01_4_a839f00a197f6e882d3c40e3a9bdb460c}{type}} = \textcolor{keyword}{const} std::size\_t;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00778}00778 \};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00779}00779 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00783}00783 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00784}\mbox{\hyperlink{classstd_1_1tuple__element_3_011_00_01volatile_01_1_1kblib_1_1enumeration_3_01_t_01_4_01_4}{00784}} \textcolor{keyword}{class }tuple\_element<1, volatile ::\mbox{\hyperlink{classkblib_1_1enumeration}{kblib::enumeration}}<T>> \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00785}00785  \textcolor{keyword}{public}:}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00786}\mbox{\hyperlink{classstd_1_1tuple__element_3_011_00_01volatile_01_1_1kblib_1_1enumeration_3_01_t_01_4_01_4_a2978d73ee95306831126cd98dc23fbdb}{00786}}    \textcolor{keyword}{using }\mbox{\hyperlink{classstd_1_1tuple__element_3_011_00_01volatile_01_1_1kblib_1_1enumeration_3_01_t_01_4_01_4_a2978d73ee95306831126cd98dc23fbdb}{type}} = T;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00787}00787 \};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00791}00791 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00792}\mbox{\hyperlink{classstd_1_1tuple__element_3_011_00_01const_01volatile_01_1_1kblib_1_1enumeration_3_01_t_01_4_01_4}{00792}} \textcolor{keyword}{class }tuple\_element<1, const volatile ::\mbox{\hyperlink{classkblib_1_1enumeration}{kblib::enumeration}}<T>> \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00793}00793  \textcolor{keyword}{public}:}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00794}\mbox{\hyperlink{classstd_1_1tuple__element_3_011_00_01const_01volatile_01_1_1kblib_1_1enumeration_3_01_t_01_4_01_4_af95e18b723c518d24d5e49b977e6efc9}{00794}}    \textcolor{keyword}{using }\mbox{\hyperlink{classstd_1_1tuple__element_3_011_00_01const_01volatile_01_1_1kblib_1_1enumeration_3_01_t_01_4_01_4_af95e18b723c518d24d5e49b977e6efc9}{type}} = \textcolor{keyword}{const} T;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00795}00795 \};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00799}00799 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00800}\mbox{\hyperlink{classstd_1_1tuple__element_3_011_00_01_1_1kblib_1_1enumeration_3_01_t_01_4_01_4}{00800}} \textcolor{keyword}{class }tuple\_element<1, ::\mbox{\hyperlink{classkblib_1_1enumeration}{kblib::enumeration}}<T>> \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00801}00801  \textcolor{keyword}{public}:}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00802}\mbox{\hyperlink{classstd_1_1tuple__element_3_011_00_01_1_1kblib_1_1enumeration_3_01_t_01_4_01_4_aa612d8c7d0531f5bfbf30a1c81040daf}{00802}}    \textcolor{keyword}{using }\mbox{\hyperlink{classstd_1_1tuple__element_3_011_00_01_1_1kblib_1_1enumeration_3_01_t_01_4_01_4_aa612d8c7d0531f5bfbf30a1c81040daf}{type}} = std::remove\_const\_t<T>;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00803}00803 \};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00807}00807 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00808}\mbox{\hyperlink{classstd_1_1tuple__element_3_011_00_01const_01_1_1kblib_1_1enumeration_3_01_t_01_4_01_4}{00808}} \textcolor{keyword}{class }tuple\_element<1, const ::\mbox{\hyperlink{classkblib_1_1enumeration}{kblib::enumeration}}<T>> \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00809}00809  \textcolor{keyword}{public}:}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00810}\mbox{\hyperlink{classstd_1_1tuple__element_3_011_00_01const_01_1_1kblib_1_1enumeration_3_01_t_01_4_01_4_a361773cb91169c2cc2ab09b0bdc63caa}{00810}}    \textcolor{keyword}{using }\mbox{\hyperlink{classstd_1_1tuple__element_3_011_00_01const_01_1_1kblib_1_1enumeration_3_01_t_01_4_01_4_a361773cb91169c2cc2ab09b0bdc63caa}{type}} = \textcolor{keyword}{const} T;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00811}00811 \};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00812}00812 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00813}00813 \textcolor{preprocessor}{\#  if defined(\_\_clang\_\_)}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00814}00814 \textcolor{preprocessor}{\#     pragma clang diagnostic pop}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00815}00815 \textcolor{preprocessor}{\#  endif}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00816}00816 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00817}00817 \} \textcolor{comment}{// namespace std}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00818}00818 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00819}00819 \textcolor{keyword}{namespace }\mbox{\hyperlink{tdecl_8h_a4b5c574c663a392148218cd4410fd7a1}{KBLIB\_NS}} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00820}00820 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00821}00821 \textcolor{comment}{// When a structured binding is created by value, this function is called as if}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00822}00822 \textcolor{comment}{// by get<i>(std::move(e)), so it does not call the lvalue reference function.}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00823}00823 \textcolor{comment}{// I have no idea why it's implicitly moved, but it works for my purposes.}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00824}00824 \textcolor{keyword}{template} <std::\textcolor{keywordtype}{size\_t} I, \textcolor{keyword}{typename} T>}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00825}\mbox{\hyperlink{namespacekblib_a554b8034891b88291ee4014c5618e41f}{00825}} \textcolor{keyword}{auto} \mbox{\hyperlink{namespacekblib_a2888a4a5d49c15f73ced60c66c31dc15}{get}}(\mbox{\hyperlink{classkblib_1_1enumeration}{enumeration<T>}}\&\& \mbox{\hyperlink{namespacekblib_a536badb265b62a85034f48e0eac76a1b}{e}}) -\/> \textcolor{keyword}{decltype}(\textcolor{keyword}{auto}) \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00826}00826    \textcolor{keyword}{static\_assert}(I <= 1, \textcolor{stringliteral}{"{}enumeration only has two elements"{}});}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00827}00827    \textcolor{keywordflow}{if} \textcolor{keyword}{constexpr} (I == 0) \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00828}00828       \textcolor{keywordflow}{return} \mbox{\hyperlink{namespacekblib_a536badb265b62a85034f48e0eac76a1b}{e}}.index();}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00829}00829    \} \textcolor{keywordflow}{else} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00830}00830       \textcolor{keywordflow}{return} \mbox{\hyperlink{namespacekblib_a536badb265b62a85034f48e0eac76a1b}{e}}.copied();}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00831}00831    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00832}00832 \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00833}00833 \textcolor{keyword}{template} <std::\textcolor{keywordtype}{size\_t} I, \textcolor{keyword}{typename} T>}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00834}\mbox{\hyperlink{namespacekblib_a41c0ca0fe1a53fd119fc343cf9a4040e}{00834}} \textcolor{keyword}{auto} \mbox{\hyperlink{namespacekblib_a2888a4a5d49c15f73ced60c66c31dc15}{get}}(\textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1enumeration}{enumeration<T>}}\&\& \mbox{\hyperlink{namespacekblib_a536badb265b62a85034f48e0eac76a1b}{e}}) -\/> \textcolor{keyword}{decltype}(\textcolor{keyword}{auto}) \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00835}00835    \textcolor{keyword}{static\_assert}(I <= 1, \textcolor{stringliteral}{"{}enumeration only has two elements"{}});}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00836}00836    \textcolor{keywordflow}{if} \textcolor{keyword}{constexpr} (I == 0) \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00837}00837       \textcolor{keywordflow}{return} \mbox{\hyperlink{namespacekblib_a536badb265b62a85034f48e0eac76a1b}{e}}.index();}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00838}00838    \} \textcolor{keywordflow}{else} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00839}00839       \textcolor{keywordflow}{return} \mbox{\hyperlink{namespacekblib_a536badb265b62a85034f48e0eac76a1b}{e}}.copied();}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00840}00840    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00841}00841 \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00842}00842 \textcolor{comment}{// When captured by reference, the volatile qualifier is added, which allows}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00843}00843 \textcolor{comment}{// std::tuple\_element to detect the copying-\/nonconst-\/from-\/const case.}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00844}00844 \textcolor{keyword}{template} <std::\textcolor{keywordtype}{size\_t} I, \textcolor{keyword}{typename} T>}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00845}\mbox{\hyperlink{namespacekblib_a052e6c7d0944cda0ce9203c1036fc745}{00845}} \textcolor{keyword}{auto} \mbox{\hyperlink{namespacekblib_a2888a4a5d49c15f73ced60c66c31dc15}{get}}(\textcolor{keyword}{volatile} \mbox{\hyperlink{classkblib_1_1enumeration}{enumeration<T>}}\& \mbox{\hyperlink{namespacekblib_a536badb265b62a85034f48e0eac76a1b}{e}}) -\/> \textcolor{keyword}{decltype}(\textcolor{keyword}{auto}) \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00846}00846    \textcolor{keyword}{static\_assert}(I <= 1, \textcolor{stringliteral}{"{}enumeration only has two elements"{}});}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00847}00847    \textcolor{keywordflow}{if} \textcolor{keyword}{constexpr} (I == 0) \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00848}00848       \textcolor{keywordflow}{return} \textcolor{keyword}{const\_cast<}\mbox{\hyperlink{classkblib_1_1enumeration}{enumeration<T>}}\&\textcolor{keyword}{>}(\mbox{\hyperlink{namespacekblib_a536badb265b62a85034f48e0eac76a1b}{e}}).index();}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00849}00849    \} \textcolor{keywordflow}{else} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00850}00850       \textcolor{keywordflow}{return} \textcolor{keyword}{const\_cast<}\mbox{\hyperlink{classkblib_1_1enumeration}{enumeration<T>}}\&\textcolor{keyword}{>}(\mbox{\hyperlink{namespacekblib_a536badb265b62a85034f48e0eac76a1b}{e}}).reffed();}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00851}00851    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00852}00852 \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00853}00853 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00854}00854 \textcolor{keyword}{template} <std::\textcolor{keywordtype}{size\_t} I, \textcolor{keyword}{typename} T>}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00855}\mbox{\hyperlink{namespacekblib_a2888a4a5d49c15f73ced60c66c31dc15}{00855}} \textcolor{keyword}{auto} \mbox{\hyperlink{namespacekblib_a2888a4a5d49c15f73ced60c66c31dc15}{get}}(\textcolor{keyword}{const} \textcolor{keyword}{volatile} \mbox{\hyperlink{classkblib_1_1enumeration}{enumeration<T>}}\& \mbox{\hyperlink{namespacekblib_a536badb265b62a85034f48e0eac76a1b}{e}}) -\/> \textcolor{keyword}{decltype}(\textcolor{keyword}{auto}) \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00856}00856    \textcolor{keyword}{static\_assert}(I <= 1, \textcolor{stringliteral}{"{}enumeration only has two elements"{}});}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00857}00857    \textcolor{keywordflow}{if} \textcolor{keyword}{constexpr} (I == 0) \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00858}00858       \textcolor{keywordflow}{return} \textcolor{keyword}{const\_cast<}\textcolor{keyword}{const }\mbox{\hyperlink{classkblib_1_1enumeration}{enumeration<T>}}\&\textcolor{keyword}{>}(\mbox{\hyperlink{namespacekblib_a536badb265b62a85034f48e0eac76a1b}{e}}).index();}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00859}00859    \} \textcolor{keywordflow}{else} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00860}00860       \textcolor{keywordflow}{return} \textcolor{keyword}{const\_cast<}\textcolor{keyword}{const }\mbox{\hyperlink{classkblib_1_1enumeration}{enumeration<T>}}\&\textcolor{keyword}{>}(\mbox{\hyperlink{namespacekblib_a536badb265b62a85034f48e0eac76a1b}{e}}).reffed();}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00861}00861    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00862}00862 \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00863}00863 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00864}00864 \textcolor{keyword}{template} <\textcolor{keyword}{typename} It>}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00865}\mbox{\hyperlink{classkblib_1_1enumerator__iterator}{00865}} \textcolor{keyword}{class }\mbox{\hyperlink{classkblib_1_1enumerator__iterator}{enumerator\_iterator}} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00866}00866  \textcolor{keyword}{public}:}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00867}\mbox{\hyperlink{classkblib_1_1enumerator__iterator_acd38fab6f2a44f77de6a8b457aa25694}{00867}}    \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1enumerator__iterator_acd38fab6f2a44f77de6a8b457aa25694}{nested\_value}}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00868}00868        = \mbox{\hyperlink{namespacekblib_af973fdd9c2dddf6db3744ae83902fc72}{copy\_const\_t<decltype(*std::declval<It\&>}}()),}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00869}00869                       \textcolor{keyword}{typename} std::iterator\_traits<It>::value\_type>;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00870}00870 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00871}\mbox{\hyperlink{classkblib_1_1enumerator__iterator_a2bd5e36eb96817d637ed932603685bee}{00871}}    \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1enumeration}{value\_type}} = \mbox{\hyperlink{classkblib_1_1enumeration}{enumeration<nested\_value>}};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00872}\mbox{\hyperlink{classkblib_1_1enumerator__iterator_abf2873d17e083bb655b170abaffe8469}{00872}}    \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1enumerator__iterator_abf2873d17e083bb655b170abaffe8469}{difference\_type}} = std::ptrdiff\_t;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00873}\mbox{\hyperlink{classkblib_1_1enumerator__iterator_aa9fc12692f7318303f6464d00f5ae992}{00873}}    \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1enumeration}{pointer}} = \textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1enumeration}{value\_type}}*;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00874}\mbox{\hyperlink{classkblib_1_1enumerator__iterator_a68663d2a17cf6dc73e593c85b96247f0}{00874}}    \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1enumeration}{reference}} = \textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1enumeration}{value\_type}}\&;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00875}\mbox{\hyperlink{classkblib_1_1enumerator__iterator_aa6ecf418cb165de9b9fcb2c1a96c1612}{00875}}    \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1enumerator__iterator_aa6ecf418cb165de9b9fcb2c1a96c1612}{iterator\_category}} = std::input\_iterator\_tag;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00876}00876 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00877}\mbox{\hyperlink{classkblib_1_1enumerator__iterator_aa33d18d5c49292de99552bad27bddb1c}{00877}}    \mbox{\hyperlink{classkblib_1_1enumerator__iterator_aa33d18d5c49292de99552bad27bddb1c}{enumerator\_iterator}}() = \textcolor{keywordflow}{default};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00878}\mbox{\hyperlink{classkblib_1_1enumerator__iterator_a360fcba390a888a2a065cf3e75db2de3}{00878}}    \mbox{\hyperlink{classkblib_1_1enumerator__iterator_a360fcba390a888a2a065cf3e75db2de3}{enumerator\_iterator}}(\textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1enumerator__iterator}{enumerator\_iterator}}\& other)}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00879}00879        : \mbox{\hyperlink{classkblib_1_1enumerator__iterator}{enumerator\_iterator}}(detail\_enumerate::force\_copy\_tag\{\},}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00880}00880                              other.curr\_.idx, other.it\_) \{\}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00881}\mbox{\hyperlink{classkblib_1_1enumerator__iterator_abccb1d7b00a99eede5841200a81898a9}{00881}}    \mbox{\hyperlink{classkblib_1_1enumerator__iterator_abccb1d7b00a99eede5841200a81898a9}{enumerator\_iterator}}(It it)}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00882}00882        : it\_(it) \{\}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00883}00883 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00884}\mbox{\hyperlink{classkblib_1_1enumerator__iterator_aea94758df9bbd1b411a400d7ec3bf24a}{00884}}    \mbox{\hyperlink{classkblib_1_1enumerator__iterator_aea94758df9bbd1b411a400d7ec3bf24a}{enumerator\_iterator}}(\mbox{\hyperlink{classkblib_1_1enumerator__iterator}{enumerator\_iterator}}\&\&) = \textcolor{keywordflow}{default};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00885}\mbox{\hyperlink{classkblib_1_1enumerator__iterator_aaa0ab3cdb061fd0c450f2ba9828557f9}{00885}}    \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1enumerator__iterator_aaa0ab3cdb061fd0c450f2ba9828557f9}{operator=}}(\textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1enumerator__iterator}{enumerator\_iterator}}\&) -\/> \mbox{\hyperlink{classkblib_1_1enumerator__iterator}{enumerator\_iterator}}\& = \textcolor{keywordflow}{default};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00886}\mbox{\hyperlink{classkblib_1_1enumerator__iterator_aa5920d030219e7fa79570ed5487640a2}{00886}}    \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1enumerator__iterator_aa5920d030219e7fa79570ed5487640a2}{operator=}}(\mbox{\hyperlink{classkblib_1_1enumerator__iterator}{enumerator\_iterator}}\&\&) -\/> \mbox{\hyperlink{classkblib_1_1enumerator__iterator}{enumerator\_iterator}}\& = \textcolor{keywordflow}{default};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00887}00887 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00888}\mbox{\hyperlink{classkblib_1_1enumerator__iterator_a43d6ff087a7d75c3c1319a83fd0eefc5}{00888}}    \mbox{\hyperlink{classkblib_1_1enumerator__iterator_a43d6ff087a7d75c3c1319a83fd0eefc5}{\string~enumerator\_iterator}}() = \textcolor{keywordflow}{default};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00889}00889 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00890}\mbox{\hyperlink{classkblib_1_1enumerator__iterator_ad4f8f540f7c75a3a9fee5d19d41ce3a6}{00890}}    \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1enumerator__iterator_ad4f8f540f7c75a3a9fee5d19d41ce3a6}{operator*}}() \& -\/> \textcolor{keyword}{volatile} \mbox{\hyperlink{classkblib_1_1enumeration}{value\_type}}\& \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00891}00891       \textcolor{keywordflow}{if} (not captured) \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00892}00892          curr\_.set(\mbox{\hyperlink{namespacekblib_a1c2aa67048789f77bea56734a583d3d1}{to\_pointer}}(it\_));}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00893}00893          captured = \textcolor{keyword}{true};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00894}00894       \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00895}00895       \textcolor{keywordflow}{return} curr\_;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00896}00896    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00897}\mbox{\hyperlink{classkblib_1_1enumerator__iterator_a8e647fbb8c902d5c927db6f510e21ffb}{00897}}    \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1enumerator__iterator_a8e647fbb8c902d5c927db6f510e21ffb}{operator++}}() \& -\/> \mbox{\hyperlink{classkblib_1_1enumerator__iterator}{enumerator\_iterator}}\& \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00898}00898       curr\_.advance();}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00899}00899       captured = \textcolor{keyword}{false};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00900}00900       ++it\_;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00901}00901       \textcolor{keywordflow}{return} *\textcolor{keyword}{this};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00902}00902    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00903}00903 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00904}\mbox{\hyperlink{classkblib_1_1enumerator__iterator_aa6204ed79dd94064ee0a380f5b61c624}{00904}}    \textcolor{keyword}{friend} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1enumerator__iterator_aa6204ed79dd94064ee0a380f5b61c624}{operator==}}(\textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1enumerator__iterator}{enumerator\_iterator}}\& lhs,}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00905}00905                           \textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1enumerator__iterator}{enumerator\_iterator}}\& rhs) \textcolor{keyword}{noexcept} -\/> \textcolor{keywordtype}{bool} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00906}00906       \textcolor{keywordflow}{return} lhs.it\_ == rhs.it\_;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00907}00907    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00908}\mbox{\hyperlink{classkblib_1_1enumerator__iterator_af6555d8dd1cdd998e40c821ed352540d}{00908}}    \textcolor{keyword}{friend} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1enumerator__iterator_af6555d8dd1cdd998e40c821ed352540d}{operator!=}}(\textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1enumerator__iterator}{enumerator\_iterator}}\& lhs,}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00909}00909                           \textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1enumerator__iterator}{enumerator\_iterator}}\& rhs) \textcolor{keyword}{noexcept} -\/> \textcolor{keywordtype}{bool} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00910}00910       \textcolor{keywordflow}{return} lhs.it\_ != rhs.it\_;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00911}00911    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00912}00912 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00913}00913  \textcolor{keyword}{private}:}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00914}00914    \mbox{\hyperlink{classkblib_1_1enumerator__iterator}{enumerator\_iterator}}(\mbox{\hyperlink{structkblib_1_1detail__enumerate_1_1force__copy__tag}{detail\_enumerate::force\_copy\_tag}} t, std::size\_t idx,}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00915}00915                        It it)}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00916}00916        : it\_(it)}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00917}00917        , curr\_(t, idx) \{\}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00918}00918 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00919}00919    It it\_;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00920}00920    \textcolor{keywordtype}{bool} captured = \textcolor{keyword}{false};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00921}00921    value\_type curr\_;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00922}00922 \};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00923}00923 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00924}00924 \textcolor{keyword}{template} <\textcolor{keyword}{typename} Range, \textcolor{keyword}{typename} = \textcolor{keywordtype}{void}>}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00925}00925 \textcolor{keyword}{class }enumerator\_t;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00926}00926 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00927}00927 \textcolor{keyword}{template} <\textcolor{keyword}{typename} Range>}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00928}\mbox{\hyperlink{classkblib_1_1enumerator__t_3_01_range_00_01void_01_4}{00928}} \textcolor{keyword}{class }\mbox{\hyperlink{classkblib_1_1enumerator__t}{enumerator\_t}}<Range, void> \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00929}00929  \textcolor{keyword}{public}:}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00930}\mbox{\hyperlink{classkblib_1_1enumerator__t_3_01_range_00_01void_01_4_ac043b63b7bb69e8c23b957061ca068b3}{00930}}    \mbox{\hyperlink{namespacekblib_1_1detail_aca9cd901eb773c411961ea11739f3d40}{detail::no\_dangle\_t<Range>}} \mbox{\hyperlink{classkblib_1_1enumerator__t_3_01_range_00_01void_01_4_ac043b63b7bb69e8c23b957061ca068b3}{r}};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00931}00931 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00932}\mbox{\hyperlink{classkblib_1_1enumerator__t_3_01_range_00_01void_01_4_a84ce83b9ff25327bb0228cbf1da4b202}{00932}}    \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1enumerator__t_3_01_range_00_01void_01_4_a84ce83b9ff25327bb0228cbf1da4b202}{range\_t}} = \textcolor{keyword}{typename} std::remove\_reference\_t<Range>;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00933}\mbox{\hyperlink{classkblib_1_1enumerator__t_3_01_range_00_01void_01_4_a85ff0f722ebf3fc42791b848a5b6d728}{00933}}    \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1enumerator__t_3_01_range_00_01void_01_4_a85ff0f722ebf3fc42791b848a5b6d728}{nested\_iterator}} = \textcolor{keyword}{decltype}(r.begin());}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00934}\mbox{\hyperlink{classkblib_1_1enumerator__t_3_01_range_00_01void_01_4_ab798e42fa81b75e1b135ef81f9f37c18}{00934}}    \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1enumerator__t_3_01_range_00_01void_01_4_ab798e42fa81b75e1b135ef81f9f37c18}{nested\_end\_iterator}} = \textcolor{keyword}{decltype}(r.end());}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00935}\mbox{\hyperlink{classkblib_1_1enumerator__t_3_01_range_00_01void_01_4_afdd32f18b0e63a77f0d6b0c8f8dcd8a0}{00935}}    \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1enumerator__iterator}{iterator}} = \mbox{\hyperlink{classkblib_1_1enumerator__iterator}{enumerator\_iterator<nested\_iterator>}};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00936}\mbox{\hyperlink{classkblib_1_1enumerator__t_3_01_range_00_01void_01_4_a22dcb153e02fefffbb7a0f7414270a70}{00936}}    \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1enumerator__iterator}{end\_iterator}} = \mbox{\hyperlink{classkblib_1_1enumerator__iterator}{enumerator\_iterator<nested\_end\_iterator>}};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00937}00937 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00938}\mbox{\hyperlink{classkblib_1_1enumerator__t_3_01_range_00_01void_01_4_a59f42e61ef2b63f8f8d4a8f9aac64902}{00938}}    \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1enumerator__t_3_01_range_00_01void_01_4_a59f42e61ef2b63f8f8d4a8f9aac64902}{nested\_const\_iterator}} = \textcolor{keyword}{typename} range\_t::const\_iterator;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00939}\mbox{\hyperlink{classkblib_1_1enumerator__t_3_01_range_00_01void_01_4_a0e04065874b30cd196097939749d3744}{00939}}    \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1enumerator__iterator}{const\_iterator}} = \mbox{\hyperlink{classkblib_1_1enumerator__iterator}{enumerator\_iterator<nested\_const\_iterator>}};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00940}00940 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00941}\mbox{\hyperlink{classkblib_1_1enumerator__t_3_01_range_00_01void_01_4_a8b353bd881ed069337d2f28a7601c3f6}{00941}}    \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1enumerator__t_3_01_range_00_01void_01_4_a8b353bd881ed069337d2f28a7601c3f6}{begin}}() const\& noexcept(noexcept(r.cbegin())) -\/> \mbox{\hyperlink{classkblib_1_1enumerator__iterator}{const\_iterator}} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00942}00942       \textcolor{keywordflow}{return} r.cbegin();}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00943}00943    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00944}\mbox{\hyperlink{classkblib_1_1enumerator__t_3_01_range_00_01void_01_4_ab785629cea88041ca75c506d8f5d58d5}{00944}}    \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1enumerator__t_3_01_range_00_01void_01_4_ab785629cea88041ca75c506d8f5d58d5}{begin}}() \& \textcolor{keyword}{noexcept}(\textcolor{keyword}{noexcept}(r.begin())) -\/> \mbox{\hyperlink{classkblib_1_1enumerator__iterator}{iterator}} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00945}00945       \textcolor{keywordflow}{return} r.begin();}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00946}00946    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00947}00947 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00948}\mbox{\hyperlink{classkblib_1_1enumerator__t_3_01_range_00_01void_01_4_ac248220cdfd601047f1bba39821842a7}{00948}}    \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1enumerator__t_3_01_range_00_01void_01_4_ac248220cdfd601047f1bba39821842a7}{end}}() const\& noexcept(noexcept(r.cend())) -\/> \mbox{\hyperlink{classkblib_1_1enumerator__iterator}{const\_iterator}} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00949}00949       \textcolor{keywordflow}{return} r.cend();}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00950}00950    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00951}\mbox{\hyperlink{classkblib_1_1enumerator__t_3_01_range_00_01void_01_4_a77b5228358bcd320f2b41796282c00a9}{00951}}    \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1enumerator__t_3_01_range_00_01void_01_4_a77b5228358bcd320f2b41796282c00a9}{end}}() \& \textcolor{keyword}{noexcept}(\textcolor{keyword}{noexcept}(r.end())) -\/> \mbox{\hyperlink{classkblib_1_1enumerator__iterator}{end\_iterator}} \{ \textcolor{keywordflow}{return} r.end(); \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00952}00952 \};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00953}00953 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00954}00954 \textcolor{keyword}{template} <\textcolor{keyword}{typename} It, \textcolor{keyword}{typename} EndIt>}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00955}\mbox{\hyperlink{classkblib_1_1enumerator__t}{00955}} \textcolor{keyword}{class }\mbox{\hyperlink{classkblib_1_1enumerator__t}{enumerator\_t}} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00956}00956  \textcolor{keyword}{public}:}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00957}\mbox{\hyperlink{classkblib_1_1enumerator__t_a31e0c986f1697afb004a0de7b620497a}{00957}}    \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1enumerator__t_a31e0c986f1697afb004a0de7b620497a}{nested\_iterator}} = It;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00958}\mbox{\hyperlink{classkblib_1_1enumerator__t_a9b05bb760ad518ca9099ed76bdb4bf4e}{00958}}    \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1enumerator__iterator}{iterator}} = \mbox{\hyperlink{classkblib_1_1enumerator__iterator}{enumerator\_iterator<nested\_iterator>}};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00959}\mbox{\hyperlink{classkblib_1_1enumerator__t_ad3b952bf530ac7cf0152d8a56a4b62f5}{00959}}    \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1enumerator__iterator}{end\_iterator}} = \mbox{\hyperlink{classkblib_1_1enumerator__iterator}{enumerator\_iterator<EndIt>}};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00960}00960 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00961}\mbox{\hyperlink{classkblib_1_1enumerator__t_ab397ba671c5da3ab4de9fdbe6d4ba562}{00961}}    \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1enumerator__t_ab397ba671c5da3ab4de9fdbe6d4ba562}{begin}}() const\& noexcept -\/> \mbox{\hyperlink{classkblib_1_1enumerator__iterator}{iterator}} \{ \textcolor{keywordflow}{return} \{r\_begin\}; \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00962}00962 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00963}\mbox{\hyperlink{classkblib_1_1enumerator__t_a5a7c13560eab4adc7853f14171067b00}{00963}}    \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1enumerator__t_a5a7c13560eab4adc7853f14171067b00}{end}}() const\& noexcept -\/> \mbox{\hyperlink{classkblib_1_1enumerator__iterator}{end\_iterator}} \{ \textcolor{keywordflow}{return} \{r\_end\}; \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00964}00964 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00965}\mbox{\hyperlink{classkblib_1_1enumerator__t_a26e9d9e3ea73e6c39e95a6f145f92f73}{00965}}    It \mbox{\hyperlink{classkblib_1_1enumerator__t_a26e9d9e3ea73e6c39e95a6f145f92f73}{r\_begin}};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00966}\mbox{\hyperlink{classkblib_1_1enumerator__t_a308284aaaa3a26159df5145c86675c24}{00966}}    EndIt \mbox{\hyperlink{classkblib_1_1enumerator__t_a308284aaaa3a26159df5145c86675c24}{r\_end}};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00967}00967 \};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00968}00968 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00988}00988 \textcolor{keyword}{template} <\textcolor{keyword}{typename} It, \textcolor{keyword}{typename} EIt>}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00989}\mbox{\hyperlink{namespacekblib_a0084bbd67ea381c6954c3d82c3cd0691}{00989}} \textcolor{keyword}{auto} \mbox{\hyperlink{namespacekblib_a5617b65c2a82a734f2095c16f00e316c}{magic\_enumerate}}(It begin, EIt end) -\/> \mbox{\hyperlink{classkblib_1_1enumerator__t}{enumerator\_t<It, EIt>}} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00990}00990    \textcolor{keywordflow}{return} \{begin, end\};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00991}00991 \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l00992}00992 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01013}01013 \textcolor{keyword}{template} <\textcolor{keyword}{typename} Range>}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01014}\mbox{\hyperlink{namespacekblib_a5617b65c2a82a734f2095c16f00e316c}{01014}} \textcolor{keyword}{auto} \mbox{\hyperlink{namespacekblib_a5617b65c2a82a734f2095c16f00e316c}{magic\_enumerate}}(Range\&\& r) -\/> \textcolor{keyword}{auto} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01015}01015    \textcolor{keywordflow}{if} \textcolor{keyword}{constexpr} (std::is\_lvalue\_reference\_v<Range\&\&>) \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01016}01016       \textcolor{keyword}{using }std::begin;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01017}01017       \textcolor{keyword}{using }std::end;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01018}01018       \textcolor{keywordflow}{return} \mbox{\hyperlink{namespacekblib_a5617b65c2a82a734f2095c16f00e316c}{magic\_enumerate}}(begin(r), end(r));}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01019}01019    \} \textcolor{keywordflow}{else} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01020}01020       \textcolor{keywordflow}{return} \mbox{\hyperlink{classkblib_1_1enumerator__t}{enumerator\_t<Range\&\&>}}\{std::forward<Range>(r)\};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01021}01021    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01022}01022 \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01023}01023 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01024}01024 \textcolor{preprocessor}{\#endif}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01025}01025 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01029}01029 \textcolor{keyword}{template} <\textcolor{keyword}{typename} Iter1, \textcolor{keyword}{typename} Iter2>}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01030}\mbox{\hyperlink{structkblib_1_1indirect__range}{01030}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1indirect__range}{indirect\_range}} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01031}\mbox{\hyperlink{structkblib_1_1indirect__range_ae8a6b6587d1bee513210907f3711c2ed}{01031}}    Iter1 \mbox{\hyperlink{structkblib_1_1indirect__range_ae8a6b6587d1bee513210907f3711c2ed}{begin\_}};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01032}\mbox{\hyperlink{structkblib_1_1indirect__range_a48c8a5f1dfb8cfe5f93419bad0a8bd2c}{01032}}    Iter2 \mbox{\hyperlink{structkblib_1_1indirect__range_a48c8a5f1dfb8cfe5f93419bad0a8bd2c}{end\_}};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01033}01033 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01034}\mbox{\hyperlink{structkblib_1_1indirect__range_a26edfee8ca72bfd7ffe206b6ebaf1470}{01034}}    \textcolor{keyword}{using }\mbox{\hyperlink{structkblib_1_1indirect__range_a26edfee8ca72bfd7ffe206b6ebaf1470}{value\_type}} = \textcolor{keyword}{decltype}(*begin\_);}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01035}01035 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01036}\mbox{\hyperlink{structkblib_1_1indirect__range_a6318194ec2d7ce22bda135ebc5148ccf}{01036}}    \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1indirect__range_a6318194ec2d7ce22bda135ebc5148ccf}{begin}}() const noexcept -\/> Iter1 \{ \textcolor{keywordflow}{return} begin\_; \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01037}\mbox{\hyperlink{structkblib_1_1indirect__range_ac40e4c1e0297d4784d6c939932386fb5}{01037}}    \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1indirect__range_ac40e4c1e0297d4784d6c939932386fb5}{end}}() const noexcept -\/> Iter2 \{ \textcolor{keywordflow}{return} end\_; \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01038}\mbox{\hyperlink{structkblib_1_1indirect__range_aeb42ed53296b44c639eafe6bf6e5d8f2}{01038}}    \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1indirect__range_aeb42ed53296b44c639eafe6bf6e5d8f2}{rbegin}}() const noexcept -\/> auto \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01039}01039       \textcolor{keywordflow}{return} std::make\_reverse\_iterator(begin\_);}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01040}01040    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01041}\mbox{\hyperlink{structkblib_1_1indirect__range_a0b93a671559bc813f930df8acf39654d}{01041}}    \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1indirect__range_a0b93a671559bc813f930df8acf39654d}{rend}}() const noexcept -\/> auto \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01042}01042       \textcolor{keywordflow}{return} std::make\_reverse\_iterator(end\_);}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01043}01043    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01044}01044 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01045}\mbox{\hyperlink{structkblib_1_1indirect__range_a0b9dfb07c7b3c219e120e02ca542fa08}{01045}}    \textcolor{keyword}{constexpr} \textcolor{keyword}{friend} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1indirect__range_a0b9dfb07c7b3c219e120e02ca542fa08}{begin}}(\textcolor{keyword}{const} \mbox{\hyperlink{structkblib_1_1indirect__range}{indirect\_range}}\& r) \textcolor{keyword}{noexcept} -\/> Iter1 \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01046}01046       \textcolor{keywordflow}{return} r.begin\_;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01047}01047    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01048}\mbox{\hyperlink{structkblib_1_1indirect__range_a36b0e0282de329a9e368aaf422a0dd0b}{01048}}    \textcolor{keyword}{constexpr} \textcolor{keyword}{friend} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1indirect__range_a36b0e0282de329a9e368aaf422a0dd0b}{end}}(\textcolor{keyword}{const} \mbox{\hyperlink{structkblib_1_1indirect__range}{indirect\_range}}\& r) \textcolor{keyword}{noexcept} -\/> Iter2 \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01049}01049       \textcolor{keywordflow}{return} r.end\_;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01050}01050    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01051}01051 \};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01052}01052 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01059}01059 \textcolor{keyword}{template} <\textcolor{keyword}{typename} Iter1, \textcolor{keyword}{typename} Iter2>}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01060}\mbox{\hyperlink{namespacekblib_a893a2961c20b0657dffbbd2fe8f362c4}{01060}} \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{namespacekblib_a893a2961c20b0657dffbbd2fe8f362c4}{indirect}}(Iter1 begin, Iter2 end) \textcolor{keyword}{noexcept}(\textcolor{keyword}{noexcept}(}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01061}01061     \mbox{\hyperlink{structkblib_1_1indirect__range}{indirect\_range<Iter1, Iter2>}}\{begin, end\})) -\/> indirect\_range<Iter1, Iter2> \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01062}01062    \textcolor{keywordflow}{return} \{begin, end\};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01063}01063 \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01064}01064 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01065}01065 \textcolor{preprocessor}{\#if KBLIB\_USE\_CXX17}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01066}01066 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01067}01067 \textcolor{keyword}{template} <\textcolor{keyword}{typename} Iter1, \textcolor{keyword}{typename} Iter2>}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01068}\mbox{\hyperlink{namespacekblib_adbf35ad5c1ebb477db462d817a1a03cc}{01068}} \mbox{\hyperlink{namespacekblib_adbf35ad5c1ebb477db462d817a1a03cc}{indirect\_range}}(Iter1, Iter2) -\/> \mbox{\hyperlink{structkblib_1_1indirect__range}{indirect\_range<Iter1, Iter2>}};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01069}01069 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01070}01070 \textcolor{keyword}{template} <\textcolor{keyword}{typename} Iter1, \textcolor{keyword}{typename} Iter2>}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01071}\mbox{\hyperlink{namespacekblib_a77828de35fa34ad16a59080a4cf5ca91}{01071}} \textcolor{keyword}{auto} \mbox{\hyperlink{namespacekblib_a77828de35fa34ad16a59080a4cf5ca91}{cry\_enumerate}}(Iter1 begin, Iter2 end) -\/> \textcolor{keyword}{auto} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01072}01072    \textcolor{keywordflow}{return} \mbox{\hyperlink{namespacekblib_a77828de35fa34ad16a59080a4cf5ca91}{cry\_enumerate}}(\mbox{\hyperlink{structkblib_1_1indirect__range}{indirect\_range}}\{begin, end\});}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01073}01073 \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01074}01074 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01075}01075 \textcolor{preprocessor}{\#endif}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01076}01076 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01077}01077 \textcolor{comment}{// Fixed number of ranges}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01078}01078 \textcolor{keyword}{template} <\textcolor{keyword}{typename} Iter1, \textcolor{keyword}{typename} EndIter = Iter1, std::\textcolor{keywordtype}{size\_t} count = 0>}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01079}\mbox{\hyperlink{classkblib_1_1multi__range}{01079}} \textcolor{keyword}{class }\mbox{\hyperlink{classkblib_1_1multi__range}{multi\_range}} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01080}01080  \textcolor{keyword}{public}:}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01081}01081  \textcolor{keyword}{private}:}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01082}01082    \textcolor{keyword}{struct }\mbox{\hyperlink{namespacekblib_ac136a707b14a83235d82c267830f0cd9}{range}} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01083}01083       Iter1 begin;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01084}01084       EndIter end;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01085}01085    \};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01086}01086 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01087}01087    std::array<range, count> ranges;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01088}01088 \};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01089}01089 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01090}01090 \textcolor{comment}{// Dynamic number of ranges}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01091}01091 \textcolor{keyword}{template} <\textcolor{keyword}{typename} Iter1, \textcolor{keyword}{typename} EndIter>}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01092}\mbox{\hyperlink{classkblib_1_1multi__range_3_01_iter1_00_01_end_iter_00_010_01_4}{01092}} \textcolor{keyword}{class }\mbox{\hyperlink{classkblib_1_1multi__range}{multi\_range}}<Iter1, EndIter, 0> \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01093}01093  \textcolor{keyword}{public}:}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01094}01094  \textcolor{keyword}{private}:}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01095}01095    \textcolor{keyword}{struct }\mbox{\hyperlink{namespacekblib_ac136a707b14a83235d82c267830f0cd9}{range}} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01096}01096       Iter1 begin;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01097}01097       EndIter end;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01098}01098    \};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01099}01099 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01100}01100    std::vector<range> ranges;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01101}01101 \};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01102}01102 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01108}01108 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01109}\mbox{\hyperlink{structkblib_1_1containing__ptr}{01109}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1containing__ptr}{containing\_ptr}} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01113}\mbox{\hyperlink{structkblib_1_1containing__ptr_a9c802e07f9bfd6aa800d3d5ea93ee9d2}{01113}}    \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1containing__ptr_a9c802e07f9bfd6aa800d3d5ea93ee9d2}{operator*}}() noexcept -\/> T\& \{ \textcolor{keywordflow}{return} val; \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01117}\mbox{\hyperlink{structkblib_1_1containing__ptr_a1dbf05b259fbb8ef56d5d6cb49113cb6}{01117}}    \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1containing__ptr_a1dbf05b259fbb8ef56d5d6cb49113cb6}{operator*}}() const noexcept -\/> const T\& \{ \textcolor{keywordflow}{return} val; \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01118}01118 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01122}\mbox{\hyperlink{structkblib_1_1containing__ptr_a3ffb1edc8e74d5851737084f8c66b4c2}{01122}}    \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1containing__ptr_a3ffb1edc8e74d5851737084f8c66b4c2}{operator-\/>}}() noexcept -\/> T* \{ \textcolor{keywordflow}{return} \&val; \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01126}\mbox{\hyperlink{structkblib_1_1containing__ptr_a2967e02c6d1c866b352d7aefe8b4e155}{01126}}    \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1containing__ptr_a2967e02c6d1c866b352d7aefe8b4e155}{operator-\/>}}() const noexcept -\/> const T* \{ \textcolor{keywordflow}{return} \&val; \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01127}01127 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01131}\mbox{\hyperlink{structkblib_1_1containing__ptr_a72987dd4167ed55d78343191727cbd14}{01131}}    \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1containing__ptr_a72987dd4167ed55d78343191727cbd14}{get}}() noexcept -\/> T* \{ \textcolor{keywordflow}{return} \&val; \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01135}\mbox{\hyperlink{structkblib_1_1containing__ptr_ae2888c7e01d0371e350ddb648514c952}{01135}}    \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1containing__ptr_ae2888c7e01d0371e350ddb648514c952}{get}}() const noexcept -\/> const T* \{ \textcolor{keywordflow}{return} \&val; \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01136}01136 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01137}\mbox{\hyperlink{structkblib_1_1containing__ptr_a19103620d6c9af67bda7154104101ca5}{01137}}    T \mbox{\hyperlink{structkblib_1_1containing__ptr_a19103620d6c9af67bda7154104101ca5}{val}};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01138}01138 \};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01139}01139 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01140}01140 \textcolor{preprocessor}{\#if KBLIB\_USE\_CXX17}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01141}01141 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01148}01148 \textcolor{keyword}{template} <\textcolor{keyword}{typename} base\_iterator, \textcolor{keyword}{typename} operation>}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01149}\mbox{\hyperlink{classkblib_1_1transform__iterator}{01149}} \textcolor{keyword}{class }\mbox{\hyperlink{classkblib_1_1transform__iterator}{transform\_iterator}} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01150}01150  \textcolor{keyword}{private}:}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01151}01151    base\_iterator it;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01152}01152    operation op;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01153}01153 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01154}01154  \textcolor{keyword}{public}:}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01155}\mbox{\hyperlink{classkblib_1_1transform__iterator_a02228d419dd69c02f2eb12611195a8d7}{01155}}    \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1transform__iterator_a02228d419dd69c02f2eb12611195a8d7}{difference\_type}} = std::ptrdiff\_t;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01156}\mbox{\hyperlink{classkblib_1_1transform__iterator_a94aef5aac6c2f83307ba6d371e136ca4}{01156}}    \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1transform__iterator_a94aef5aac6c2f83307ba6d371e136ca4}{result\_type}} = \textcolor{keyword}{decltype}(\mbox{\hyperlink{namespacekblib_a9b10acd2ddaea118b990e1177f626722}{kblib::invoke}}(op, *it));}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01157}\mbox{\hyperlink{classkblib_1_1transform__iterator_a1886772f5691cb6a1449988eb4fe2440}{01157}}    \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1transform__iterator_a1886772f5691cb6a1449988eb4fe2440}{const\_result\_type}}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01158}01158        = \textcolor{keyword}{decltype}(\mbox{\hyperlink{namespacekblib_a9b10acd2ddaea118b990e1177f626722}{kblib::invoke}}(std::as\_const(op), *std::as\_const(it)));}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01159}\mbox{\hyperlink{classkblib_1_1transform__iterator_a5e428c32970f41f62b42d1d338493ffd}{01159}}    \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1transform__iterator_a5e428c32970f41f62b42d1d338493ffd}{value\_type}} = \mbox{\hyperlink{classkblib_1_1transform__iterator_a94aef5aac6c2f83307ba6d371e136ca4}{result\_type}};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01160}\mbox{\hyperlink{classkblib_1_1transform__iterator_a2fe3030bcc46de77b00e11a13c234f1c}{01160}}    \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1transform__iterator_a2fe3030bcc46de77b00e11a13c234f1c}{pointer}} = void;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01161}\mbox{\hyperlink{classkblib_1_1transform__iterator_a8a5db0bd5c6f80af9ca7b927ccc9bfaf}{01161}}    \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1transform__iterator_a8a5db0bd5c6f80af9ca7b927ccc9bfaf}{reference}} = \mbox{\hyperlink{classkblib_1_1transform__iterator_a5e428c32970f41f62b42d1d338493ffd}{value\_type}};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01162}\mbox{\hyperlink{classkblib_1_1transform__iterator_a97579a49d25c108b6aa89fb5bc94feb9}{01162}}    \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1transform__iterator_a97579a49d25c108b6aa89fb5bc94feb9}{iterator\_category}} = std::input\_iterator\_tag;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01163}01163 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01171}\mbox{\hyperlink{classkblib_1_1transform__iterator_a30ebb040770818ba0804743095752f8b}{01171}}    \mbox{\hyperlink{classkblib_1_1transform__iterator_a30ebb040770818ba0804743095752f8b}{transform\_iterator}}(base\_iterator \_it,}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01172}01172                       operation \_op) \textcolor{keyword}{noexcept}(\textcolor{keyword}{noexcept}(base\_iterator\{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01173}01173        \_it\}) and \textcolor{keyword}{noexcept}(std::is\_nothrow\_move\_constructible<operation>::value))}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01174}01174        : it(\_it)}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01175}01175        , op(std::move(\_op)) \{\}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01176}01176 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01182}\mbox{\hyperlink{classkblib_1_1transform__iterator_a45dbc8c657167842c46e8ff35f87e352}{01182}}    \mbox{\hyperlink{classkblib_1_1transform__iterator_a45dbc8c657167842c46e8ff35f87e352}{transform\_iterator}}(base\_iterator end\_it) \textcolor{keyword}{noexcept}(\textcolor{keyword}{noexcept}(base\_iterator\{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01183}01183        end\_it\}))}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01184}01184        : it(end\_it)}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01185}01185        , op() \{\}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01186}01186 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01192}\mbox{\hyperlink{classkblib_1_1transform__iterator_aa4b0789bf772c4526658710be3666afa}{01192}}    \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1transform__iterator_aa4b0789bf772c4526658710be3666afa}{operator*}}() noexcept(noexcept(\mbox{\hyperlink{namespacekblib}{kblib}}::\mbox{\hyperlink{namespacekblib_a9b10acd2ddaea118b990e1177f626722}{invoke}}(op, *it)))}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01193}01193        -\/> decltype(auto) \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01194}01194       \textcolor{keywordflow}{return} \mbox{\hyperlink{namespacekblib_a9b10acd2ddaea118b990e1177f626722}{kblib::invoke}}(op, *it);}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01195}01195    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01201}\mbox{\hyperlink{classkblib_1_1transform__iterator_aedbf67783a2c296666ba9ff5a462e790}{01201}}    \textcolor{keyword}{decltype}(\textcolor{keyword}{auto}) \textcolor{keyword}{operator}*() \textcolor{keyword}{const} \textcolor{keyword}{noexcept}(\textcolor{keyword}{noexcept}(\mbox{\hyperlink{namespacekblib_a9b10acd2ddaea118b990e1177f626722}{kblib::invoke}}(op, *it))) \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01202}01202       \textcolor{keywordflow}{return} \mbox{\hyperlink{namespacekblib_a9b10acd2ddaea118b990e1177f626722}{kblib::invoke}}(op, *it);}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01203}01203    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01204}01204 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01209}\mbox{\hyperlink{classkblib_1_1transform__iterator_a5fb6e004e063d548d6ace4344fc0be48}{01209}}    \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1transform__iterator_a5fb6e004e063d548d6ace4344fc0be48}{operator-\/>}}() noexcept(noexcept(\mbox{\hyperlink{namespacekblib}{kblib}}::\mbox{\hyperlink{namespacekblib_a9b10acd2ddaea118b990e1177f626722}{invoke}}(op, *it))) -\/> auto \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01210}01210       \textcolor{keywordflow}{return} \mbox{\hyperlink{structkblib_1_1containing__ptr}{containing\_ptr<result\_type>}}\{\{\mbox{\hyperlink{namespacekblib_a9b10acd2ddaea118b990e1177f626722}{kblib::invoke}}(op, *it)\}\};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01211}01211    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01216}\mbox{\hyperlink{classkblib_1_1transform__iterator_a2878d8b39d632bfa5e5c244f2f167b0e}{01216}}    \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1transform__iterator_a2878d8b39d632bfa5e5c244f2f167b0e}{operator-\/>}}() const noexcept(noexcept(\mbox{\hyperlink{namespacekblib}{kblib}}::\mbox{\hyperlink{namespacekblib_a9b10acd2ddaea118b990e1177f626722}{invoke}}(op, *it))) -\/> auto \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01217}01217       \textcolor{keywordflow}{return} \mbox{\hyperlink{structkblib_1_1containing__ptr}{containing\_ptr<const\_result\_type>}}\{\{\mbox{\hyperlink{namespacekblib_a9b10acd2ddaea118b990e1177f626722}{kblib::invoke}}(op, *it)\}\};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01218}01218    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01219}01219 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01223}\mbox{\hyperlink{classkblib_1_1transform__iterator_a5d17232ee68f4500d8c4a077be9009cc}{01223}}    \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1transform__iterator_a5d17232ee68f4500d8c4a077be9009cc}{operator++}}() noexcept(noexcept(++it)) -\/> \mbox{\hyperlink{classkblib_1_1transform__iterator}{transform\_iterator}}\& \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01224}01224       ++it;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01225}01225       \textcolor{keywordflow}{return} *\textcolor{keyword}{this};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01226}01226    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01227}01227 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01232}01232    [[deprecated(\textcolor{stringliteral}{"{}Needlessly copies op. Use preincrement instead."{}})]] \textcolor{keyword}{auto}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01233}\mbox{\hyperlink{classkblib_1_1transform__iterator_a827e50f3c280ca12d86848a63b0e254f}{01233}}    \mbox{\hyperlink{classkblib_1_1transform__iterator_a827e50f3c280ca12d86848a63b0e254f}{operator++}}(\textcolor{keywordtype}{int}) \textcolor{keyword}{noexcept}(\textcolor{keyword}{noexcept}(\mbox{\hyperlink{classkblib_1_1transform__iterator}{transform\_iterator}}\{it++, op\}))}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01234}01234        -\/> \mbox{\hyperlink{classkblib_1_1transform__iterator}{transform\_iterator}} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01235}01235       \textcolor{keywordflow}{return} \{it++, op\};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01236}01236    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01237}01237 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01238}\mbox{\hyperlink{classkblib_1_1transform__iterator_ab879b0ced417c902a30234f5189c049d}{01238}}    \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1transform__iterator_ab879b0ced417c902a30234f5189c049d}{base}}() const noexcept -\/> base\_iterator \{ \textcolor{keywordflow}{return} it; \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01239}01239 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01240}\mbox{\hyperlink{classkblib_1_1transform__iterator_aead1794163653f6c6829691ce24c95f7}{01240}}    \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1transform__iterator_aead1794163653f6c6829691ce24c95f7}{from\_base}}(base\_iterator it\_) \textcolor{keyword}{const}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01241}01241        \textcolor{keyword}{noexcept}(std::is\_nothrow\_copy\_constructible\_v<operation>)}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01242}01242            -\/> \mbox{\hyperlink{classkblib_1_1transform__iterator}{transform\_iterator}} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01243}01243       \textcolor{keywordflow}{return} \{it\_, op\};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01244}01244    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01245}01245 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01249}\mbox{\hyperlink{classkblib_1_1transform__iterator_ab6112b052d003ddb11f94db0266a5079}{01249}}    \textcolor{keyword}{friend} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1transform__iterator_ab6112b052d003ddb11f94db0266a5079}{operator==}}(\textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1transform__iterator}{transform\_iterator}}\& lhs,}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01250}01250                           \textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1transform__iterator}{transform\_iterator}}\& rhs) \textcolor{keyword}{noexcept} -\/> \textcolor{keywordtype}{bool} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01251}01251       \textcolor{keywordflow}{return} lhs.it == rhs.it;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01252}01252    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01253}01253 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01257}\mbox{\hyperlink{classkblib_1_1transform__iterator_ac9b8655a7bb927ea6794904a53ef66ea}{01257}}    \textcolor{keyword}{friend} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1transform__iterator_ac9b8655a7bb927ea6794904a53ef66ea}{operator!=}}(\textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1transform__iterator}{transform\_iterator}}\& lhs,}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01258}01258                           \textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1transform__iterator}{transform\_iterator}}\& rhs) \textcolor{keyword}{noexcept} -\/> \textcolor{keywordtype}{bool} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01259}01259       \textcolor{keywordflow}{return} lhs.it != rhs.it;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01260}01260    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01261}01261 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01262}01262    \textcolor{keyword}{template} <\textcolor{keyword}{typename} OIt>}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01263}\mbox{\hyperlink{classkblib_1_1transform__iterator_a5705317b59e361281ac258499ec38f0d}{01263}}    \textcolor{keyword}{friend} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1transform__iterator_a5705317b59e361281ac258499ec38f0d}{operator==}}(\textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1transform__iterator}{transform\_iterator}}\& lhs,}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01264}01264                           \textcolor{keyword}{const} OIt\& rhs) \textcolor{keyword}{noexcept} -\/> \textcolor{keywordtype}{bool} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01265}01265       \textcolor{keywordflow}{return} lhs.base() == rhs;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01266}01266    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01267}01267    \textcolor{keyword}{template} <\textcolor{keyword}{typename} OIt>}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01268}\mbox{\hyperlink{classkblib_1_1transform__iterator_a4299bf3acacce3a8864129e2392e6d0d}{01268}}    \textcolor{keyword}{friend} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1transform__iterator_a4299bf3acacce3a8864129e2392e6d0d}{operator==}}(\textcolor{keyword}{const} OIt\& lhs,}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01269}01269                           \textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1transform__iterator}{transform\_iterator}}\& rhs) \textcolor{keyword}{noexcept} -\/> \textcolor{keywordtype}{bool} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01270}01270       \textcolor{keywordflow}{return} lhs == rhs.base();}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01271}01271    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01272}01272 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01273}01273    \textcolor{keyword}{template} <\textcolor{keyword}{typename} OIt>}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01274}\mbox{\hyperlink{classkblib_1_1transform__iterator_abb5773835b73e3dbf64bbfd0adf66f94}{01274}}    \textcolor{keyword}{friend} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1transform__iterator_abb5773835b73e3dbf64bbfd0adf66f94}{operator!=}}(\textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1transform__iterator}{transform\_iterator}}\& lhs,}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01275}01275                           \textcolor{keyword}{const} OIt\& rhs) \textcolor{keyword}{noexcept} -\/> \textcolor{keywordtype}{bool} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01276}01276       \textcolor{keywordflow}{return} lhs.base() != rhs;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01277}01277    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01278}01278    \textcolor{keyword}{template} <\textcolor{keyword}{typename} OIt>}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01279}\mbox{\hyperlink{classkblib_1_1transform__iterator_a6a1a61b3e24431fa1d786477af665035}{01279}}    \textcolor{keyword}{friend} \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1transform__iterator_a6a1a61b3e24431fa1d786477af665035}{operator!=}}(\textcolor{keyword}{const} OIt\& lhs,}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01280}01280                           \textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1transform__iterator}{transform\_iterator}}\& rhs) \textcolor{keyword}{noexcept} -\/> \textcolor{keywordtype}{bool} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01281}01281       \textcolor{keywordflow}{return} lhs != rhs.base();}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01282}01282    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01283}01283 \};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01284}01284 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01285}01285 \textcolor{keyword}{template} <\textcolor{keyword}{typename} It, \textcolor{keyword}{typename} operation>}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01286}\mbox{\hyperlink{namespacekblib_aa807d817e32edd6ed91e4f151dde9ae2}{01286}} \mbox{\hyperlink{namespacekblib_aa807d817e32edd6ed91e4f151dde9ae2}{transform\_iterator}}(It, operation) -\/> \mbox{\hyperlink{classkblib_1_1transform__iterator}{transform\_iterator<It, operation>}};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01287}01287 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01297}01297 \textcolor{keyword}{template} <\textcolor{keyword}{typename} base\_iterator, \textcolor{keyword}{typename} operation>}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01298}\mbox{\hyperlink{namespacekblib_aed7bb6b5bb036248bdf3f0832e8404a8}{01298}} [[deprecated(\textcolor{stringliteral}{"{}use transformer instead"{}})]] \textcolor{keyword}{auto} \mbox{\hyperlink{namespacekblib_aed7bb6b5bb036248bdf3f0832e8404a8}{make\_transform\_iterator}}(}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01299}01299     base\_iterator it,}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01300}01300     operation}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01301}01301         op) \textcolor{keyword}{noexcept}(\textcolor{keyword}{noexcept}(\mbox{\hyperlink{classkblib_1_1transform__iterator}{transform\_iterator<base\_iterator, operation>}}\{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01302}01302     it, std::move(op)\})) -\/> transform\_iterator<base\_iterator, operation> \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01303}01303    \textcolor{keywordflow}{return} \{it, std::move(op)\};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01304}01304 \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01305}01305 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01313}01313 \textcolor{keyword}{template} <\textcolor{keyword}{typename} base\_iterator, \textcolor{keyword}{typename} operation>}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01314}\mbox{\hyperlink{namespacekblib_a05e897a858310bc166f65965eadf8f66}{01314}} \textcolor{keyword}{auto} \mbox{\hyperlink{namespacekblib_a05e897a858310bc166f65965eadf8f66}{transformer}}(base\_iterator it, operation op) \textcolor{keyword}{noexcept}(}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01315}01315     \textcolor{keyword}{noexcept}(\mbox{\hyperlink{classkblib_1_1transform__iterator}{transform\_iterator<base\_iterator, operation>}}\{it, std::move(op)\}))}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01316}01316     -\/> transform\_iterator<base\_iterator, operation> \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01317}01317    \textcolor{keywordflow}{return} \{it, std::move(op)\};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01318}01318 \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01319}01319 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01320}01320 \textcolor{keyword}{template} <\textcolor{keyword}{typename} It, \textcolor{keyword}{typename} EndIt, \textcolor{keyword}{typename} operation>}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01321}\mbox{\hyperlink{namespacekblib_a0f9b71b4a51492465cca27cdd0deeef6}{01321}} \textcolor{keyword}{auto} \mbox{\hyperlink{namespacekblib_a0f9b71b4a51492465cca27cdd0deeef6}{transform\_range}}(It begin, EndIt end, operation op) \textcolor{keyword}{noexcept}(}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01322}01322     \textcolor{keyword}{noexcept}(\mbox{\hyperlink{namespacekblib_a893a2961c20b0657dffbbd2fe8f362c4}{indirect}}(\mbox{\hyperlink{classkblib_1_1transform__iterator}{transform\_iterator}}\{begin, op\}, end))) -\/> \textcolor{keyword}{auto} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01323}01323    \textcolor{keywordflow}{return} \mbox{\hyperlink{namespacekblib_a893a2961c20b0657dffbbd2fe8f362c4}{indirect}}(\mbox{\hyperlink{namespacekblib_aa807d817e32edd6ed91e4f151dde9ae2}{transform\_iterator}}\{begin, op\}, end);}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01324}01324 \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01325}01325 \textcolor{preprocessor}{\#endif}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01326}01326 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01327}01327 \textcolor{keyword}{template} <\textcolor{keyword}{typename} InputIt1, \textcolor{keyword}{typename} EndIt, \textcolor{keyword}{typename} InputIt2>}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01328}\mbox{\hyperlink{structkblib_1_1zip__iterator}{01328}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1zip__iterator}{zip\_iterator}} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01329}\mbox{\hyperlink{structkblib_1_1zip__iterator_a7e1a4763e48c00715fa2637fe9ad9c3d}{01329}}    InputIt1 pos1\{\};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01330}\mbox{\hyperlink{structkblib_1_1zip__iterator_ad270eadc5377bee1c169568b6bd980d1}{01330}}    EndIt end1\{\};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01331}\mbox{\hyperlink{structkblib_1_1zip__iterator_ac5912dd062c5825dd8ce774f5365eb86}{01331}}    InputIt2 pos2\{\};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01332}01332 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01333}\mbox{\hyperlink{structkblib_1_1zip__iterator_a9ac62df038b82db20f0c8097772cf1ba}{01333}}    \textcolor{keyword}{constexpr} \textcolor{keyword}{static} \textcolor{keywordtype}{bool} is\_nothrow\_copyable}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01334}01334        = std::is\_nothrow\_copy\_constructible<InputIt1>::value}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01335}01335          and std::is\_nothrow\_copy\_constructible<EndIt>::value}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01336}01336          and std::is\_nothrow\_copy\_constructible<InputIt2>::value;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01337}01337 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01338}\mbox{\hyperlink{structkblib_1_1zip__iterator_a46aed170d7d8f944fe23ca2f90aaa604}{01338}}    \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1zip__iterator_a46aed170d7d8f944fe23ca2f90aaa604}{operator++}}() noexcept(noexcept(++pos1) and noexcept(++pos2))}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01339}01339        -\/> \mbox{\hyperlink{structkblib_1_1zip__iterator}{zip\_iterator}}\& \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01340}01340       ++pos1;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01341}01341       ++pos2;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01342}01342       \textcolor{keywordflow}{return} *\textcolor{keyword}{this};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01343}01343    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01344}\mbox{\hyperlink{structkblib_1_1zip__iterator_ade391e025aec9b67a7af40bc373250c3}{01344}}    \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1zip__iterator_ade391e025aec9b67a7af40bc373250c3}{operator++}}(\textcolor{keywordtype}{int}) \textcolor{keyword}{noexcept}(is\_nothrow\_copyable and \textcolor{keyword}{noexcept}(}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01345}01345        ++pos1) and \textcolor{keyword}{noexcept}(++pos2)) -\/> \textcolor{keyword}{const} \mbox{\hyperlink{structkblib_1_1zip__iterator}{zip\_iterator}} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01346}01346       \textcolor{keyword}{auto} tmp = *\textcolor{keyword}{this};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01347}01347       ++pos1;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01348}01348       ++pos2;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01349}01349       \textcolor{keywordflow}{return} tmp;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01350}01350    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01351}01351 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01352}\mbox{\hyperlink{structkblib_1_1zip__iterator_acb913d1dca80a6ed2a36b1d7fb4ed415}{01352}}    \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1zip__iterator_acb913d1dca80a6ed2a36b1d7fb4ed415}{operator*}}() const noexcept -\/> auto \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01353}01353       \textcolor{keywordflow}{return} std::forward\_as\_tuple(*pos1, *pos2);}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01354}01354    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01355}01355 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01356}\mbox{\hyperlink{structkblib_1_1zip__iterator_abfe898fc154789f3c555b7d3d5e13157}{01356}}    \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1zip__iterator_abfe898fc154789f3c555b7d3d5e13157}{begin}}() const noexcept(is\_nothrow\_copyable)}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01357}01357        -\/> \mbox{\hyperlink{structkblib_1_1zip__iterator}{zip\_iterator}} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01358}01358       \textcolor{keywordflow}{return} *\textcolor{keyword}{this};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01359}01359    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01360}\mbox{\hyperlink{structkblib_1_1zip__iterator_aa5c8f1248f51b5ebd63f5335d4ce9fe9}{01360}}    \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1zip__iterator_aa5c8f1248f51b5ebd63f5335d4ce9fe9}{end}}() const}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01361}01361        noexcept(\mbox{\hyperlink{namespacestd}{std}}::is\_nothrow\_copy\_constructible<EndIt>::value and}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01362}01362                     \mbox{\hyperlink{namespacestd}{std}}::is\_nothrow\_copy\_constructible<InputIt2>::value)}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01363}01363            -\/> \mbox{\hyperlink{structkblib_1_1zip__iterator}{zip\_iterator}}<EndIt, EndIt, InputIt2> \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01364}01364       \textcolor{keywordflow}{return} \{end1, end1\};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01365}01365    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01366}01366 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01367}\mbox{\hyperlink{structkblib_1_1zip__iterator_a5a582ce768af27541ce63a2f8dbc5606}{01367}}    \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{friend} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1zip__iterator_a5a582ce768af27541ce63a2f8dbc5606}{operator==}}(}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01368}01368        \textcolor{keyword}{const} \mbox{\hyperlink{structkblib_1_1zip__iterator}{zip\_iterator}}\& z1,}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01369}01369        \textcolor{keyword}{const} \mbox{\hyperlink{structkblib_1_1zip__iterator}{zip\_iterator}}\& z2) \textcolor{keyword}{noexcept}(\textcolor{keyword}{noexcept}(z1.pos1 == z2.pos1)) -\/> \textcolor{keywordtype}{bool} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01370}01370       \textcolor{keywordflow}{return} z1.pos1 == z2.pos1;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01371}01371    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01372}\mbox{\hyperlink{structkblib_1_1zip__iterator_a97a3497ce6ce328c270501836bdba31b}{01372}}    \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{friend} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1zip__iterator_a97a3497ce6ce328c270501836bdba31b}{operator!=}}(}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01373}01373        \textcolor{keyword}{const} \mbox{\hyperlink{structkblib_1_1zip__iterator}{zip\_iterator}}\& z1,}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01374}01374        \textcolor{keyword}{const} \mbox{\hyperlink{structkblib_1_1zip__iterator}{zip\_iterator}}\& z2) \textcolor{keyword}{noexcept}(\textcolor{keyword}{noexcept}(z1.pos1 != z2.pos1)) -\/> \textcolor{keywordtype}{bool} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01375}01375       \textcolor{keywordflow}{return} z1.pos1 != z2.pos1;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01376}01376    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01377}\mbox{\hyperlink{structkblib_1_1zip__iterator_a9dd28f3d470cc53e5da4a3d4db2adfb8}{01377}}    \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{friend} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1zip__iterator_a9dd28f3d470cc53e5da4a3d4db2adfb8}{operator==}}(}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01378}01378        \textcolor{keyword}{const} \mbox{\hyperlink{structkblib_1_1zip__iterator}{zip\_iterator}}\& z1,}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01379}01379        \mbox{\hyperlink{structkblib_1_1zip__iterator}{zip\_iterator<EndIt, EndIt, InputIt2>}} end) \textcolor{keyword}{noexcept}(\textcolor{keyword}{noexcept}(z1.pos1}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01380}01380                                                                    == end.val))}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01381}01381        -\/> \textcolor{keywordtype}{bool} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01382}01382       \textcolor{keywordflow}{return} z1.end1 == end.val;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01383}01383    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01384}\mbox{\hyperlink{structkblib_1_1zip__iterator_a62930b4e57f680dad2a08b65ff2d67dd}{01384}}    \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{friend} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1zip__iterator_a62930b4e57f680dad2a08b65ff2d67dd}{operator!=}}(}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01385}01385        \textcolor{keyword}{const} \mbox{\hyperlink{structkblib_1_1zip__iterator}{zip\_iterator}}\& z1,}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01386}01386        \mbox{\hyperlink{structkblib_1_1zip__iterator}{zip\_iterator<EndIt, EndIt, InputIt2>}} end) \textcolor{keyword}{noexcept}(\textcolor{keyword}{noexcept}(z1.pos1}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01387}01387                                                                    == end.val))}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01388}01388        -\/> \textcolor{keywordtype}{bool} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01389}01389       \textcolor{keywordflow}{return} z1.end1 != end.val;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01390}01390    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01391}01391 \};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01392}01392 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01393}01393 \textcolor{keyword}{template} <\textcolor{keyword}{typename} It1, \textcolor{keyword}{typename} It2>}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01394}\mbox{\hyperlink{structkblib_1_1zip__iterator_3_01_it1_00_01_it1_00_01_it2_01_4}{01394}} \textcolor{keyword}{struct }\mbox{\hyperlink{structkblib_1_1zip__iterator}{zip\_iterator}}<It1, It1, It2> \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01395}\mbox{\hyperlink{structkblib_1_1zip__iterator_3_01_it1_00_01_it1_00_01_it2_01_4_a40990b5737d3cf555f43c8ce419a8316}{01395}}    It1 pos1\{\};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01396}\mbox{\hyperlink{structkblib_1_1zip__iterator_3_01_it1_00_01_it1_00_01_it2_01_4_a02db67ba6091db472bf771d844431fc8}{01396}}    It1 end1\{\};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01397}\mbox{\hyperlink{structkblib_1_1zip__iterator_3_01_it1_00_01_it1_00_01_it2_01_4_a1486c66d1a6899c1515d685fe4eb2ded}{01397}}    It2 pos2\{\};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01398}01398 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01399}\mbox{\hyperlink{structkblib_1_1zip__iterator_3_01_it1_00_01_it1_00_01_it2_01_4_a987bda3dca9ef8d2b6438a87184c1e31}{01399}}    \textcolor{keyword}{constexpr} \textcolor{keyword}{static} \textcolor{keywordtype}{bool} is\_nothrow\_copyable}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01400}01400        = std::is\_nothrow\_copy\_constructible<It1>::value}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01401}01401          and std::is\_nothrow\_copy\_constructible<It2>::value;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01402}01402 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01403}\mbox{\hyperlink{structkblib_1_1zip__iterator_3_01_it1_00_01_it1_00_01_it2_01_4_a23c221b6191a1a8b68d3026a65917d3f}{01403}}    \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1zip__iterator_3_01_it1_00_01_it1_00_01_it2_01_4_a23c221b6191a1a8b68d3026a65917d3f}{operator++}}() noexcept(noexcept(++pos1)) -\/> \mbox{\hyperlink{structkblib_1_1zip__iterator}{zip\_iterator}}\& \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01404}01404       ++pos1;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01405}01405       ++pos2;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01406}01406       \textcolor{keywordflow}{return} *\textcolor{keyword}{this};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01407}01407    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01408}\mbox{\hyperlink{structkblib_1_1zip__iterator_3_01_it1_00_01_it1_00_01_it2_01_4_a75d534e3ff333f4f8d06640534d33ddb}{01408}}    \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1zip__iterator_3_01_it1_00_01_it1_00_01_it2_01_4_a75d534e3ff333f4f8d06640534d33ddb}{operator++}}(\textcolor{keywordtype}{int}) \textcolor{keyword}{noexcept}(is\_nothrow\_copyable and \textcolor{keyword}{noexcept}(++pos1))}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01409}01409        -\/> \textcolor{keyword}{const} \mbox{\hyperlink{structkblib_1_1zip__iterator}{zip\_iterator}} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01410}01410       \textcolor{keyword}{auto} tmp = *\textcolor{keyword}{this};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01411}01411       ++pos1;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01412}01412       ++pos2;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01413}01413       \textcolor{keywordflow}{return} tmp;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01414}01414    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01415}01415 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01416}\mbox{\hyperlink{structkblib_1_1zip__iterator_3_01_it1_00_01_it1_00_01_it2_01_4_a2476301182254960b4663c67fab8c69c}{01416}}    \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1zip__iterator_3_01_it1_00_01_it1_00_01_it2_01_4_a2476301182254960b4663c67fab8c69c}{operator*}}() -\/> \textcolor{keyword}{auto} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01417}01417       \textcolor{keywordflow}{return} std::forward\_as\_tuple(*pos1, *pos2);}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01418}01418    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01419}01419 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01420}\mbox{\hyperlink{structkblib_1_1zip__iterator_3_01_it1_00_01_it1_00_01_it2_01_4_a748f9442c3fb5c1c27cdcef3c606ca08}{01420}}    \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1zip__iterator_3_01_it1_00_01_it1_00_01_it2_01_4_a748f9442c3fb5c1c27cdcef3c606ca08}{begin}}() const noexcept(is\_nothrow\_copyable)}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01421}01421        -\/> \mbox{\hyperlink{structkblib_1_1zip__iterator}{zip\_iterator}} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01422}01422       \textcolor{keywordflow}{return} *\textcolor{keyword}{this};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01423}01423    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01424}\mbox{\hyperlink{structkblib_1_1zip__iterator_3_01_it1_00_01_it1_00_01_it2_01_4_a7ae57d7cada9676f2b96d97da6bd7b18}{01424}}    \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1zip__iterator_3_01_it1_00_01_it1_00_01_it2_01_4_a7ae57d7cada9676f2b96d97da6bd7b18}{end}}() const}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01425}01425        noexcept(\mbox{\hyperlink{namespacestd}{std}}::is\_nothrow\_copy\_constructible<It1>::value)}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01426}01426            -\/> \mbox{\hyperlink{structkblib_1_1zip__iterator}{zip\_iterator}} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01427}01427       \textcolor{keywordflow}{return} \{end1, end1, pos2\};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01428}01428    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01429}01429 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01430}\mbox{\hyperlink{structkblib_1_1zip__iterator_3_01_it1_00_01_it1_00_01_it2_01_4_a5a582ce768af27541ce63a2f8dbc5606}{01430}}    \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{friend} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1zip__iterator_3_01_it1_00_01_it1_00_01_it2_01_4_a5a582ce768af27541ce63a2f8dbc5606}{operator==}}(}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01431}01431        \textcolor{keyword}{const} \mbox{\hyperlink{structkblib_1_1zip__iterator}{zip\_iterator}}\& z1,}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01432}01432        \textcolor{keyword}{const} \mbox{\hyperlink{structkblib_1_1zip__iterator}{zip\_iterator}}\& z2) \textcolor{keyword}{noexcept}(\textcolor{keyword}{noexcept}(z1.pos1 == z2.pos1)) -\/> \textcolor{keywordtype}{bool} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01433}01433       \textcolor{keywordflow}{return} z1.pos1 == z2.pos1;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01434}01434    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01435}\mbox{\hyperlink{structkblib_1_1zip__iterator_3_01_it1_00_01_it1_00_01_it2_01_4_a470d795de8ac51841f6293c6c0131229}{01435}}    \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{friend} \textcolor{keyword}{auto} \mbox{\hyperlink{structkblib_1_1zip__iterator_3_01_it1_00_01_it1_00_01_it2_01_4_a470d795de8ac51841f6293c6c0131229}{operator!=}}(}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01436}01436        \textcolor{keyword}{const} \mbox{\hyperlink{structkblib_1_1zip__iterator}{zip\_iterator}}\& z1,}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01437}01437        \textcolor{keyword}{const} \mbox{\hyperlink{structkblib_1_1zip__iterator}{zip\_iterator}}\& z2) \textcolor{keyword}{noexcept}(\textcolor{keyword}{noexcept}(z1.pos1 == z2.pos1)) -\/> \textcolor{keywordtype}{bool} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01438}01438       \textcolor{keywordflow}{return} z1.pos1 != z2.pos1;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01439}01439    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01440}01440 \};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01441}01441 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01453}01453 \textcolor{keyword}{template} <\textcolor{keyword}{typename} InputIt1, \textcolor{keyword}{typename} EndIt, \textcolor{keyword}{typename} InputIt2>}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01454}\mbox{\hyperlink{namespacekblib_a0768784de97af5384c76b4009f22fb31}{01454}} \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{auto} \mbox{\hyperlink{namespacekblib_af06b17342da0e55aff646066ce8c283d}{zip}}(InputIt1 begin1, EndIt end1, InputIt2 begin2) \textcolor{keyword}{noexcept}(}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01455}01455     \mbox{\hyperlink{structkblib_1_1zip__iterator}{zip\_iterator<InputIt1, EndIt, InputIt2>::is\_nothrow\_copyable}})}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01456}01456     -\/> \mbox{\hyperlink{structkblib_1_1zip__iterator}{zip\_iterator<InputIt1, EndIt, InputIt2>}} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01457}01457    \textcolor{keywordflow}{return} \{begin1, end1, begin2\};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01458}01458 \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01459}01459 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01469}01469 \textcolor{keyword}{template} <\textcolor{keyword}{typename} Range1, \textcolor{keyword}{typename} Range2>}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01470}\mbox{\hyperlink{namespacekblib_af06b17342da0e55aff646066ce8c283d}{01470}} \mbox{\hyperlink{tdecl_8h_a7f62d0731631a0e7675f45924b7f5ea0}{KBLIB\_NODISCARD}} \textcolor{keyword}{auto} \mbox{\hyperlink{namespacekblib_af06b17342da0e55aff646066ce8c283d}{zip}}(Range1\&\& r1, Range2\&\& r2) \textcolor{keyword}{noexcept}(}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01471}01471     \mbox{\hyperlink{structkblib_1_1zip__iterator}{zip\_iterator}}<\textcolor{keyword}{decltype}(begin(r1)), \textcolor{keyword}{decltype}(end(r1)),}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01472}01472                  \textcolor{keyword}{decltype}(begin(r2))>::is\_nothrow\_copyable)}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01473}01473     -\/> \mbox{\hyperlink{structkblib_1_1zip__iterator}{zip\_iterator}}<\textcolor{keyword}{decltype}(begin(r1)), \textcolor{keyword}{decltype}(end(r1)),}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01474}01474                     \textcolor{keyword}{decltype}(begin(r2))> \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01475}01475    \textcolor{keywordflow}{return} \{begin(r1), end(r1), begin(r2)\};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01476}01476 \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01477}01477 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01479}01479 \textcolor{keyword}{template} <\textcolor{keyword}{typename} ForwardIt, \textcolor{keyword}{typename} EndIt>}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01480}\mbox{\hyperlink{classkblib_1_1adjacent__iterator}{01480}} \textcolor{keyword}{class }\mbox{\hyperlink{classkblib_1_1adjacent__iterator}{adjacent\_iterator}} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01481}01481  \textcolor{keyword}{public}:}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01482}\mbox{\hyperlink{classkblib_1_1adjacent__iterator_a11b90917ad90184e3eae443633eec6a1}{01482}}    \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1adjacent__iterator_a11b90917ad90184e3eae443633eec6a1}{difference\_type}} = std::ptrdiff\_t;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01483}\mbox{\hyperlink{classkblib_1_1adjacent__iterator_a75c20b2ecf2537cf64c242d584bc8c7b}{01483}}    \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1adjacent__iterator_a75c20b2ecf2537cf64c242d584bc8c7b}{base\_reference}} = \textcolor{keyword}{typename} std::iterator\_traits<ForwardIt>::reference;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01484}\mbox{\hyperlink{classkblib_1_1adjacent__iterator_a588c521234677de4169d38018973f7a5}{01484}}    \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1adjacent__iterator_a588c521234677de4169d38018973f7a5}{value\_type}} = std::pair<base\_reference, base\_reference>;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01485}\mbox{\hyperlink{classkblib_1_1adjacent__iterator_aa760511bd608571930a332d779575ee4}{01485}}    \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1adjacent__iterator_aa760511bd608571930a332d779575ee4}{pointer}} = void;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01486}\mbox{\hyperlink{classkblib_1_1adjacent__iterator_a615f7c9cb408682a160a6641ea5b8b8e}{01486}}    \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1adjacent__iterator_a615f7c9cb408682a160a6641ea5b8b8e}{reference}} = \mbox{\hyperlink{classkblib_1_1adjacent__iterator_a588c521234677de4169d38018973f7a5}{value\_type}};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01487}\mbox{\hyperlink{classkblib_1_1adjacent__iterator_a08bf0f681d552710137143015d90d6ea}{01487}}    \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1adjacent__iterator_a08bf0f681d552710137143015d90d6ea}{iterator\_category}} = std::input\_iterator\_tag;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01488}01488 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01489}01489  \textcolor{keyword}{private}:}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01490}01490    ForwardIt it;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01491}01491 \};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01492}01492 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01499}01499 \textcolor{keyword}{template} <\textcolor{keyword}{typename} Container, \textcolor{keyword}{typename} F>}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01500}\mbox{\hyperlink{classkblib_1_1back__insert__iterator___f}{01500}} \textcolor{keyword}{class }\mbox{\hyperlink{classkblib_1_1back__insert__iterator___f}{back\_insert\_iterator\_F}} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01501}01501  \textcolor{keyword}{public}:}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01508}\mbox{\hyperlink{classkblib_1_1back__insert__iterator___f_a9fa18d40886231566e739f903a61a14c}{01508}}    \textcolor{keyword}{explicit} \mbox{\hyperlink{classkblib_1_1back__insert__iterator___f_a9fa18d40886231566e739f903a61a14c}{back\_insert\_iterator\_F}}(Container\& c, F f)}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01509}01509        : container(c)}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01510}01510        , fun(\mbox{\hyperlink{namespacestd}{std}}::\mbox{\hyperlink{namespacekblib_a2cc6d0e618d41f45deaaa5c6c357ed7aa3734a903022249b3010be1897042568e}{move}}(f)) \{\}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01511}01511 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01512}\mbox{\hyperlink{classkblib_1_1back__insert__iterator___f_acaa046f4aeb902ee763c778f80b64852}{01512}}    \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1back__insert__iterator___f_acaa046f4aeb902ee763c778f80b64852}{value\_type}} = void;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01513}\mbox{\hyperlink{classkblib_1_1back__insert__iterator___f_a2101e9525dcdb512c6cb5b1c8dc59baf}{01513}}    \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1back__insert__iterator___f_a2101e9525dcdb512c6cb5b1c8dc59baf}{difference\_type}} = void;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01514}\mbox{\hyperlink{classkblib_1_1back__insert__iterator___f_a602984b761a231e9cdf22f097399d605}{01514}}    \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1back__insert__iterator___f_a602984b761a231e9cdf22f097399d605}{pointer}} = void;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01515}\mbox{\hyperlink{classkblib_1_1back__insert__iterator___f_add2bfd7ffa380fbe49edcc4e0af08ccd}{01515}}    \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1back__insert__iterator___f_add2bfd7ffa380fbe49edcc4e0af08ccd}{reference}} = void;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01516}\mbox{\hyperlink{classkblib_1_1back__insert__iterator___f_a23bdfed8ea79672e24163f58efb39bab}{01516}}    \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1back__insert__iterator___f_a23bdfed8ea79672e24163f58efb39bab}{iterator\_category}} = std::output\_iterator\_tag;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01517}01517 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01518}01518    \textcolor{keyword}{template} <\textcolor{keyword}{typename} V>}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01526}\mbox{\hyperlink{classkblib_1_1back__insert__iterator___f_a9f9b168de156becfe3821ed22a42fe25}{01526}}    \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1back__insert__iterator___f_a9f9b168de156becfe3821ed22a42fe25}{operator=}}(V\&\& value) -\/> \mbox{\hyperlink{classkblib_1_1back__insert__iterator___f}{back\_insert\_iterator\_F}}\& \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01527}01527       container.push\_back(\mbox{\hyperlink{namespacekblib_a9b10acd2ddaea118b990e1177f626722}{invoke}}(fun, std::forward<V>(value)));}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01528}01528       \textcolor{keywordflow}{return} *\textcolor{keyword}{this};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01529}01529    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01530}01530 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01534}\mbox{\hyperlink{classkblib_1_1back__insert__iterator___f_a5c02586f5092465ccfaabd732763454a}{01534}}    \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1back__insert__iterator___f_a5c02586f5092465ccfaabd732763454a}{operator*}}() -\/> \mbox{\hyperlink{classkblib_1_1back__insert__iterator___f}{back\_insert\_iterator\_F}}\& \{ \textcolor{keywordflow}{return} *\textcolor{keyword}{this}; \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01538}\mbox{\hyperlink{classkblib_1_1back__insert__iterator___f_aada24e18aaf968432b0c9082149bb0fa}{01538}}    \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1back__insert__iterator___f_aada24e18aaf968432b0c9082149bb0fa}{operator++}}() -\/> \mbox{\hyperlink{classkblib_1_1back__insert__iterator___f}{back\_insert\_iterator\_F}}\& \{ \textcolor{keywordflow}{return} *\textcolor{keyword}{this}; \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01539}01539 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01540}01540  \textcolor{keyword}{private}:}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01541}01541    Container\& container;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01542}01542    F fun;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01543}01543 \};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01544}01544 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01549}01549 \textcolor{keyword}{template} <\textcolor{keyword}{typename} F>}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01550}\mbox{\hyperlink{classkblib_1_1consume__iterator}{01550}} \textcolor{keyword}{class }\mbox{\hyperlink{classkblib_1_1consume__iterator}{consume\_iterator}} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01551}01551  \textcolor{keyword}{private}:}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01552}01552    F fun;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01553}01553 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01554}01554  \textcolor{keyword}{public}:}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01555}\mbox{\hyperlink{classkblib_1_1consume__iterator_a81cde5eec46e2b75407bef70b48562dc}{01555}}    \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1consume__iterator_a81cde5eec46e2b75407bef70b48562dc}{value\_type}} = void;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01556}\mbox{\hyperlink{classkblib_1_1consume__iterator_a93a1b11db105c8989e51c1973dc3e4dc}{01556}}    \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1consume__iterator_a93a1b11db105c8989e51c1973dc3e4dc}{difference\_type}} = void;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01557}\mbox{\hyperlink{classkblib_1_1consume__iterator_a336329a5c090935c81adf1f817a8a853}{01557}}    \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1consume__iterator_a336329a5c090935c81adf1f817a8a853}{pointer}} = void;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01558}\mbox{\hyperlink{classkblib_1_1consume__iterator_a7506aacae969baa4aa39083c70ca98b9}{01558}}    \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1consume__iterator_a7506aacae969baa4aa39083c70ca98b9}{reference}} = void;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01559}\mbox{\hyperlink{classkblib_1_1consume__iterator_a2c560b450f20de6596db3d57de35f3df}{01559}}    \textcolor{keyword}{using }\mbox{\hyperlink{classkblib_1_1consume__iterator_a2c560b450f20de6596db3d57de35f3df}{iterator\_category}} = std::output\_iterator\_tag;}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01560}01560 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01566}\mbox{\hyperlink{classkblib_1_1consume__iterator_a62c77a5c20369df5deef0a0bb5efebc6}{01566}}    \textcolor{keyword}{explicit} \mbox{\hyperlink{classkblib_1_1consume__iterator_a62c77a5c20369df5deef0a0bb5efebc6}{consume\_iterator}}(F f)}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01567}01567        : fun(\mbox{\hyperlink{namespacestd}{std}}::\mbox{\hyperlink{namespacekblib_a2cc6d0e618d41f45deaaa5c6c357ed7aa3734a903022249b3010be1897042568e}{move}}(f)) \{\}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01568}01568 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01569}\mbox{\hyperlink{classkblib_1_1consume__iterator_a23d169fca2c7fd8e11bde2c1f25c7054}{01569}}    \mbox{\hyperlink{classkblib_1_1consume__iterator_a23d169fca2c7fd8e11bde2c1f25c7054}{consume\_iterator}}(\textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1consume__iterator}{consume\_iterator}}\&) = \textcolor{keywordflow}{default};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01570}\mbox{\hyperlink{classkblib_1_1consume__iterator_ad320dc49238ed760ce28832769babfa8}{01570}}    \mbox{\hyperlink{classkblib_1_1consume__iterator_ad320dc49238ed760ce28832769babfa8}{consume\_iterator}}(\mbox{\hyperlink{classkblib_1_1consume__iterator}{consume\_iterator}}\&\&) = \textcolor{keywordflow}{default};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01571}\mbox{\hyperlink{classkblib_1_1consume__iterator_a54c962299e5378a857732ae5024c0fd6}{01571}}    \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1consume__iterator_a54c962299e5378a857732ae5024c0fd6}{operator=}}(\textcolor{keyword}{const} \mbox{\hyperlink{classkblib_1_1consume__iterator}{consume\_iterator}}\&) \& -\/> \mbox{\hyperlink{classkblib_1_1consume__iterator}{consume\_iterator}}\& = \textcolor{keywordflow}{default};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01572}\mbox{\hyperlink{classkblib_1_1consume__iterator_af8231c388ef7b4e115187983cf5fe282}{01572}}    \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1consume__iterator_af8231c388ef7b4e115187983cf5fe282}{operator=}}(\mbox{\hyperlink{classkblib_1_1consume__iterator}{consume\_iterator}}\&\&) \& -\/> \mbox{\hyperlink{classkblib_1_1consume__iterator}{consume\_iterator}}\& = \textcolor{keywordflow}{default};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01573}\mbox{\hyperlink{classkblib_1_1consume__iterator_a6e19bee47a0745a49021612c36126d40}{01573}}    \mbox{\hyperlink{classkblib_1_1consume__iterator_a6e19bee47a0745a49021612c36126d40}{\string~consume\_iterator}}() = \textcolor{keywordflow}{default};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01574}01574 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01581}01581    \textcolor{keyword}{template} <\textcolor{keyword}{typename} V>}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01582}\mbox{\hyperlink{classkblib_1_1consume__iterator_ab5d70bbb5a0be3ad39a3edbbcc16ec9c}{01582}}    \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1consume__iterator_ab5d70bbb5a0be3ad39a3edbbcc16ec9c}{operator=}}(V\&\& value) \textcolor{keyword}{noexcept}(}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01583}01583        \textcolor{keyword}{noexcept}(\mbox{\hyperlink{namespacekblib_a9b10acd2ddaea118b990e1177f626722}{kblib::invoke}}(fun, std::forward<V>(value))))}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01584}01584        -\/> \mbox{\hyperlink{namespacekblib_a3cec35675700d7e15c9139e0497768e6}{kblib::ignore\_t<decltype(kblib::invoke(fun, std::forward<V>}}(value))),}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01585}01585                           \mbox{\hyperlink{classkblib_1_1consume__iterator}{consume\_iterator}}\&> \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01586}01586       \mbox{\hyperlink{namespacekblib_a9b10acd2ddaea118b990e1177f626722}{kblib::invoke}}(fun, std::forward<V>(value));}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01587}01587       \textcolor{keywordflow}{return} *\textcolor{keyword}{this};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01588}01588    \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01589}01589 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01593}\mbox{\hyperlink{classkblib_1_1consume__iterator_aff18ad61701a6ec7fe3a2273dec694ae}{01593}}    \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1consume__iterator_aff18ad61701a6ec7fe3a2273dec694ae}{operator*}}() -\/> \mbox{\hyperlink{classkblib_1_1consume__iterator}{consume\_iterator}}\& \{ \textcolor{keywordflow}{return} *\textcolor{keyword}{this}; \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01597}\mbox{\hyperlink{classkblib_1_1consume__iterator_ae5bbcd29d31d402ca64421f319eaea5d}{01597}}    \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1consume__iterator_ae5bbcd29d31d402ca64421f319eaea5d}{operator++}}() -\/> \mbox{\hyperlink{classkblib_1_1consume__iterator}{consume\_iterator}}\& \{ \textcolor{keywordflow}{return} *\textcolor{keyword}{this}; \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01601}\mbox{\hyperlink{classkblib_1_1consume__iterator_acb963f8723b97e5fe983b92e90feb62d}{01601}}    \textcolor{keyword}{auto} \mbox{\hyperlink{classkblib_1_1consume__iterator_acb963f8723b97e5fe983b92e90feb62d}{operator++}}(\textcolor{keywordtype}{int}) -\/> \mbox{\hyperlink{classkblib_1_1consume__iterator}{consume\_iterator}}\& \{ \textcolor{keywordflow}{return} *\textcolor{keyword}{this}; \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01602}01602 \};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01603}01603 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01613}01613 \textcolor{keyword}{template} <\textcolor{keyword}{typename} F>}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01614}\mbox{\hyperlink{namespacekblib_a18d941bdcaa41e86334ca14ffa954b28}{01614}} \textcolor{keyword}{auto} \mbox{\hyperlink{namespacekblib_a18d941bdcaa41e86334ca14ffa954b28}{consumer}}(F f) -\/> \mbox{\hyperlink{classkblib_1_1consume__iterator}{consume\_iterator<F>}} \{}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01615}01615    \textcolor{keywordflow}{return} \mbox{\hyperlink{classkblib_1_1consume__iterator}{consume\_iterator<F>}}\{std::move(f)\};}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01616}01616 \}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01617}01617 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01618}01618 \} \textcolor{comment}{// namespace kblib}}
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01619}01619 }
\DoxyCodeLine{\Hypertarget{iterators_8h_source_l01620}01620 \textcolor{preprocessor}{\#endif }\textcolor{comment}{// KBLIB\_ITERATORS\_H}}

\end{DoxyCode}
