............................................................................... benchmark name samples iterations estimated mean low mean high mean std dev low std dev high std dev ------------------------------------------------------------------------------- baseline 100 9 4.743 ms 5.377 us 5.257 us 5.604 us 815 ns 473 ns 1.219 us raw pointer 100 5 5.156 ms 10.47 us 10.331 us 10.772 us 992 ns 506 ns 1.697 us unique_ptr 100 4 4.7136 ms 11.826 us 11.777 us 11.934 us 354 ns 193 ns 629 ns poly_obj 100 4 5.9116 ms 14.644 us 14.606 us 14.745 us 291 ns 131 ns 588 ns std::function 100 3 4.4946 ms 15.247 us 15.185 us 15.464 us 524 ns 141 ns 1.189 us std::visit(v, f) 100 2 5.4606 ms 27.375 us 27.319 us 27.571 us 443 ns 15 ns 1.009 us kblib::visit(v, f...) 100 2 7.1178 ms 37.308 us 37.237 us 37.471 us 519 ns 235 ns 953 ns kblib::visit(v)(f...) 100 2 7.2682 ms 37.253 us 37.132 us 37.49 us 836 ns 495 ns 1.355 us visit_indexed(v, f...) 100 2 6.1444 ms 30.203 us 30.11 us 30.442 us 677 ns 172 ns 1.359 us kblib::visit2(v, f...) 100 6 5.073 ms 8.407 us 8.401 us 8.423 us 46 ns 11 ns 83 ns kblib::visit2_nop(v, f...) 100 6 5.2518 ms 8.65 us 8.624 us 8.724 us 198 ns 55 ns 422 ns std::get_if 100 6 5.2548 ms 8.58 us 8.571 us 8.604 us 68 ns 11 ns 125 ns switch (v.index()) 100 5 4.53 ms 8.984 us 8.976 us 9.003 us 55 ns 9 ns 100 ns raw pointer, ch 100 3 4.608 ms 15.859 us 15.732 us 16.168 us 953 ns 495 ns 1.945 us unique_ptr, ch 100 3 5.4471 ms 18.344 us 18.185 us 18.621 us 1.049 us 681 ns 1.495 us poly_obj, ch 100 3 5.4147 ms 18.29 us 18.154 us 18.501 us 847 ns 605 ns 1.123 us std::function, ch 100 2 4.9736 ms 25.2 us 25.049 us 25.751 us 1.255 us 163 ns 2.845 us kblib::visit2_nop(v, f...), ch 100 4 4.9792 ms 12.327 us 12.257 us 12.558 us 575 ns 199 ns 1.274 us std::get_if, ch 100 4 5.0184 ms 12.386 us 12.371 us 12.42 us 107 ns 35 ns 189 ns switch (v.index()), ch 100 3 5.2515 ms 16.817 us 16.787 us 16.853 us 166 ns 137 ns 229 ns std::function, ex 100 2 4.7588 ms 23.758 us 23.665 us 23.951 us 654 ns 373 ns 1.115 us std::visit(v, f), ex 100 2 8.1426 ms 40.646 us 40.478 us 40.916 us 1.065 us 739 ns 1.445 us kblib::visit(v, f...), ex 100 1 4.5847 ms 44.016 us 43.855 us 44.341 us 1.114 us 639 ns 1.733 us kblib::visit(v)(f...), ex 100 1 4.8752 ms 46.345 us 46.078 us 47.004 us 1.974 us 680 ns 3.551 us visit_indexed(v, f...), ex 100 2 8.0456 ms 40.066 us 39.853 us 40.526 us 1.52 us 869 ns 2.835 us kblib::visit2(v, f...), ex 100 4 4.9984 ms 12.353 us 12.318 us 12.426 us 245 ns 128 ns 403 ns Profiling took 79.9745 seconds ............................................................................... benchmark name samples iterations estimated mean low mean high mean std dev low std dev high std dev ------------------------------------------------------------------------------- baseline 100 6 22.3692 ms 37.549 us 37.463 us 37.684 us 539 ns 382 ns 750 ns raw pointer 100 5 25.0175 ms 51.205 us 50.874 us 51.771 us 2.15 us 1.486 us 3.603 us unique_ptr 100 4 27.8304 ms 70.346 us 70.156 us 70.684 us 1.262 us 816 ns 1.924 us poly_obj 100 3 23.6682 ms 79.075 us 78.949 us 79.336 us 886 ns 520 ns 1.625 us std::function 100 3 31.8021 ms 106.562 us 106.382 us 106.841 us 1.129 us 836 ns 1.618 us std::visit(v, f) 100 1 23.5644 ms 238.055 us 237.817 us 238.509 us 1.626 us 1 us 2.622 us kblib::visit(v, f...) 100 1 25.7574 ms 258.965 us 258.066 us 260.366 us 5.637 us 4.066 us 8.166 us kblib::visit(v)(f...) 100 1 28.5982 ms 288.355 us 288.059 us 288.93 us 2.025 us 1.262 us 3.524 us visit_indexed(v, f...) 100 2 42.2564 ms 208.894 us 208.644 us 209.314 us 1.62 us 1.085 us 2.408 us kblib::visit2(v, f...) 100 2 42.043 ms 211.649 us 210.64 us 214.749 us 8.266 us 3.281 us 18.263 us kblib::visit2_nop(v, f...) 100 1 22.4208 ms 222.502 us 221.938 us 223.046 us 2.814 us 2.477 us 3.237 us std::get_if 100 2 31.1868 ms 158.164 us 157.007 us 160.526 us 8.067 us 4.725 us 14.666 us switch (v.index()) 100 2 31.8476 ms 160.739 us 159.819 us 162.011 us 5.483 us 4.228 us 6.857 us raw pointer, ch 100 4 22.7368 ms 56.917 us 56.429 us 58.236 us 3.801 us 1.717 us 8.02 us unique_ptr, ch 100 3 31.3869 ms 108.046 us 107.507 us 109.231 us 3.883 us 1.865 us 6.907 us poly_obj, ch 100 3 28.8066 ms 96.128 us 96.011 us 96.313 us 739 ns 526 ns 1.058 us std::function, ch 100 2 24.474 ms 122.038 us 121.671 us 122.737 us 2.51 us 1.494 us 3.997 us kblib::visit2_nop(v, f...), ch 100 1 31.7631 ms 322.764 us 318.6 us 329.289 us 26.09 us 18.561 us 35.949 us std::get_if, ch 100 1 23.0951 ms 232.006 us 231.733 us 232.347 us 1.543 us 1.221 us 2.061 us switch (v.index()), ch 100 2 39.7608 ms 203.752 us 201.604 us 211.332 us 18.226 us 4.429 us 41.284 us std::function, ex 100 2 25.1966 ms 126.152 us 126.051 us 126.364 us 715 ns 408 ns 1.27 us std::visit(v, f)), ex 100 1 31.1489 ms 310.9 us 310.401 us 311.57 us 2.921 us 2.349 us 3.567 us kblib::visit(v, f...), ex 100 1 32.8602 ms 328.484 us 327.863 us 329.82 us 4.41 us 2.399 us 7.407 us kblib::visit(v)(f...), ex 100 1 37.4233 ms 377.681 us 372.931 us 386.452 us 31.852 us 19.155 us 46.567 us visit_indexed(v, f...), ex 100 1 26.1303 ms 261.261 us 260.765 us 262.084 us 3.206 us 2.318 us 5.439 us kblib::visit2(v, f...), ex 100 1 31.4924 ms 315.509 us 314.922 us 316.366 us 3.585 us 2.645 us 5.292 us Profiling took 285.908 seconds