\hypertarget{visitation__benchmarks_8cpp_source}{}\doxysection{visitation\+\_\+benchmarks.\+cpp}
\label{visitation__benchmarks_8cpp_source}\index{tests/visitation\_benchmarks.cpp@{tests/visitation\_benchmarks.cpp}}
\mbox{\hyperlink{visitation__benchmarks_8cpp}{Go to the documentation of this file.}}
\begin{DoxyCode}{0}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00001}00001 \textcolor{comment}{/* *****************************************************************************}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00002}00002 \textcolor{comment}{ * \%\{QMAKE\_PROJECT\_NAME\}}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00003}00003 \textcolor{comment}{ * Copyright (c) \%YEAR\% killerbee}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00004}00004 \textcolor{comment}{ *}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00005}00005 \textcolor{comment}{ * This program is free software: you can redistribute it and/or modify}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00006}00006 \textcolor{comment}{ * it under the terms of the GNU General Public License as published by}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00007}00007 \textcolor{comment}{ * the Free Software Foundation, either version 3 of the License, or}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00008}00008 \textcolor{comment}{ * (at your option) any later version.}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00009}00009 \textcolor{comment}{ *}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00010}00010 \textcolor{comment}{ * This program is distributed in the hope that it will be useful,}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00011}00011 \textcolor{comment}{ * but WITHOUT ANY WARRANTY; without even the implied warranty of}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00012}00012 \textcolor{comment}{ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00013}00013 \textcolor{comment}{ * GNU General Public License for more details.}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00014}00014 \textcolor{comment}{ *}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00015}00015 \textcolor{comment}{ * You should have received a copy of the GNU General Public License}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00016}00016 \textcolor{comment}{ * along with this program.  If not, see <https://www.gnu.org/licenses/>.}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00017}00017 \textcolor{comment}{ * ****************************************************************************/}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00018}00018 \textcolor{preprocessor}{\#include "{}\mbox{\hyperlink{poly__obj_8h}{kblib/poly\_obj.h}}"{}}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00019}00019 }
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00020}\mbox{\hyperlink{visitation__benchmarks_8cpp_a4a227915957ab16187389713b5f20dca}{00020}} \textcolor{preprocessor}{\#define CATCH\_CONFIG\_ENABLE\_BENCHMARKING}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00021}00021 \textcolor{preprocessor}{\#include "{}catch.hpp"{}}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00022}00022 }
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00023}00023 \textcolor{comment}{//\#define FAST\_TEST}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00024}00024 }
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00025}00025 \textcolor{preprocessor}{\#if KBLIB\_USE\_CXX17}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00026}00026 }
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00027}00027 \textcolor{preprocessor}{\#  ifndef FAST\_TEST}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00028}00028 }
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00029}00029 \textcolor{keyword}{namespace }\{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00030}00030 \textcolor{keyword}{struct }Base \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00031}00031    \textcolor{keyword}{virtual} \textcolor{keyword}{auto} operator()() \textcolor{keyword}{const} \textcolor{keyword}{noexcept} -\/> \textcolor{keywordtype}{unsigned} = 0;}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00032}00032    Base() = \textcolor{keywordflow}{default};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00033}00033    Base(\textcolor{keyword}{const} Base\&) = \textcolor{keywordflow}{default};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00034}00034    Base(Base\&\&) \textcolor{keyword}{noexcept} = \textcolor{keywordflow}{default};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00035}00035    \textcolor{keyword}{virtual} \string~Base() = \textcolor{keywordflow}{default};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00036}00036 }
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00037}00037    \textcolor{comment}{// this is used, but the compiler doesn't think so because it's in a .cpp}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00038}00038    \textcolor{comment}{// file}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00039}00039    [[maybe\_unused]] \textcolor{keyword}{constexpr} \textcolor{keyword}{static} \textcolor{keyword}{inline} std::size\_t max\_derived\_size}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00040}00040        = \textcolor{keyword}{sizeof}(unsigned);}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00041}00041 \};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00042}00042 }
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00043}00043 \textcolor{keyword}{struct }thrower final : Base \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00044}00044    \textcolor{keyword}{auto} operator()() \textcolor{keyword}{const} \textcolor{keyword}{noexcept} -\/> \textcolor{keywordtype}{unsigned} \textcolor{keyword}{override} \{ \textcolor{keywordflow}{return} member; \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00045}00045 }
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00046}00046    \textcolor{keywordtype}{unsigned} member;}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00047}00047 }
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00048}00048    thrower(\textcolor{keywordtype}{unsigned} i = 0)}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00049}00049        : member(i) \{\}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00050}00050    thrower(\textcolor{keyword}{const} thrower\&) = \textcolor{keywordflow}{default};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00051}00051 }
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00052}00052    \textcolor{keyword}{auto} operator=(\textcolor{keyword}{const} thrower\& other) \& -\/> thrower\& \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00053}00053       check\_throw(other.member);}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00054}00054       member = other.member;}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00055}00055       \textcolor{keywordflow}{return} *\textcolor{keyword}{this};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00056}00056    \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00057}00057 }
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00058}00058  \textcolor{keyword}{private}:}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00059}00059    \textcolor{keyword}{static} \textcolor{keyword}{auto} check\_throw(\textcolor{keywordtype}{unsigned} v) -\/> \textcolor{keywordtype}{void} \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00060}00060       \textcolor{keywordflow}{if} ((v \& 7u) == 0) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00061}00061          \textcolor{keywordflow}{throw} 0;}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00062}00062       \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00063}00063    \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00064}00064 \};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00065}00065 }
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00066}00066 \textcolor{keyword}{struct }fptr \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00067}00067    \textcolor{keywordtype}{unsigned} member;}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00068}00068    \textcolor{keyword}{auto} (*p)(\textcolor{keyword}{const} fptr*) \textcolor{keyword}{noexcept} -\/> \textcolor{keywordtype}{unsigned};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00069}00069    \textcolor{keyword}{auto} operator()() \textcolor{keyword}{const} \textcolor{keyword}{noexcept} -\/> \textcolor{keywordtype}{unsigned} \{ \textcolor{keywordflow}{return} p(\textcolor{keyword}{this}); \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00070}00070 \};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00071}00071 }
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00072}\mbox{\hyperlink{visitation__benchmarks_8cpp_ad2a78c18d67d98fcb66280429013e808}{00072}} \textcolor{preprocessor}{\#     define MAKE\_DERIVED2(Number, Expr)                           \(\backslash\)}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00073}00073 \textcolor{preprocessor}{         auto fptr\_d\#\#Number(const fptr* p) noexcept-\/>unsigned \{    \(\backslash\)}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00074}00074 \textcolor{preprocessor}{            const auto x = p-\/>member;                               \(\backslash\)}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00075}00075 \textcolor{preprocessor}{            return Expr;                                            \(\backslash\)}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00076}00076 \textcolor{preprocessor}{         \}                                                          \(\backslash\)}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00077}00077 \textcolor{preprocessor}{         struct Derived\#\#Number final : Base \{                      \(\backslash\)}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00078}00078 \textcolor{preprocessor}{            auto operator()() const noexcept -\/> unsigned override \{ \(\backslash\)}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00079}00079 \textcolor{preprocessor}{               return Expr;                                         \(\backslash\)}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00080}00080 \textcolor{preprocessor}{            \}                                                       \(\backslash\)}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00081}00081 \textcolor{preprocessor}{            unsigned x;                                             \(\backslash\)}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00082}00082 \textcolor{preprocessor}{            Derived\#\#Number(unsigned i)                             \(\backslash\)}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00083}00083 \textcolor{preprocessor}{                : x(i) \{\}                                           \(\backslash\)}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00084}00084 \textcolor{preprocessor}{         \}}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00085}\mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{00085}} \textcolor{preprocessor}{\#     define MAKE\_DERIVED(Number, Expr) MAKE\_DERIVED2(Number, Expr)}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00086}00086 }
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00087}00087 \textcolor{keyword}{constexpr} \textcolor{keyword}{auto} big\_number = \mbox{\hyperlink{structkblib_1_1fnv_1_1fnv__prime}{kblib::fnv::fnv\_prime<unsigned>::value}};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00088}00088 }
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00089}00089 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, x);}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00090}00090 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, x * 2);}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00091}00091 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, x / 2);}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00092}00092 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, \string~x);}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00093}00093 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, x + 42);}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00094}00094 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, x * 2 + 42);}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00095}00095 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, -\/x);}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00096}00096 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, x -\/ 42);}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00097}00097 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, 42 -\/ x);}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00098}00098 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, (x * x));}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00099}00099 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, (x * x * 2));}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00100}00100 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, -\/x -\/ 42);}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00101}00101 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, x \& 42);}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00102}00102 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, x | 42);}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00103}00103 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, x << 2);}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00104}00104 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, x >> 2);}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00105}00105 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, \string~x << 2);}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00106}00106 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, \string~x >> 2);}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00107}00107 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, (x >> 8) | (x << 24));}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00108}00108 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, (x >> 16) | (x << 16));}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00109}00109 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, (x >> 24) | (x << 8));}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00110}00110 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, (\string~x >> 8) | (\string~x << 24));}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00111}00111 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, (\string~x >> 16) | (\string~x << 16));}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00112}00112 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, (\string~x >> 24) | (\string~x << 8));}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00113}00113 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, (\textcolor{keyword}{static\_cast<}\textcolor{keywordtype}{void}\textcolor{keyword}{>}(x), 42));}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00114}00114 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, (x >> 16) | (\string~x << 16));}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00115}00115 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, (\string~x >> 16) | (x << 16));}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00116}00116 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, x \string^ 42);}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00117}00117 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, x \string^ ((x >> 16) | (x << 16)));}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00118}00118 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, -\/\string~x);}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00119}00119 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, \string~-\/x);}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00120}00120 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, x * 42);}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00121}00121 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, -\/x * 42);}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00122}00122 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, -\/x / 42);}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00123}00123 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, x \% 42);}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00124}00124 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, -\/(x \% 42));}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00125}00125 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, (x * big\_number));}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00126}00126 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, x \string^ big\_number);}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00127}00127 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, x + big\_number);}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00128}00128 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, x -\/ big\_number);}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00129}00129 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, big\_number -\/ x);}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00130}00130 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, x / big\_number);}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00131}00131 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, x \% big\_number);}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00132}00132 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, big\_number / x);}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00133}00133 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, big\_number \% x);}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00134}00134 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, (\textcolor{keywordtype}{void}(x), big\_number));}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00135}00135 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, x + (big\_number >> 16));}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00136}00136 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, x + (big\_number >> 24));}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00137}00137 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, (x << 16) + big\_number);}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00138}00138 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, (x << 16) -\/ big\_number);}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00139}00139 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, big\_number -\/ (x << 16));}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00140}00140 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, (x << 16) \string^ big\_number);}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00141}00141 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, (x << 16) / big\_number);}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00142}00142 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, big\_number / (x << 16));}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00143}00143 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, (x << 16) \& big\_number);}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00144}00144 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, (x << 16) + (big\_number \& 0x0000FFFF));}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00145}00145 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, (x << 16) \% big\_number);}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00146}00146 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, big\_number \% (x << 16));}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00147}00147 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, x * 42 + big\_number);}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00148}00148 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, (x * (big\_number \% 42)));}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00149}00149 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, (x * (-\/big\_number \% 42)));}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00150}00150 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, (x * 14 + (big\_number >> 16)));}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00151}00151 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, (x * 14 -\/ (big\_number >> 16)));}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00152}00152 \mbox{\hyperlink{visitation__benchmarks_8cpp_a47273ddf3fe27853112935c0bbd4d54a}{MAKE\_DERIVED}}(\_\_COUNTER\_\_, (x * 14 \string^ (big\_number >> 16)));}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00153}00153 }
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00154}00154 \textcolor{keyword}{using }variant\_type = std::variant<}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00155}00155     Derived0, Derived1, Derived2, Derived3, Derived4, Derived5, Derived6,}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00156}00156     Derived7, Derived8, Derived9, Derived10, Derived11, Derived12, Derived13,}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00157}00157     Derived14, Derived15, Derived16, Derived17, Derived18, Derived19, Derived20,}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00158}00158     Derived21, Derived22, Derived23, Derived24, Derived25, Derived26, Derived27,}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00159}00159     Derived28, Derived29, Derived30, Derived31, Derived32, Derived33, Derived34,}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00160}00160     Derived35, Derived36, Derived37, Derived38, Derived39, Derived40, Derived41,}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00161}00161     Derived42, Derived43, Derived44, Derived45, Derived46, Derived47, Derived48,}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00162}00162     Derived49, Derived50, Derived51, Derived52, Derived53, Derived54, Derived55,}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00163}00163     Derived56, Derived57, Derived58, Derived59, Derived60, Derived61, Derived62,}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00164}00164     Derived63>;}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00165}00165 \textcolor{keyword}{using }variant\_type\_throws = std::variant<}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00166}00166     Derived0, Derived1, Derived2, Derived3, Derived4, Derived5, Derived6,}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00167}00167     Derived7, Derived8, Derived9, Derived10, Derived11, Derived12, Derived13,}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00168}00168     Derived14, Derived15, Derived16, Derived17, Derived18, Derived19, Derived20,}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00169}00169     Derived21, Derived22, Derived23, Derived24, Derived25, Derived26, Derived27,}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00170}00170     Derived28, Derived29, Derived30, Derived31, Derived32, Derived33, Derived34,}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00171}00171     Derived35, Derived36, Derived37, Derived38, Derived39, Derived40, Derived41,}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00172}00172     Derived42, Derived43, Derived44, Derived45, Derived46, Derived47, Derived48,}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00173}00173     Derived49, Derived50, Derived51, Derived52, Derived53, Derived54, Derived55,}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00174}00174     Derived56, Derived57, Derived58, Derived59, Derived60, Derived61, Derived62,}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00175}00175     Derived63, thrower>;}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00176}00176 \textcolor{keyword}{constexpr} std::array<\textcolor{keyword}{decltype}(\&fptr\_d0), 64> fptrs\{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00177}00177     fptr\_d0,  fptr\_d1,  fptr\_d2,  fptr\_d3,  fptr\_d4,  fptr\_d5,  fptr\_d6,}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00178}00178     fptr\_d7,  fptr\_d8,  fptr\_d9,  fptr\_d10, fptr\_d11, fptr\_d12, fptr\_d13,}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00179}00179     fptr\_d14, fptr\_d15, fptr\_d16, fptr\_d17, fptr\_d18, fptr\_d19, fptr\_d20,}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00180}00180     fptr\_d21, fptr\_d22, fptr\_d23, fptr\_d24, fptr\_d25, fptr\_d26, fptr\_d27,}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00181}00181     fptr\_d28, fptr\_d29, fptr\_d30, fptr\_d31, fptr\_d32, fptr\_d33, fptr\_d34,}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00182}00182     fptr\_d35, fptr\_d36, fptr\_d37, fptr\_d38, fptr\_d39, fptr\_d40, fptr\_d41,}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00183}00183     fptr\_d42, fptr\_d43, fptr\_d44, fptr\_d45, fptr\_d46, fptr\_d47, fptr\_d48,}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00184}00184     fptr\_d49, fptr\_d50, fptr\_d51, fptr\_d52, fptr\_d53, fptr\_d54, fptr\_d55,}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00185}00185     fptr\_d56, fptr\_d57, fptr\_d58, fptr\_d59, fptr\_d60, fptr\_d61, fptr\_d62,}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00186}00186     fptr\_d63,}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00187}00187 \};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00188}00188 }
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00189}00189 \textcolor{keyword}{template} <\textcolor{keywordtype}{unsigned} N = 4u>}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00190}00190 \textcolor{keyword}{auto} make\_fptr(\textcolor{keywordtype}{unsigned} v) \textcolor{keyword}{noexcept} -\/> fptr \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00191}00191    \textcolor{keywordflow}{switch} (v \% N) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00192}00192    \textcolor{keywordflow}{case} 0:}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00193}00193       \textcolor{keywordflow}{return} \{v, \&fptr\_d1\};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00194}00194    \textcolor{keywordflow}{case} 1:}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00195}00195       \textcolor{keywordflow}{return} \{v, \&fptr\_d2\};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00196}00196    \textcolor{keywordflow}{case} 2:}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00197}00197       \textcolor{keywordflow}{return} \{v, \&fptr\_d3\};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00198}00198    \textcolor{keywordflow}{case} 3:}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00199}00199       \textcolor{keywordflow}{return} \{v, \&fptr\_d4\};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00200}00200    \textcolor{keywordflow}{default}:}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00201}00201       \_\_builtin\_unreachable();}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00202}00202    \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00203}00203    \textcolor{keywordflow}{return} \{v, fptrs[v \% N]\};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00204}00204 \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00205}00205 }
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00206}00206 \textcolor{keyword}{template} <std::size\_t Num, std::size\_t... Is, \textcolor{keyword}{typename} T, \textcolor{keyword}{typename} F>}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00207}00207 \textcolor{keyword}{auto} do\_push\_elem(std::index\_sequence<Is...>, T\& d, \textcolor{keywordtype}{unsigned} v, F f) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00208}00208    \textcolor{keyword}{const} \textcolor{keyword}{auto} i = v \% Num;}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00209}00209    ((i == Is}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00210}00210      and (d.emplace\_back(f(\mbox{\hyperlink{structkblib_1_1constant}{kblib::constant<std::size\_t, Is>}}\{\}, v)), \textcolor{keyword}{true}))}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00211}00211     or ...);}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00212}00212    \textcolor{keywordflow}{return};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00213}00213 \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00214}00214 }
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00215}00215 \textcolor{keyword}{template} <std::\textcolor{keywordtype}{size\_t} Num, \textcolor{keyword}{typename} T, \textcolor{keyword}{typename} F>}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00216}00216 \textcolor{keyword}{auto} push\_elem(T\& d, \textcolor{keywordtype}{unsigned} v, F f) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00217}00217    \textcolor{keywordflow}{return} do\_push\_elem<Num>(std::make\_index\_sequence<Num>\{\}, d, v, f);}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00218}00218 \};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00219}00219 }
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00220}00220 \textcolor{keyword}{template} <\textcolor{keyword}{typename}... Ts>}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00221}00221 \textcolor{keyword}{auto} baseline\_generic(std::vector<Ts>... args) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00222}00222    \textcolor{keywordflow}{return} (}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00223}00223        \mbox{\hyperlink{namespacekblib_abedf2e5c556e6ab3ebb779227172a2ac}{std::accumulate}}(args.begin(), args.end(), 0u,}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00224}00224                        [](\textcolor{keywordtype}{unsigned} accum, \textcolor{keyword}{const} Ts\& x) \{ return accum + x(); \})}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00225}00225        + ... + 0);}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00226}00226 \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00227}00227 }
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00228}00228 \} \textcolor{comment}{// namespace}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00229}00229 }
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00230}\mbox{\hyperlink{visitation__benchmarks_8cpp_a081f71eeb1c1e06f9951b9b74f9bdd08}{00230}} \mbox{\hyperlink{visitation__benchmarks_8cpp_a081f71eeb1c1e06f9951b9b74f9bdd08}{TEST\_CASE}}(\textcolor{stringliteral}{"{}poly\_obj performance(4\_old)"{}}) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00231}00231    \textcolor{keyword}{const} \textcolor{keyword}{auto} start = std::chrono::steady\_clock::now();}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00232}00232 \textcolor{preprocessor}{\#     ifdef NDEBUG}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00233}00233    \textcolor{keyword}{constexpr} \textcolor{keywordtype}{unsigned} count = 1000;}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00234}00234 \textcolor{preprocessor}{\#     else}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00235}00235    \textcolor{keyword}{constexpr} \textcolor{keywordtype}{unsigned} count = 100;}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00236}00236 \textcolor{preprocessor}{\#     endif}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00237}00237 }
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00238}00238 \textcolor{preprocessor}{\#     ifdef SANITIZERS}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00239}00239 \textcolor{preprocessor}{\#        define STR(s) \#         s}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00240}00240    std::cout << \textcolor{stringliteral}{"{}Sanitizers active\(\backslash\)n"{}};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00241}00241 \textcolor{preprocessor}{\#     endif}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00242}00242 }
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00243}00243    std::vector<std::pair<unsigned, std::string\_view>> reproducibility\_test;}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00244}00244    \textcolor{keyword}{using }poly\_t = \mbox{\hyperlink{classkblib_1_1poly__obj}{kblib::poly\_obj}}<}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00245}00245        Base, \textcolor{keyword}{sizeof}(Derived1),}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00246}00246        \mbox{\hyperlink{structkblib_1_1poly__obj__traits}{kblib::poly\_obj\_traits<Base, kblib::construct\_type::both>}}>;}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00247}00247 }
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00248}00248    \textcolor{keyword}{auto} push\_checksum = [\&](\textcolor{keywordtype}{unsigned} s, std::string\_view name) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00249}00249       \textcolor{keyword}{auto} begin = reproducibility\_test.begin();}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00250}00250       \textcolor{keyword}{auto} end = reproducibility\_test.end();}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00251}00251       \textcolor{comment}{// Take only the first result for each run type}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00252}00252       \textcolor{keywordflow}{if} (\mbox{\hyperlink{namespacekblib_a4b49eacc73a9295677cb08d9b7892ff6}{std::find\_if}}(begin, end,}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00253}00253                        [\&](\textcolor{keyword}{const} \textcolor{keyword}{auto}\& p) \{ \textcolor{keywordflow}{return} p.second == name; \})}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00254}00254           == end) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00255}00255          reproducibility\_test.emplace\_back(s, name);}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00256}00256       \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00257}00257    \};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00258}00258 }
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00259}00259    \textcolor{comment}{/*}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00260}00260 \textcolor{comment}{    * Release / Debug, all times in microseconds:}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00261}00261 \textcolor{comment}{    *}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00262}00262 \textcolor{comment}{    *   Four separate contiguous arrays}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00263}00263 \textcolor{comment}{    * baseline:                    5.377 /  37.549}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00264}00264 \textcolor{comment}{    *   Polymorphism, always valid}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00265}00265 \textcolor{comment}{    * raw pointer:                10.470 /  51.205}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00266}00266 \textcolor{comment}{    * unique\_ptr:                 11.826 /  70.346}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00267}00267 \textcolor{comment}{    * poly\_obj:                   14.644 /  79.075}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00268}00268 \textcolor{comment}{    *   Type erasure, always valid}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00269}00269 \textcolor{comment}{    * std::function:              15.247 / 106.562}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00270}00270 \textcolor{comment}{    * std::visit(v, f):           27.375 / 238.055}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00271}00271 \textcolor{comment}{    * kblib::visit(v, f...):      37.308 / 258.965}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00272}00272 \textcolor{comment}{    * kblib::visit(v)(f...):      37.253 / 288.355}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00273}00273 \textcolor{comment}{    * visit\_indexed:              30.203 / 208.894}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00274}00274 \textcolor{comment}{    * kblib::visit2:               8.407 / 211.649}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00275}00275 \textcolor{comment}{    * kblib::visit2\_nop:           8.650 / 222.502}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00276}00276 \textcolor{comment}{    * std::get\_if:                 8.580 / 158.164}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00277}00277 \textcolor{comment}{    * switch (v.index):            8.984 / 170.739}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00278}00278 \textcolor{comment}{    *   Polymorphism, checking for invalid}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00279}00279 \textcolor{comment}{    * raw pointer, ch:            15.859 /  56.917}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00280}00280 \textcolor{comment}{    * unique\_ptr, ch:             18.344 / 108.046}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00281}00281 \textcolor{comment}{    * poly\_obj, ch:               18.290 /  96.168}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00282}00282 \textcolor{comment}{    *   Type erasure, checking for invalid}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00283}00283 \textcolor{comment}{    * std::function, ch:          25.200 / 122.038}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00284}00284 \textcolor{comment}{    * kblib::visit2\_nop, ch:      12.327 / 322.764}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00285}00285 \textcolor{comment}{    * std::get\_if, ch:            12.386 / 232.006}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00286}00286 \textcolor{comment}{    * switch(v.index()), ch:      16.817 / 203.752}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00287}00287 \textcolor{comment}{    *   Type erasure, exceptions for invalid}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00288}00288 \textcolor{comment}{    * std::function, ex:          23.758 / 126.152}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00289}00289 \textcolor{comment}{    * std::visit(v, f), ex:       40.646 / 310.900}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00290}00290 \textcolor{comment}{    * kblib::visit(v, f...), ex:  44.016 / 328.484}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00291}00291 \textcolor{comment}{    * kblib::visit(v)(f...), ex:  46.345 / 377.681}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00292}00292 \textcolor{comment}{    * visit\_indexed, ex:          40.066 / 261.261}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00293}00293 \textcolor{comment}{    * kblib::visit2, ex:          12.353 / 315.509}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00294}00294 \textcolor{comment}{    *}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00295}00295 \textcolor{comment}{    * Overall test runtime:  80s / 286s}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00296}00296 \textcolor{comment}{    *}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00297}00297 \textcolor{comment}{    * Conclusions:}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00298}00298 \textcolor{comment}{    *}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00299}00299 \textcolor{comment}{    * In release builds, visit\_indexed, std::function, and std::visit are very}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00300}00300 \textcolor{comment}{    * slow, contiguous access is very fast, everything else is comparable to}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00301}00301 \textcolor{comment}{    * each other, except that exceptions are, of course, very slow.}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00302}00302 \textcolor{comment}{    *}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00303}00303 \textcolor{comment}{    * In debug builds, type erasure seems to be extremely slow, enough even to}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00304}00304 \textcolor{comment}{    * mostly drown out the exceptions, but the fastest is std::function by far.}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00305}00305 \textcolor{comment}{    * visit2 is a bit faster in release builds, but poly\_obj isn't much slower}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00306}00306 \textcolor{comment}{    * and is much much faster than it in debug. In every instance, poly\_obj}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00307}00307 \textcolor{comment}{    * compares favorably to unique\_ptr, which is good, because it is meant to}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00308}00308 \textcolor{comment}{    * replace it in some uses.}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00309}00309 \textcolor{comment}{    *}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00310}00310 \textcolor{comment}{    * std::get\_if and switch are predictably the fastest way of accessing a}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00311}00311 \textcolor{comment}{    * variant in debug, but in release are tied with visit2. I do not think}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00312}00312 \textcolor{comment}{    * that the messy and verbose code is justified by the debug performance}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00313}00313 \textcolor{comment}{    * gain compared to the other options.}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00314}00314 \textcolor{comment}{    *}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00315}00315 \textcolor{comment}{    * If you want to use exceptions for invalid objects, kblib::visit2 is the}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00316}00316 \textcolor{comment}{    * fastest way, followed by std::function. The others are equally twice as}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00317}00317 \textcolor{comment}{    * slow.}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00318}00318 \textcolor{comment}{    *}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00319}00319 \textcolor{comment}{    * I cannot tell why visit\_indexed is so much slower than visit2 in this}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00320}00320 \textcolor{comment}{    * test. Their code is very similar. It must be the additional parameter}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00321}00321 \textcolor{comment}{    * causing delays in setting up the call.}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00322}00322 \textcolor{comment}{    *}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00323}00323 \textcolor{comment}{    */}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00324}00324 }
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00325}00325    \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00326}00326       std::vector<Derived0> d1;}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00327}00327       std::vector<Derived1> d2;}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00328}00328       std::vector<Derived2> d3;}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00329}00329       std::vector<Derived3> d4;}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00330}00330       \mbox{\hyperlink{structkblib_1_1_f_n_v__hash}{kblib::FNV32\_hash<unsigned>}} h;}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00331}00331       \textcolor{keywordflow}{for} (\textcolor{keyword}{auto} i : \mbox{\hyperlink{namespacekblib_a72690688922a2d4ae9a3e46ff0c1a9a9}{kblib::range}}(count)) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00332}00332          \textcolor{keyword}{auto} v = \textcolor{keyword}{static\_cast<}\textcolor{keywordtype}{unsigned}\textcolor{keyword}{>}(h(i));}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00333}00333          \textcolor{keywordflow}{switch} (v \% 4) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00334}00334          \textcolor{keywordflow}{case} 0:}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00335}00335             d1.emplace\_back(v);}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00336}00336             \textcolor{keywordflow}{break};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00337}00337          \textcolor{keywordflow}{case} 1:}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00338}00338             d2.emplace\_back(v);}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00339}00339             \textcolor{keywordflow}{break};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00340}00340          \textcolor{keywordflow}{case} 2:}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00341}00341             d3.emplace\_back(v);}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00342}00342             \textcolor{keywordflow}{break};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00343}00343          \textcolor{keywordflow}{case} 3:}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00344}00344             d4.emplace\_back(v);}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00345}00345          \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00346}00346       \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00347}00347 }
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00348}00348       BENCHMARK\_ADVANCED(\textcolor{stringliteral}{"{}baseline"{}})(Catch::Benchmark::Chronometer meter) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00349}00349          \textcolor{keywordtype}{unsigned} accum\{\};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00350}00350          meter.measure([\&] \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00351}00351             \textcolor{keywordflow}{for} (\textcolor{keyword}{const} \textcolor{keyword}{auto}\& x : d1) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00352}00352                accum += x();}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00353}00353             \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00354}00354             \textcolor{keywordflow}{for} (\textcolor{keyword}{const} \textcolor{keyword}{auto}\& x : d2) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00355}00355                accum += x();}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00356}00356             \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00357}00357             \textcolor{keywordflow}{for} (\textcolor{keyword}{const} \textcolor{keyword}{auto}\& x : d3) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00358}00358                accum += x();}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00359}00359             \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00360}00360             \textcolor{keywordflow}{for} (\textcolor{keyword}{const} \textcolor{keyword}{auto}\& x : d4) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00361}00361                accum += x();}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00362}00362             \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00363}00363             \textcolor{keywordflow}{return} accum;}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00364}00364          \});}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00365}00365          push\_checksum(accum, \textcolor{stringliteral}{"{}baseline"{}});}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00366}00366       \};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00367}00367       BENCHMARK\_ADVANCED(\textcolor{stringliteral}{"{}baseline\_generic"{}})}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00368}00368       (Catch::Benchmark::Chronometer meter) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00369}00369          \textcolor{keywordtype}{unsigned} accum\{\};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00370}00370          meter.measure([\&] \{ accum = baseline\_generic(d1, d2, d3, d4); \});}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00371}00371          push\_checksum(accum, \textcolor{stringliteral}{"{}baseline\_generic"{}});}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00372}00372       \};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00373}00373    \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00374}00374    BENCHMARK\_ADVANCED(\textcolor{stringliteral}{"{}raw pointer"{}})(Catch::Benchmark::Chronometer meter) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00375}00375       std::vector<Base*> d;}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00376}00376       \mbox{\hyperlink{structkblib_1_1_f_n_v__hash}{kblib::FNV32\_hash<unsigned>}} h;}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00377}00377       \textcolor{keywordflow}{for} (\textcolor{keyword}{auto} i : \mbox{\hyperlink{namespacekblib_a72690688922a2d4ae9a3e46ff0c1a9a9}{kblib::range}}(count)) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00378}00378          \textcolor{keyword}{auto} v = \textcolor{keyword}{static\_cast<}\textcolor{keywordtype}{unsigned}\textcolor{keyword}{>}(h(i));}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00379}00379          \textcolor{keywordflow}{switch} (v \% 4) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00380}00380          \textcolor{keywordflow}{case} 0:}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00381}00381             d.push\_back(\textcolor{keyword}{new} Derived0(v));}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00382}00382             \textcolor{keywordflow}{break};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00383}00383          \textcolor{keywordflow}{case} 1:}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00384}00384             d.push\_back(\textcolor{keyword}{new} Derived1(v));}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00385}00385             \textcolor{keywordflow}{break};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00386}00386          \textcolor{keywordflow}{case} 2:}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00387}00387             d.push\_back(\textcolor{keyword}{new} Derived2(v));}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00388}00388             \textcolor{keywordflow}{break};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00389}00389          \textcolor{keywordflow}{case} 3:}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00390}00390             d.push\_back(\textcolor{keyword}{new} Derived3(v));}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00391}00391          \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00392}00392       \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00393}00393 }
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00394}00394       \textcolor{keywordtype}{unsigned} accum\{\};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00395}00395       meter.measure([\&] \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00396}00396          \textcolor{keywordflow}{for} (\textcolor{keyword}{auto} x : d) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00397}00397             accum += (*x)();}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00398}00398          \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00399}00399          \textcolor{keywordflow}{return} accum;}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00400}00400       \});}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00401}00401       push\_checksum(accum, \textcolor{stringliteral}{"{}raw pointer"{}});}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00402}00402       \textcolor{keywordflow}{for} (\textcolor{keyword}{auto} x : d) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00403}00403          \textcolor{keyword}{delete} x;}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00404}00404       \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00405}00405    \};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00406}00406    BENCHMARK\_ADVANCED(\textcolor{stringliteral}{"{}unique\_ptr"{}})}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00407}00407    (Catch::Benchmark::Chronometer meter) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00408}00408       std::vector<std::unique\_ptr<Base>> d;}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00409}00409       \mbox{\hyperlink{structkblib_1_1_f_n_v__hash}{kblib::FNV32\_hash<unsigned>}} h;}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00410}00410       \textcolor{keywordflow}{for} (\textcolor{keyword}{auto} i : \mbox{\hyperlink{namespacekblib_a72690688922a2d4ae9a3e46ff0c1a9a9}{kblib::range}}(count)) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00411}00411          \textcolor{keyword}{auto} v = h(i);}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00412}00412          \textcolor{keywordflow}{switch} (v \% 4) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00413}00413          \textcolor{keywordflow}{case} 0:}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00414}00414             d.push\_back(std::make\_unique<Derived0>(v));}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00415}00415             \textcolor{keywordflow}{break};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00416}00416          \textcolor{keywordflow}{case} 1:}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00417}00417             d.push\_back(std::make\_unique<Derived1>(v));}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00418}00418             \textcolor{keywordflow}{break};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00419}00419          \textcolor{keywordflow}{case} 2:}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00420}00420             d.push\_back(std::make\_unique<Derived2>(v));}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00421}00421             \textcolor{keywordflow}{break};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00422}00422          \textcolor{keywordflow}{case} 3:}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00423}00423             d.push\_back(std::make\_unique<Derived3>(v));}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00424}00424          \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00425}00425       \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00426}00426 }
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00427}00427       \textcolor{keywordtype}{unsigned} accum\{\};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00428}00428       meter.measure([\&] \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00429}00429          \textcolor{keywordflow}{for} (\textcolor{keyword}{const} \textcolor{keyword}{auto}\& x : d) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00430}00430             accum += (*x)();}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00431}00431          \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00432}00432          \textcolor{keywordflow}{return} accum;}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00433}00433       \});}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00434}00434       push\_checksum(accum, \textcolor{stringliteral}{"{}unique pointer"{}});}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00435}00435    \};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00436}00436    BENCHMARK\_ADVANCED(\textcolor{stringliteral}{"{}poly\_obj"{}})(Catch::Benchmark::Chronometer meter) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00437}00437       std::vector<poly\_t> d;}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00438}00438       \mbox{\hyperlink{structkblib_1_1_f_n_v__hash}{kblib::FNV32\_hash<unsigned>}} h;}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00439}00439       \textcolor{keywordflow}{for} (\textcolor{keyword}{auto} i : \mbox{\hyperlink{namespacekblib_a72690688922a2d4ae9a3e46ff0c1a9a9}{kblib::range}}(count)) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00440}00440          \textcolor{keyword}{auto} v = h(i);}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00441}00441          \textcolor{keywordflow}{switch} (v \% 4) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00442}00442          \textcolor{keywordflow}{case} 0:}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00443}00443             d.push\_back(poly\_t::make<Derived0>(v));}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00444}00444             \textcolor{keywordflow}{break};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00445}00445          \textcolor{keywordflow}{case} 1:}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00446}00446             d.push\_back(poly\_t::make<Derived1>(v));}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00447}00447             \textcolor{keywordflow}{break};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00448}00448          \textcolor{keywordflow}{case} 2:}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00449}00449             d.push\_back(poly\_t::make<Derived2>(v));}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00450}00450             \textcolor{keywordflow}{break};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00451}00451          \textcolor{keywordflow}{case} 3:}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00452}00452             d.push\_back(poly\_t::make<Derived3>(v));}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00453}00453          \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00454}00454       \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00455}00455 }
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00456}00456       \textcolor{keywordtype}{unsigned} accum\{\};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00457}00457       meter.measure([\&] \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00458}00458          \textcolor{keywordflow}{for} (\textcolor{keyword}{const} \textcolor{keyword}{auto}\& x : d) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00459}00459             accum += x();}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00460}00460          \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00461}00461          \textcolor{keywordflow}{return} accum;}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00462}00462       \});}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00463}00463       push\_checksum(accum, \textcolor{stringliteral}{"{}poly\_obj"{}});}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00464}00464    \};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00465}00465    BENCHMARK\_ADVANCED(\textcolor{stringliteral}{"{}function pointer"{}})(Catch::Benchmark::Chronometer meter) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00466}00466       std::vector<fptr> d;}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00467}00467       \mbox{\hyperlink{structkblib_1_1_f_n_v__hash}{kblib::FNV32\_hash<unsigned>}} h;}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00468}00468       \textcolor{keywordflow}{for} (\textcolor{keyword}{auto} i : \mbox{\hyperlink{namespacekblib_a72690688922a2d4ae9a3e46ff0c1a9a9}{kblib::range}}(count)) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00469}00469          \textcolor{keyword}{auto} v = \textcolor{keyword}{static\_cast<}\textcolor{keywordtype}{unsigned}\textcolor{keyword}{>}(h(i));}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00470}00470          d.push\_back(make\_fptr(v));}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00471}00471       \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00472}00472 }
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00473}00473       \textcolor{keywordtype}{unsigned} accum\{\};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00474}00474       meter.measure([\&] \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00475}00475          \textcolor{keywordflow}{for} (\textcolor{keyword}{auto} x : d) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00476}00476             accum += x.p(\&x);}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00477}00477          \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00478}00478          \textcolor{keywordflow}{return} accum;}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00479}00479       \});}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00480}00480       push\_checksum(accum, \textcolor{stringliteral}{"{}raw pointer"{}});}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00481}00481    \};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00482}00482    BENCHMARK\_ADVANCED(\textcolor{stringliteral}{"{}function pointer (wrapped)"{}})}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00483}00483    (Catch::Benchmark::Chronometer meter) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00484}00484       std::vector<fptr> d;}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00485}00485       \mbox{\hyperlink{structkblib_1_1_f_n_v__hash}{kblib::FNV32\_hash<unsigned>}} h;}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00486}00486       \textcolor{keywordflow}{for} (\textcolor{keyword}{auto} i : \mbox{\hyperlink{namespacekblib_a72690688922a2d4ae9a3e46ff0c1a9a9}{kblib::range}}(count)) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00487}00487          \textcolor{keyword}{auto} v = \textcolor{keyword}{static\_cast<}\textcolor{keywordtype}{unsigned}\textcolor{keyword}{>}(h(i));}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00488}00488          d.push\_back(make\_fptr(v));}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00489}00489       \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00490}00490 }
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00491}00491       \textcolor{keywordtype}{unsigned} accum\{\};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00492}00492       meter.measure([\&] \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00493}00493          \textcolor{keywordflow}{for} (\textcolor{keyword}{auto} x : d) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00494}00494             accum += x();}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00495}00495          \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00496}00496          \textcolor{keywordflow}{return} accum;}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00497}00497       \});}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00498}00498       push\_checksum(accum, \textcolor{stringliteral}{"{}raw pointer"{}});}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00499}00499    \};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00500}00500    BENCHMARK\_ADVANCED(\textcolor{stringliteral}{"{}std::function"{}})(Catch::Benchmark::Chronometer meter) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00501}00501       std::vector<std::function<unsigned()>> d;}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00502}00502       \mbox{\hyperlink{structkblib_1_1_f_n_v__hash}{kblib::FNV32\_hash<unsigned>}} h;}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00503}00503       \textcolor{keywordflow}{for} (\textcolor{keyword}{auto} i : \mbox{\hyperlink{namespacekblib_a72690688922a2d4ae9a3e46ff0c1a9a9}{kblib::range}}(count)) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00504}00504          \textcolor{keyword}{auto} v = \textcolor{keyword}{static\_cast<}\textcolor{keywordtype}{unsigned}\textcolor{keyword}{>}(h(i));}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00505}00505          \textcolor{keywordflow}{switch} (v \% 4) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00506}00506          \textcolor{keywordflow}{case} 0:}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00507}00507             d.emplace\_back(Derived0(v));}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00508}00508             \textcolor{keywordflow}{break};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00509}00509          \textcolor{keywordflow}{case} 1:}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00510}00510             d.emplace\_back(Derived1(v));}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00511}00511             \textcolor{keywordflow}{break};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00512}00512          \textcolor{keywordflow}{case} 2:}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00513}00513             d.emplace\_back(Derived2(v));}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00514}00514             \textcolor{keywordflow}{break};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00515}00515          \textcolor{keywordflow}{case} 3:}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00516}00516             d.emplace\_back(Derived3(v));}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00517}00517          \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00518}00518       \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00519}00519 }
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00520}00520       \textcolor{keywordtype}{unsigned} accum\{\};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00521}00521       meter.measure([\&] \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00522}00522          \textcolor{keywordflow}{for} (\textcolor{keyword}{const} \textcolor{keyword}{auto}\& x : d) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00523}00523             accum += x();}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00524}00524          \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00525}00525          \textcolor{keywordflow}{return} accum;}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00526}00526       \});}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00527}00527       push\_checksum(accum, \textcolor{stringliteral}{"{}std::function"{}});}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00528}00528    \};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00529}00529    \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00530}00530       std::vector<std::variant<Derived0, Derived1, Derived2, Derived3>> d;}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00531}00531       \mbox{\hyperlink{structkblib_1_1_f_n_v__hash}{kblib::FNV32\_hash<unsigned>}} h;}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00532}00532       \textcolor{keywordflow}{for} (\textcolor{keyword}{auto} i : \mbox{\hyperlink{namespacekblib_a72690688922a2d4ae9a3e46ff0c1a9a9}{kblib::range}}(count)) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00533}00533          \textcolor{keyword}{auto} v = \textcolor{keyword}{static\_cast<}\textcolor{keywordtype}{unsigned}\textcolor{keyword}{>}(h(i));}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00534}00534          \textcolor{keywordflow}{switch} (v \% 4) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00535}00535          \textcolor{keywordflow}{case} 0:}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00536}00536             d.emplace\_back(Derived0(v));}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00537}00537             \textcolor{keywordflow}{break};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00538}00538          \textcolor{keywordflow}{case} 1:}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00539}00539             d.emplace\_back(Derived1(v));}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00540}00540             \textcolor{keywordflow}{break};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00541}00541          \textcolor{keywordflow}{case} 2:}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00542}00542             d.emplace\_back(Derived2(v));}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00543}00543             \textcolor{keywordflow}{break};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00544}00544          \textcolor{keywordflow}{case} 3:}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00545}00545             d.emplace\_back(Derived3(v));}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00546}00546             \textcolor{keywordflow}{break};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00547}00547          \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00548}00548       \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00549}00549       BENCHMARK\_ADVANCED(\textcolor{stringliteral}{"{}std::visit(v, f)"{}})}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00550}00550       (Catch::Benchmark::Chronometer meter) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00551}00551          \textcolor{keywordtype}{unsigned} accum\{\};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00552}00552          meter.measure([\&] \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00553}00553             \textcolor{keywordflow}{for} (\textcolor{keyword}{const} \textcolor{keyword}{auto}\& x : d) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00554}00554                accum += \mbox{\hyperlink{namespacekblib_af1f6dd52b7ce14276ab5509700c6acf1}{std::visit}}([](\textcolor{keyword}{const} \textcolor{keyword}{auto}\& v) \{ \textcolor{keywordflow}{return} v(); \}, x);}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00555}00555             \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00556}00556             \textcolor{keywordflow}{return} accum;}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00557}00557          \});}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00558}00558          push\_checksum(accum, \textcolor{stringliteral}{"{}std::visit(v, f)"{}});}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00559}00559       \};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00560}00560       BENCHMARK\_ADVANCED(\textcolor{stringliteral}{"{}kblib::visit(v, f...)"{}})}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00561}00561       (Catch::Benchmark::Chronometer meter) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00562}00562          \textcolor{keywordtype}{unsigned} accum\{\};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00563}00563          meter.measure([\&] \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00564}00564             \textcolor{keywordflow}{for} (\textcolor{keyword}{const} \textcolor{keyword}{auto}\& x : d) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00565}00565                accum += \mbox{\hyperlink{namespacekblib_af1f6dd52b7ce14276ab5509700c6acf1}{kblib::visit}}(x, [](\textcolor{keyword}{const} \textcolor{keyword}{auto}\& v) \{ \textcolor{keywordflow}{return} v(); \});}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00566}00566             \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00567}00567             \textcolor{keywordflow}{return} accum;}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00568}00568          \});}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00569}00569          push\_checksum(accum, \textcolor{stringliteral}{"{}kblib::visit(v, f...)"{}});}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00570}00570       \};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00571}00571       BENCHMARK\_ADVANCED(\textcolor{stringliteral}{"{}kblib::visit(v)(f...)"{}})}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00572}00572       (Catch::Benchmark::Chronometer meter) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00573}00573          \textcolor{keywordtype}{unsigned} accum\{\};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00574}00574          meter.measure([\&] \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00575}00575             \textcolor{keywordflow}{for} (\textcolor{keyword}{const} \textcolor{keyword}{auto}\& x : d) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00576}00576                accum += \mbox{\hyperlink{namespacekblib_af1f6dd52b7ce14276ab5509700c6acf1}{kblib::visit}}(x)([](\textcolor{keyword}{const} \textcolor{keyword}{auto}\& v) \{ \textcolor{keywordflow}{return} v(); \});}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00577}00577             \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00578}00578             \textcolor{keywordflow}{return} accum;}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00579}00579          \});}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00580}00580          push\_checksum(accum, \textcolor{stringliteral}{"{}kblib::visit(v)(f...)"{}});}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00581}00581       \};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00582}00582       BENCHMARK\_ADVANCED(\textcolor{stringliteral}{"{}visit\_indexed(v, f...)"{}})}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00583}00583       (Catch::Benchmark::Chronometer meter) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00584}00584          \textcolor{keywordtype}{unsigned} accum\{\};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00585}00585          meter.measure([\&] \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00586}00586             \textcolor{keywordflow}{for} (\textcolor{keyword}{const} \textcolor{keyword}{auto}\& x : d) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00587}00587                accum += \mbox{\hyperlink{namespacekblib_a7600c651ddd193dfeb5d294732ab1e69}{kblib::visit\_indexed}}(}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00588}00588                    x, [](\textcolor{keyword}{auto}, \textcolor{keyword}{const} \textcolor{keyword}{auto}\& v) \{ \textcolor{keywordflow}{return} v(); \});}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00589}00589             \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00590}00590             \textcolor{keywordflow}{return} accum;}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00591}00591          \});}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00592}00592          push\_checksum(accum, \textcolor{stringliteral}{"{}visit\_indexed(v, f...)"{}});}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00593}00593       \};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00594}00594       BENCHMARK\_ADVANCED(\textcolor{stringliteral}{"{}kblib::visit2(v, f...)"{}})}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00595}00595       (Catch::Benchmark::Chronometer meter) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00596}00596          \textcolor{keywordtype}{unsigned} accum\{\};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00597}00597          meter.measure([\&] \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00598}00598             \textcolor{keywordflow}{for} (\textcolor{keyword}{const} \textcolor{keyword}{auto}\& x : d) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00599}00599                accum += \mbox{\hyperlink{namespacekblib_ac780c4d9780fb9b46be0669d377e1e9b}{kblib::visit2}}(x, [](\textcolor{keyword}{const} \textcolor{keyword}{auto}\& v) \{ \textcolor{keywordflow}{return} v(); \});}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00600}00600             \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00601}00601             \textcolor{keywordflow}{return} accum;}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00602}00602          \});}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00603}00603          push\_checksum(accum, \textcolor{stringliteral}{"{}kblib::visit2(v, f...)"{}});}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00604}00604       \};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00605}00605       BENCHMARK\_ADVANCED(\textcolor{stringliteral}{"{}kblib::visit2\_nop(v, f...)"{}})}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00606}00606       (Catch::Benchmark::Chronometer meter) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00607}00607          \textcolor{keywordtype}{unsigned} accum\{\};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00608}00608          meter.measure([\&] \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00609}00609             \textcolor{keywordflow}{for} (\textcolor{keyword}{const} \textcolor{keyword}{auto}\& x : d) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00610}00610                \mbox{\hyperlink{namespacekblib_a76752fc2ac3634b95ba226b1324dc0b9}{kblib::visit2\_nop}}(x, [\&](\textcolor{keyword}{const} \textcolor{keyword}{auto}\& v) \{ accum += v(); \});}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00611}00611             \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00612}00612             \textcolor{keywordflow}{return} accum;}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00613}00613          \});}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00614}00614          push\_checksum(accum, \textcolor{stringliteral}{"{}kblib::visit2\_nop(v, f...)"{}});}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00615}00615       \};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00616}00616       BENCHMARK\_ADVANCED(\textcolor{stringliteral}{"{}std::get\_if"{}})}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00617}00617       (Catch::Benchmark::Chronometer meter) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00618}00618          \textcolor{keywordtype}{unsigned} accum\{\};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00619}00619          meter.measure([\&] \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00620}00620             \textcolor{keywordflow}{for} (\textcolor{keyword}{const} \textcolor{keyword}{auto}\& x : d) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00621}00621                \textcolor{keywordflow}{if} (\textcolor{keyword}{auto}* \textcolor{keyword}{const} p = std::get\_if<0>(\&x)) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00622}00622                   accum += (*p)();}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00623}00623                \} \textcolor{keywordflow}{else} \textcolor{keywordflow}{if} (\textcolor{keyword}{auto}* \textcolor{keyword}{const} p = std::get\_if<1>(\&x)) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00624}00624                   accum += (*p)();}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00625}00625                \} \textcolor{keywordflow}{else} \textcolor{keywordflow}{if} (\textcolor{keyword}{auto}* \textcolor{keyword}{const} p = std::get\_if<2>(\&x)) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00626}00626                   accum += (*p)();}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00627}00627                \} \textcolor{keywordflow}{else} \textcolor{keywordflow}{if} (\textcolor{keyword}{auto}* \textcolor{keyword}{const} p = std::get\_if<3>(\&x)) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00628}00628                   accum += (*p)();}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00629}00629                \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00630}00630             \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00631}00631             \textcolor{keywordflow}{return} accum;}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00632}00632          \});}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00633}00633          push\_checksum(accum, \textcolor{stringliteral}{"{}std::get\_if"{}});}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00634}00634       \};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00635}00635       BENCHMARK\_ADVANCED(\textcolor{stringliteral}{"{}switch (v.index())"{}})}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00636}00636       (Catch::Benchmark::Chronometer meter) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00637}00637          \textcolor{keywordtype}{unsigned} accum\{\};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00638}00638          meter.measure([\&] \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00639}00639             \textcolor{keywordflow}{for} (\textcolor{keyword}{const} \textcolor{keyword}{auto}\& x : d) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00640}00640                \textcolor{keywordflow}{switch} (x.index()) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00641}00641                \textcolor{keywordflow}{case} 0:}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00642}00642                   accum += std::get<0>(x)();}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00643}00643                   \textcolor{keywordflow}{break};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00644}00644                \textcolor{keywordflow}{case} 1:}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00645}00645                   accum += std::get<1>(x)();}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00646}00646                   \textcolor{keywordflow}{break};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00647}00647                \textcolor{keywordflow}{case} 2:}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00648}00648                   accum += std::get<2>(x)();}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00649}00649                   \textcolor{keywordflow}{break};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00650}00650                \textcolor{keywordflow}{case} 3:}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00651}00651                   accum += std::get<3>(x)();}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00652}00652                   \textcolor{keywordflow}{break};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00653}00653                \textcolor{keywordflow}{default}:;}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00654}00654                \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00655}00655             \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00656}00656             \textcolor{keywordflow}{return} accum;}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00657}00657          \});}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00658}00658          push\_checksum(accum, \textcolor{stringliteral}{"{}switch (v.index())"{}});}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00659}00659       \};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00660}00660    \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00661}00661 }
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00662}00662    \textcolor{comment}{// Test speed when some objects are invalid}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00663}00663    \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00664}00664       BENCHMARK\_ADVANCED(\textcolor{stringliteral}{"{}raw pointer, ch"{}})}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00665}00665       (Catch::Benchmark::Chronometer meter) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00666}00666          std::vector<Base*> d;}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00667}00667          \mbox{\hyperlink{structkblib_1_1_f_n_v__hash}{kblib::FNV32\_hash<unsigned>}} h;}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00668}00668          \textcolor{keywordflow}{for} (\textcolor{keyword}{auto} i : \mbox{\hyperlink{namespacekblib_a72690688922a2d4ae9a3e46ff0c1a9a9}{kblib::range}}(count)) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00669}00669             \textcolor{keyword}{auto} v = \textcolor{keyword}{static\_cast<}\textcolor{keywordtype}{unsigned}\textcolor{keyword}{>}(h(i));}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00670}00670             \textcolor{keywordflow}{switch} (v \% 5) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00671}00671             \textcolor{keywordflow}{case} 0:}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00672}00672                d.emplace\_back(\textcolor{keyword}{new} Derived0(v));}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00673}00673                \textcolor{keywordflow}{break};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00674}00674             \textcolor{keywordflow}{case} 1:}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00675}00675                d.emplace\_back(\textcolor{keyword}{new} Derived1(v));}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00676}00676                \textcolor{keywordflow}{break};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00677}00677             \textcolor{keywordflow}{case} 2:}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00678}00678                d.emplace\_back(\textcolor{keyword}{new} Derived2(v));}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00679}00679                \textcolor{keywordflow}{break};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00680}00680             \textcolor{keywordflow}{case} 3:}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00681}00681                d.emplace\_back(\textcolor{keyword}{new} Derived3(v));}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00682}00682                \textcolor{keywordflow}{break};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00683}00683             \textcolor{keywordflow}{case} 4:}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00684}00684                \textcolor{keywordflow}{try} \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00685}00685                   d.push\_back(\textcolor{keyword}{new} thrower(v));}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00686}00686                \} \textcolor{keywordflow}{catch} (\textcolor{keywordtype}{int}) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00687}00687                   d.push\_back(\textcolor{keyword}{nullptr});}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00688}00688                \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00689}00689             \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00690}00690          \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00691}00691 }
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00692}00692          \textcolor{keywordtype}{unsigned} accum\{\};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00693}00693          meter.measure([\&] \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00694}00694             \textcolor{keywordflow}{for} (\textcolor{keyword}{auto} x : d) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00695}00695                \textcolor{keywordflow}{if} (x) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00696}00696                   accum += (*x)();}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00697}00697                \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00698}00698             \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00699}00699             \textcolor{keywordflow}{return} accum;}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00700}00700          \});}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00701}00701          \textcolor{keywordflow}{for} (\textcolor{keyword}{auto} x : d) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00702}00702             \textcolor{keyword}{delete} x;}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00703}00703          \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00704}00704       \};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00705}00705       BENCHMARK\_ADVANCED(\textcolor{stringliteral}{"{}unique\_ptr, ch"{}})}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00706}00706       (Catch::Benchmark::Chronometer meter) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00707}00707          std::vector<std::unique\_ptr<Base>> d;}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00708}00708          \mbox{\hyperlink{structkblib_1_1_f_n_v__hash}{kblib::FNV32\_hash<unsigned>}} h;}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00709}00709          \textcolor{keywordflow}{for} (\textcolor{keyword}{auto} i : \mbox{\hyperlink{namespacekblib_a72690688922a2d4ae9a3e46ff0c1a9a9}{kblib::range}}(count)) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00710}00710             \textcolor{keyword}{auto} v = h(i);}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00711}00711             \textcolor{keywordflow}{switch} (v \% 4) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00712}00712             \textcolor{keywordflow}{case} 0:}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00713}00713                d.push\_back(std::make\_unique<Derived0>(v));}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00714}00714                \textcolor{keywordflow}{break};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00715}00715             \textcolor{keywordflow}{case} 1:}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00716}00716                d.push\_back(std::make\_unique<Derived1>(v));}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00717}00717                \textcolor{keywordflow}{break};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00718}00718             \textcolor{keywordflow}{case} 2:}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00719}00719                d.push\_back(std::make\_unique<Derived2>(v));}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00720}00720                \textcolor{keywordflow}{break};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00721}00721             \textcolor{keywordflow}{case} 3:}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00722}00722                d.push\_back(std::make\_unique<Derived3>(v));}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00723}00723                \textcolor{keywordflow}{break};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00724}00724             \textcolor{keywordflow}{case} 4:}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00725}00725                \textcolor{keywordflow}{try} \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00726}00726                   d.push\_back(std::make\_unique<thrower>(v));}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00727}00727                \} \textcolor{keywordflow}{catch} (\textcolor{keywordtype}{int}) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00728}00728                   d.push\_back(\textcolor{keyword}{nullptr});}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00729}00729                \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00730}00730             \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00731}00731          \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00732}00732 }
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00733}00733          \textcolor{keywordtype}{unsigned} accum\{\};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00734}00734          meter.measure([\&] \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00735}00735             \textcolor{keywordflow}{for} (\textcolor{keyword}{const} \textcolor{keyword}{auto}\& x : d) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00736}00736                \textcolor{keywordflow}{if} (x) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00737}00737                   accum += (*x)();}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00738}00738                \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00739}00739             \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00740}00740             \textcolor{keywordflow}{return} accum;}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00741}00741          \});}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00742}00742       \};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00743}00743       BENCHMARK\_ADVANCED(\textcolor{stringliteral}{"{}poly\_obj, ch"{}})(Catch::Benchmark::Chronometer meter) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00744}00744          std::vector<poly\_t> d;}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00745}00745          \mbox{\hyperlink{structkblib_1_1_f_n_v__hash}{kblib::FNV32\_hash<unsigned>}} h;}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00746}00746          \textcolor{keywordflow}{for} (\textcolor{keyword}{auto} i : \mbox{\hyperlink{namespacekblib_a72690688922a2d4ae9a3e46ff0c1a9a9}{kblib::range}}(count)) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00747}00747             \textcolor{keyword}{auto} v = h(i);}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00748}00748             \textcolor{keywordflow}{switch} (v \% 5) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00749}00749             \textcolor{keywordflow}{case} 0:}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00750}00750                d.push\_back(poly\_t::make<Derived0>(v));}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00751}00751                \textcolor{keywordflow}{break};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00752}00752             \textcolor{keywordflow}{case} 1:}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00753}00753                d.push\_back(poly\_t::make<Derived1>(v));}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00754}00754                \textcolor{keywordflow}{break};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00755}00755             \textcolor{keywordflow}{case} 2:}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00756}00756                d.push\_back(poly\_t::make<Derived2>(v));}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00757}00757                \textcolor{keywordflow}{break};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00758}00758             \textcolor{keywordflow}{case} 3:}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00759}00759                d.push\_back(poly\_t::make<Derived3>(v));}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00760}00760                \textcolor{keywordflow}{break};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00761}00761             \textcolor{keywordflow}{case} 4:}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00762}00762                \textcolor{keywordflow}{try} \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00763}00763                   d.push\_back(poly\_t::make<thrower>(v));}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00764}00764                \} \textcolor{keywordflow}{catch} (\textcolor{keywordtype}{int}) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00765}00765                   d.emplace\_back(\textcolor{keyword}{nullptr});}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00766}00766                \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00767}00767             \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00768}00768          \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00769}00769 }
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00770}00770          \textcolor{keywordtype}{unsigned} accum\{\};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00771}00771          meter.measure([\&] \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00772}00772             \textcolor{keywordflow}{for} (\textcolor{keyword}{const} \textcolor{keyword}{auto}\& x : d) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00773}00773                \textcolor{keywordflow}{if} (x) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00774}00774                   accum += x();}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00775}00775                \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00776}00776             \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00777}00777             \textcolor{keywordflow}{return} accum;}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00778}00778          \});}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00779}00779       \};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00780}00780       std::vector<std::function<unsigned()>> df;}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00781}00781       std::vector<std::variant<Derived0, Derived1, Derived2, Derived3, thrower>>}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00782}00782           d;}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00783}00783       \mbox{\hyperlink{structkblib_1_1_f_n_v__hash}{kblib::FNV32\_hash<unsigned>}} h;}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00784}00784       \textcolor{keywordflow}{for} (\textcolor{keyword}{auto} i : \mbox{\hyperlink{namespacekblib_a72690688922a2d4ae9a3e46ff0c1a9a9}{kblib::range}}(count)) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00785}00785          \textcolor{keyword}{auto} v = \textcolor{keyword}{static\_cast<}\textcolor{keywordtype}{unsigned}\textcolor{keyword}{>}(h(i));}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00786}00786          \textcolor{keywordflow}{switch} (v \% 5) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00787}00787          \textcolor{keywordflow}{case} 0:}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00788}00788             df.emplace\_back(Derived0(v));}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00789}00789             d.emplace\_back(Derived0(v));}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00790}00790             \textcolor{keywordflow}{break};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00791}00791          \textcolor{keywordflow}{case} 1:}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00792}00792             df.emplace\_back(Derived1(v));}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00793}00793             d.emplace\_back(Derived1(v));}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00794}00794             \textcolor{keywordflow}{break};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00795}00795          \textcolor{keywordflow}{case} 2:}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00796}00796             df.emplace\_back(Derived2(v));}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00797}00797             d.emplace\_back(Derived2(v));}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00798}00798             \textcolor{keywordflow}{break};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00799}00799          \textcolor{keywordflow}{case} 3:}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00800}00800             df.emplace\_back(Derived3(v));}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00801}00801             d.emplace\_back(Derived3(v));}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00802}00802             \textcolor{keywordflow}{break};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00803}00803             \textcolor{comment}{// Test speed of exception throwing and catching}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00804}00804          \textcolor{keywordflow}{case} 4:}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00805}00805             \textcolor{keywordflow}{try} \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00806}00806                \textcolor{keyword}{auto}\& b = df.emplace\_back(thrower());}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00807}00807                b = thrower(v);}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00808}00808             \} \textcolor{keywordflow}{catch} (\textcolor{keywordtype}{int}) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00809}00809             \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00810}00810             \textcolor{comment}{// These have to be done in separate try blocks because otherwise}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00811}00811             \textcolor{comment}{// df would throw and d wouldn't get pushed}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00812}00812             \textcolor{keywordflow}{try} \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00813}00813                \textcolor{keyword}{auto}\& b = d.emplace\_back(std::in\_place\_type\_t<thrower>\{\}, 0);}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00814}00814                b = thrower(v);}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00815}00815             \} \textcolor{keywordflow}{catch} (\textcolor{keywordtype}{int}) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00816}00816             \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00817}00817          \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00818}00818       \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00819}00819       CHECK(d.size() == df.size());}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00820}00820       CHECK(df.size() == count);}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00821}00821       CHECK(d.size() == count);}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00822}00822       BENCHMARK\_ADVANCED(\textcolor{stringliteral}{"{}std::function, ch"{}})}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00823}00823       (Catch::Benchmark::Chronometer meter) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00824}00824          \textcolor{keywordtype}{unsigned} accum\{\};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00825}00825          meter.measure([\&] \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00826}00826             \textcolor{keywordflow}{for} (\textcolor{keyword}{const} \textcolor{keyword}{auto}\& x : df) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00827}00827                \textcolor{keywordflow}{if} (x) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00828}00828                   accum += x();}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00829}00829                \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00830}00830             \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00831}00831             \textcolor{keywordflow}{return} accum;}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00832}00832          \});}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00833}00833       \};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00834}00834       BENCHMARK\_ADVANCED(\textcolor{stringliteral}{"{}kblib::visit2\_nop(v, f...), ch"{}})}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00835}00835       (Catch::Benchmark::Chronometer meter) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00836}00836          \textcolor{keywordtype}{unsigned} accum\{\};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00837}00837          meter.measure([\&] \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00838}00838             \textcolor{keywordflow}{for} (\textcolor{keyword}{const} \textcolor{keyword}{auto}\& x : d) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00839}00839                \mbox{\hyperlink{namespacekblib_a76752fc2ac3634b95ba226b1324dc0b9}{kblib::visit2\_nop}}(x, [\&](\textcolor{keyword}{const} \textcolor{keyword}{auto}\& v) \{ accum += v(); \});}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00840}00840             \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00841}00841             \textcolor{keywordflow}{return} accum;}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00842}00842          \});}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00843}00843       \};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00844}00844       BENCHMARK\_ADVANCED(\textcolor{stringliteral}{"{}std::get\_if, ch"{}})}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00845}00845       (Catch::Benchmark::Chronometer meter) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00846}00846          \textcolor{keywordtype}{unsigned} accum\{\};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00847}00847          meter.measure([\&] \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00848}00848             \textcolor{keywordflow}{for} (\textcolor{keyword}{const} \textcolor{keyword}{auto}\& x : d) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00849}00849                \textcolor{keywordflow}{if} (\textcolor{keyword}{auto}* \textcolor{keyword}{const} p = std::get\_if<0>(\&x)) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00850}00850                   accum += (*p)();}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00851}00851                \} \textcolor{keywordflow}{else} \textcolor{keywordflow}{if} (\textcolor{keyword}{auto}* \textcolor{keyword}{const} p = std::get\_if<1>(\&x)) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00852}00852                   accum += (*p)();}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00853}00853                \} \textcolor{keywordflow}{else} \textcolor{keywordflow}{if} (\textcolor{keyword}{auto}* \textcolor{keyword}{const} p = std::get\_if<2>(\&x)) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00854}00854                   accum += (*p)();}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00855}00855                \} \textcolor{keywordflow}{else} \textcolor{keywordflow}{if} (\textcolor{keyword}{auto}* \textcolor{keyword}{const} p = std::get\_if<3>(\&x)) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00856}00856                   accum += (*p)();}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00857}00857                \} \textcolor{keywordflow}{else} \textcolor{keywordflow}{if} (\textcolor{keyword}{auto}* \textcolor{keyword}{const} p = std::get\_if<4>(\&x)) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00858}00858                   accum += (*p)();}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00859}00859                \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00860}00860             \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00861}00861             \textcolor{keywordflow}{return} accum;}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00862}00862          \});}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00863}00863       \};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00864}00864       BENCHMARK\_ADVANCED(\textcolor{stringliteral}{"{}switch (v.index()), ch"{}})}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00865}00865       (Catch::Benchmark::Chronometer meter) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00866}00866          \textcolor{keywordtype}{unsigned} accum\{\};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00867}00867          meter.measure([\&] \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00868}00868             \textcolor{keywordflow}{for} (\textcolor{keyword}{const} \textcolor{keyword}{auto}\& x : d) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00869}00869                \textcolor{keywordflow}{switch} (x.index()) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00870}00870                \textcolor{keywordflow}{case} 0:}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00871}00871                   accum += std::get<0>(x)();}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00872}00872                   \textcolor{keywordflow}{break};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00873}00873                \textcolor{keywordflow}{case} 1:}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00874}00874                   accum += std::get<1>(x)();}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00875}00875                   \textcolor{keywordflow}{break};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00876}00876                \textcolor{keywordflow}{case} 2:}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00877}00877                   accum += std::get<2>(x)();}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00878}00878                   \textcolor{keywordflow}{break};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00879}00879                \textcolor{keywordflow}{case} 3:}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00880}00880                   accum += std::get<3>(x)();}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00881}00881                   \textcolor{keywordflow}{break};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00882}00882                \textcolor{keywordflow}{case} 4:}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00883}00883                   accum += std::get<4>(x)();}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00884}00884                   \textcolor{keywordflow}{break};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00885}00885                \textcolor{keywordflow}{default}:;}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00886}00886                \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00887}00887             \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00888}00888             \textcolor{keywordflow}{return} accum;}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00889}00889          \});}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00890}00890       \};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00891}00891       BENCHMARK\_ADVANCED(\textcolor{stringliteral}{"{}std::function, ex"{}})}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00892}00892       (Catch::Benchmark::Chronometer meter) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00893}00893          \textcolor{keywordtype}{unsigned} accum\{\};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00894}00894          meter.measure([\&] \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00895}00895             \textcolor{keywordflow}{for} (\textcolor{keyword}{const} \textcolor{keyword}{auto}\& x : df) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00896}00896                \textcolor{keywordflow}{try} \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00897}00897                   accum += x();}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00898}00898                \} \textcolor{keywordflow}{catch} (\textcolor{keyword}{const} std::bad\_function\_call\&) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00899}00899                \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00900}00900             \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00901}00901             \textcolor{keywordflow}{return} accum;}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00902}00902          \});}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00903}00903       \};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00904}00904       BENCHMARK\_ADVANCED(\textcolor{stringliteral}{"{}std::visit(v, f), ex"{}})}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00905}00905       (Catch::Benchmark::Chronometer meter) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00906}00906          \textcolor{keywordtype}{unsigned} accum\{\};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00907}00907          meter.measure([\&] \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00908}00908             \textcolor{keywordflow}{for} (\textcolor{keyword}{const} \textcolor{keyword}{auto}\& x : d) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00909}00909                \textcolor{keywordflow}{try} \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00910}00910                   accum += \mbox{\hyperlink{namespacekblib_af1f6dd52b7ce14276ab5509700c6acf1}{std::visit}}([](\textcolor{keyword}{const} \textcolor{keyword}{auto}\& v) \{ \textcolor{keywordflow}{return} v(); \}, x);}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00911}00911                \} \textcolor{keywordflow}{catch} (\textcolor{keyword}{const} std::bad\_variant\_access\&) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00912}00912                \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00913}00913             \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00914}00914             \textcolor{keywordflow}{return} accum;}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00915}00915          \});}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00916}00916       \};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00917}00917       BENCHMARK\_ADVANCED(\textcolor{stringliteral}{"{}kblib::visit(v, f...), ex"{}})}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00918}00918       (Catch::Benchmark::Chronometer meter) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00919}00919          \textcolor{keywordtype}{unsigned} accum\{\};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00920}00920          meter.measure([\&] \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00921}00921             \textcolor{keywordflow}{for} (\textcolor{keyword}{const} \textcolor{keyword}{auto}\& x : d) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00922}00922                \textcolor{keywordflow}{try} \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00923}00923                   accum += \mbox{\hyperlink{namespacekblib_af1f6dd52b7ce14276ab5509700c6acf1}{kblib::visit}}(x, [](\textcolor{keyword}{const} \textcolor{keyword}{auto}\& v) \{ \textcolor{keywordflow}{return} v(); \});}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00924}00924                \} \textcolor{keywordflow}{catch} (\textcolor{keyword}{const} std::bad\_variant\_access\&) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00925}00925                \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00926}00926             \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00927}00927             \textcolor{keywordflow}{return} accum;}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00928}00928          \});}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00929}00929       \};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00930}00930       BENCHMARK\_ADVANCED(\textcolor{stringliteral}{"{}kblib::visit(v)(f...), ex"{}})}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00931}00931       (Catch::Benchmark::Chronometer meter) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00932}00932          \textcolor{keywordtype}{unsigned} accum\{\};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00933}00933          meter.measure([\&] \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00934}00934             \textcolor{keywordflow}{for} (\textcolor{keyword}{const} \textcolor{keyword}{auto}\& x : d) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00935}00935                \textcolor{keywordflow}{try} \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00936}00936                   accum += \mbox{\hyperlink{namespacekblib_af1f6dd52b7ce14276ab5509700c6acf1}{kblib::visit}}(x)([](\textcolor{keyword}{const} \textcolor{keyword}{auto}\& v) \{ \textcolor{keywordflow}{return} v(); \});}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00937}00937                \} \textcolor{keywordflow}{catch} (\textcolor{keyword}{const} std::bad\_variant\_access\&) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00938}00938                \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00939}00939             \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00940}00940             \textcolor{keywordflow}{return} accum;}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00941}00941          \});}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00942}00942       \};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00943}00943       BENCHMARK\_ADVANCED(\textcolor{stringliteral}{"{}visit\_indexed(v, f...), ex"{}})}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00944}00944       (Catch::Benchmark::Chronometer meter) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00945}00945          \textcolor{keywordtype}{unsigned} accum\{\};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00946}00946          meter.measure([\&] \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00947}00947             \textcolor{keywordflow}{for} (\textcolor{keyword}{const} \textcolor{keyword}{auto}\& x : d) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00948}00948                \textcolor{keywordflow}{try} \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00949}00949                   accum += \mbox{\hyperlink{namespacekblib_a7600c651ddd193dfeb5d294732ab1e69}{kblib::visit\_indexed}}(}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00950}00950                       x, [](\textcolor{keyword}{auto}, \textcolor{keyword}{const} \textcolor{keyword}{auto}\& v) \{ \textcolor{keywordflow}{return} v(); \});}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00951}00951                \} \textcolor{keywordflow}{catch} (\textcolor{keyword}{const} std::bad\_variant\_access\&) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00952}00952                \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00953}00953             \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00954}00954             \textcolor{keywordflow}{return} accum;}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00955}00955          \});}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00956}00956       \};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00957}00957       BENCHMARK\_ADVANCED(\textcolor{stringliteral}{"{}kblib::visit2(v, f...), ex"{}})}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00958}00958       (Catch::Benchmark::Chronometer meter) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00959}00959          \textcolor{keywordtype}{unsigned} accum\{\};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00960}00960          meter.measure([\&] \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00961}00961             \textcolor{keywordflow}{for} (\textcolor{keyword}{const} \textcolor{keyword}{auto}\& x : d) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00962}00962                \textcolor{keywordflow}{try} \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00963}00963                   accum += \mbox{\hyperlink{namespacekblib_ac780c4d9780fb9b46be0669d377e1e9b}{kblib::visit2}}(x, [](\textcolor{keyword}{const} \textcolor{keyword}{auto}\& v) \{ \textcolor{keywordflow}{return} v(); \});}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00964}00964                \} \textcolor{keywordflow}{catch} (\textcolor{keyword}{const} std::bad\_variant\_access\&) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00965}00965                \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00966}00966             \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00967}00967             \textcolor{keywordflow}{return} accum;}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00968}00968          \});}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00969}00969       \};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00970}00970    \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00971}00971    \textcolor{keyword}{auto} end = std::chrono::steady\_clock::now();}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00972}00972    std::chrono::duration<float, std::ratio<1, 1>> time = end -\/ start;}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00973}00973    std::cout << \textcolor{stringliteral}{"{}\(\backslash\)n\(\backslash\)nProfiling took "{}} << time.count() << \textcolor{stringliteral}{"{} seconds\(\backslash\)n"{}};}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00974}00974 }
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00975}00975    \textcolor{comment}{// All runs should produce identical results}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00976}00976    \textcolor{keywordtype}{unsigned} expected\_value = reproducibility\_test[0].first;}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00977}00977 }
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00978}00978    std::cout << \textcolor{stringliteral}{"{}Checksum: "{}} << expected\_value;}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00979}00979 }
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00980}00980    \textcolor{keywordflow}{for} (\textcolor{keyword}{auto} i : \mbox{\hyperlink{namespacekblib_a72690688922a2d4ae9a3e46ff0c1a9a9}{kblib::range}}(std::size\_t(1), reproducibility\_test.size())) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00981}00981       \textcolor{keyword}{const} \textcolor{keyword}{auto}\& run = reproducibility\_test[i];}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00982}00982       \textcolor{keywordflow}{if} (run.first != expected\_value) \{}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00983}00983          WARN(i << \textcolor{stringliteral}{"{}: "{}} << run.second << \textcolor{stringliteral}{"{}: "{}} << run.first}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00984}00984                 << \textcolor{stringliteral}{"{} != "{}} << expected\_value);}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00985}00985       \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00986}00986       REQUIRE(run.first == expected\_value);}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00987}00987    \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00988}00988 \}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00989}00989 }
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00990}00990 \textcolor{preprocessor}{\#  endif }\textcolor{comment}{// not defined(FAST\_TEST)}}
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00991}00991 }
\DoxyCodeLine{\Hypertarget{visitation__benchmarks_8cpp_source_l00992}00992 \textcolor{preprocessor}{\#endif }\textcolor{comment}{// KBLIB\_USE\_CXX17}}

\end{DoxyCode}
