/**
 * Autogenerated by Thrift for /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_devel_fbthrift/fbthrift/work/fbthrift-2025.01.13.00/thrift/lib/cpp2/test/ProtocolBenchData.thrift
 *
 * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
 *  @generated @nocommit
 */
#pragma once

#include "thrift/lib/cpp2/test/gen-cpp2/ProtocolBenchData_metadata.h"
#include <thrift/lib/cpp2/visitation/for_each.h>

namespace apache {
namespace thrift {
namespace detail {

template <>
struct ForEachField<::thrift::benchmark::Empty> {
  template <typename F, typename... T>
  void operator()([[maybe_unused]] F&& f, [[maybe_unused]] T&&... t) const {
  }
};

template <>
struct ForEachField<::thrift::benchmark::SmallInt> {
  template <typename F, typename... T>
  void operator()([[maybe_unused]] F&& f, [[maybe_unused]] T&&... t) const {
    f(0, static_cast<T&&>(t).smallint_ref()...);
  }
};

template <>
struct ForEachField<::thrift::benchmark::BigInt> {
  template <typename F, typename... T>
  void operator()([[maybe_unused]] F&& f, [[maybe_unused]] T&&... t) const {
    f(0, static_cast<T&&>(t).bigint_ref()...);
  }
};

template <>
struct ForEachField<::thrift::benchmark::SmallString> {
  template <typename F, typename... T>
  void operator()([[maybe_unused]] F&& f, [[maybe_unused]] T&&... t) const {
    f(0, static_cast<T&&>(t).str_ref()...);
  }
};

template <>
struct ForEachField<::thrift::benchmark::BigString> {
  template <typename F, typename... T>
  void operator()([[maybe_unused]] F&& f, [[maybe_unused]] T&&... t) const {
    f(0, static_cast<T&&>(t).str_ref()...);
  }
};

template <>
struct ForEachField<::thrift::benchmark::BigBinary> {
  template <typename F, typename... T>
  void operator()([[maybe_unused]] F&& f, [[maybe_unused]] T&&... t) const {
    f(0, static_cast<T&&>(t).bin_ref()...);
  }
};

template <>
struct ForEachField<::thrift::benchmark::LargeBinary> {
  template <typename F, typename... T>
  void operator()([[maybe_unused]] F&& f, [[maybe_unused]] T&&... t) const {
    f(0, static_cast<T&&>(t).bin_ref()...);
  }
};

template <>
struct ForEachField<::thrift::benchmark::Mixed> {
  template <typename F, typename... T>
  void operator()([[maybe_unused]] F&& f, [[maybe_unused]] T&&... t) const {
    f(0, static_cast<T&&>(t).int32_ref()...);
    f(1, static_cast<T&&>(t).int64_ref()...);
    f(2, static_cast<T&&>(t).b_ref()...);
    f(3, static_cast<T&&>(t).str_ref()...);
  }
};

template <>
struct ForEachField<::thrift::benchmark::SmallListInt> {
  template <typename F, typename... T>
  void operator()([[maybe_unused]] F&& f, [[maybe_unused]] T&&... t) const {
    f(0, static_cast<T&&>(t).lst_ref()...);
  }
};

template <>
struct ForEachField<::thrift::benchmark::BigListInt> {
  template <typename F, typename... T>
  void operator()([[maybe_unused]] F&& f, [[maybe_unused]] T&&... t) const {
    f(0, static_cast<T&&>(t).lst_ref()...);
  }
};

template <>
struct ForEachField<::thrift::benchmark::BigListMixed> {
  template <typename F, typename... T>
  void operator()([[maybe_unused]] F&& f, [[maybe_unused]] T&&... t) const {
    f(0, static_cast<T&&>(t).lst_ref()...);
  }
};

template <>
struct ForEachField<::thrift::benchmark::LargeListMixed> {
  template <typename F, typename... T>
  void operator()([[maybe_unused]] F&& f, [[maybe_unused]] T&&... t) const {
    f(0, static_cast<T&&>(t).lst_ref()...);
  }
};

template <>
struct ForEachField<::thrift::benchmark::LargeSetInt> {
  template <typename F, typename... T>
  void operator()([[maybe_unused]] F&& f, [[maybe_unused]] T&&... t) const {
    f(0, static_cast<T&&>(t).s_ref()...);
  }
};

template <>
struct ForEachField<::thrift::benchmark::UnorderedSetInt> {
  template <typename F, typename... T>
  void operator()([[maybe_unused]] F&& f, [[maybe_unused]] T&&... t) const {
    f(0, static_cast<T&&>(t).s_ref()...);
  }
};

template <>
struct ForEachField<::thrift::benchmark::SortedVecSetInt> {
  template <typename F, typename... T>
  void operator()([[maybe_unused]] F&& f, [[maybe_unused]] T&&... t) const {
    f(0, static_cast<T&&>(t).s_ref()...);
  }
};

template <>
struct ForEachField<::thrift::benchmark::LargeMapInt> {
  template <typename F, typename... T>
  void operator()([[maybe_unused]] F&& f, [[maybe_unused]] T&&... t) const {
    f(0, static_cast<T&&>(t).m_ref()...);
  }
};

template <>
struct ForEachField<::thrift::benchmark::LargeMapMixed> {
  template <typename F, typename... T>
  void operator()([[maybe_unused]] F&& f, [[maybe_unused]] T&&... t) const {
    f(0, static_cast<T&&>(t).m_ref()...);
  }
};

template <>
struct ForEachField<::thrift::benchmark::LargeUnorderedMapMixed> {
  template <typename F, typename... T>
  void operator()([[maybe_unused]] F&& f, [[maybe_unused]] T&&... t) const {
    f(0, static_cast<T&&>(t).m_ref()...);
  }
};

template <>
struct ForEachField<::thrift::benchmark::LargeSortedVecMapMixed> {
  template <typename F, typename... T>
  void operator()([[maybe_unused]] F&& f, [[maybe_unused]] T&&... t) const {
    f(0, static_cast<T&&>(t).m_ref()...);
  }
};

template <>
struct ForEachField<::thrift::benchmark::NestedMapRaw> {
  template <typename F, typename... T>
  void operator()([[maybe_unused]] F&& f, [[maybe_unused]] T&&... t) const {
    f(0, static_cast<T&&>(t).m_ref()...);
  }
};

template <>
struct ForEachField<::thrift::benchmark::NestedMap1> {
  template <typename F, typename... T>
  void operator()([[maybe_unused]] F&& f, [[maybe_unused]] T&&... t) const {
    f(0, static_cast<T&&>(t).m_ref()...);
  }
};

template <>
struct ForEachField<::thrift::benchmark::NestedMap2> {
  template <typename F, typename... T>
  void operator()([[maybe_unused]] F&& f, [[maybe_unused]] T&&... t) const {
    f(0, static_cast<T&&>(t).m_ref()...);
  }
};

template <>
struct ForEachField<::thrift::benchmark::NestedMap3> {
  template <typename F, typename... T>
  void operator()([[maybe_unused]] F&& f, [[maybe_unused]] T&&... t) const {
    f(0, static_cast<T&&>(t).m_ref()...);
  }
};

template <>
struct ForEachField<::thrift::benchmark::NestedMap4> {
  template <typename F, typename... T>
  void operator()([[maybe_unused]] F&& f, [[maybe_unused]] T&&... t) const {
    f(0, static_cast<T&&>(t).m_ref()...);
  }
};

template <>
struct ForEachField<::thrift::benchmark::NestedMap> {
  template <typename F, typename... T>
  void operator()([[maybe_unused]] F&& f, [[maybe_unused]] T&&... t) const {
    f(0, static_cast<T&&>(t).m_ref()...);
  }
};

template <>
struct ForEachField<::thrift::benchmark::SortedVecNestedMapRaw> {
  template <typename F, typename... T>
  void operator()([[maybe_unused]] F&& f, [[maybe_unused]] T&&... t) const {
    f(0, static_cast<T&&>(t).m_ref()...);
  }
};

template <>
struct ForEachField<::thrift::benchmark::SortedVecNestedMap1> {
  template <typename F, typename... T>
  void operator()([[maybe_unused]] F&& f, [[maybe_unused]] T&&... t) const {
    f(0, static_cast<T&&>(t).m_ref()...);
  }
};

template <>
struct ForEachField<::thrift::benchmark::SortedVecNestedMap2> {
  template <typename F, typename... T>
  void operator()([[maybe_unused]] F&& f, [[maybe_unused]] T&&... t) const {
    f(0, static_cast<T&&>(t).m_ref()...);
  }
};

template <>
struct ForEachField<::thrift::benchmark::SortedVecNestedMap3> {
  template <typename F, typename... T>
  void operator()([[maybe_unused]] F&& f, [[maybe_unused]] T&&... t) const {
    f(0, static_cast<T&&>(t).m_ref()...);
  }
};

template <>
struct ForEachField<::thrift::benchmark::SortedVecNestedMap4> {
  template <typename F, typename... T>
  void operator()([[maybe_unused]] F&& f, [[maybe_unused]] T&&... t) const {
    f(0, static_cast<T&&>(t).m_ref()...);
  }
};

template <>
struct ForEachField<::thrift::benchmark::SortedVecNestedMap> {
  template <typename F, typename... T>
  void operator()([[maybe_unused]] F&& f, [[maybe_unused]] T&&... t) const {
    f(0, static_cast<T&&>(t).m_ref()...);
  }
};

template <>
struct ForEachField<::thrift::benchmark::UnorderedMapInt> {
  template <typename F, typename... T>
  void operator()([[maybe_unused]] F&& f, [[maybe_unused]] T&&... t) const {
    f(0, static_cast<T&&>(t).m_ref()...);
  }
};

template <>
struct ForEachField<::thrift::benchmark::LargeMixed> {
  template <typename F, typename... T>
  void operator()([[maybe_unused]] F&& f, [[maybe_unused]] T&&... t) const {
    f(0, static_cast<T&&>(t).var1_ref()...);
    f(1, static_cast<T&&>(t).var2_ref()...);
    f(2, static_cast<T&&>(t).var3_ref()...);
    f(3, static_cast<T&&>(t).var4_ref()...);
    f(4, static_cast<T&&>(t).var5_ref()...);
    f(5, static_cast<T&&>(t).var6_ref()...);
    f(6, static_cast<T&&>(t).var7_ref()...);
    f(7, static_cast<T&&>(t).var8_ref()...);
    f(8, static_cast<T&&>(t).var9_ref()...);
    f(9, static_cast<T&&>(t).var10_ref()...);
    f(10, static_cast<T&&>(t).var11_ref()...);
    f(11, static_cast<T&&>(t).var12_ref()...);
    f(12, static_cast<T&&>(t).var13_ref()...);
    f(13, static_cast<T&&>(t).var14_ref()...);
    f(14, static_cast<T&&>(t).var15_ref()...);
    f(15, static_cast<T&&>(t).var16_ref()...);
    f(16, static_cast<T&&>(t).var17_ref()...);
    f(17, static_cast<T&&>(t).var18_ref()...);
    f(18, static_cast<T&&>(t).var19_ref()...);
    f(19, static_cast<T&&>(t).var20_ref()...);
    f(20, static_cast<T&&>(t).var21_ref()...);
    f(21, static_cast<T&&>(t).var22_ref()...);
    f(22, static_cast<T&&>(t).var23_ref()...);
    f(23, static_cast<T&&>(t).var24_ref()...);
    f(24, static_cast<T&&>(t).var25_ref()...);
    f(25, static_cast<T&&>(t).var26_ref()...);
    f(26, static_cast<T&&>(t).var27_ref()...);
    f(27, static_cast<T&&>(t).var28_ref()...);
    f(28, static_cast<T&&>(t).var29_ref()...);
    f(29, static_cast<T&&>(t).var30_ref()...);
    f(30, static_cast<T&&>(t).var31_ref()...);
    f(31, static_cast<T&&>(t).var32_ref()...);
    f(32, static_cast<T&&>(t).var33_ref()...);
    f(33, static_cast<T&&>(t).var34_ref()...);
    f(34, static_cast<T&&>(t).var35_ref()...);
    f(35, static_cast<T&&>(t).var36_ref()...);
    f(36, static_cast<T&&>(t).var37_ref()...);
    f(37, static_cast<T&&>(t).var38_ref()...);
    f(38, static_cast<T&&>(t).var39_ref()...);
    f(39, static_cast<T&&>(t).var40_ref()...);
    f(40, static_cast<T&&>(t).var41_ref()...);
    f(41, static_cast<T&&>(t).var42_ref()...);
    f(42, static_cast<T&&>(t).var43_ref()...);
    f(43, static_cast<T&&>(t).var44_ref()...);
    f(44, static_cast<T&&>(t).var45_ref()...);
    f(45, static_cast<T&&>(t).var46_ref()...);
    f(46, static_cast<T&&>(t).var47_ref()...);
    f(47, static_cast<T&&>(t).var48_ref()...);
    f(48, static_cast<T&&>(t).var49_ref()...);
    f(49, static_cast<T&&>(t).var50_ref()...);
    f(50, static_cast<T&&>(t).var51_ref()...);
    f(51, static_cast<T&&>(t).var52_ref()...);
    f(52, static_cast<T&&>(t).var53_ref()...);
    f(53, static_cast<T&&>(t).var54_ref()...);
    f(54, static_cast<T&&>(t).var55_ref()...);
    f(55, static_cast<T&&>(t).var56_ref()...);
    f(56, static_cast<T&&>(t).var57_ref()...);
    f(57, static_cast<T&&>(t).var58_ref()...);
    f(58, static_cast<T&&>(t).var59_ref()...);
    f(59, static_cast<T&&>(t).var60_ref()...);
    f(60, static_cast<T&&>(t).var61_ref()...);
    f(61, static_cast<T&&>(t).var62_ref()...);
    f(62, static_cast<T&&>(t).var63_ref()...);
    f(63, static_cast<T&&>(t).var64_ref()...);
    f(64, static_cast<T&&>(t).var65_ref()...);
    f(65, static_cast<T&&>(t).var66_ref()...);
    f(66, static_cast<T&&>(t).var67_ref()...);
    f(67, static_cast<T&&>(t).var68_ref()...);
    f(68, static_cast<T&&>(t).var69_ref()...);
    f(69, static_cast<T&&>(t).var70_ref()...);
    f(70, static_cast<T&&>(t).var71_ref()...);
    f(71, static_cast<T&&>(t).var72_ref()...);
    f(72, static_cast<T&&>(t).var73_ref()...);
    f(73, static_cast<T&&>(t).var74_ref()...);
    f(74, static_cast<T&&>(t).var75_ref()...);
    f(75, static_cast<T&&>(t).var76_ref()...);
    f(76, static_cast<T&&>(t).var77_ref()...);
    f(77, static_cast<T&&>(t).var78_ref()...);
    f(78, static_cast<T&&>(t).var79_ref()...);
    f(79, static_cast<T&&>(t).var80_ref()...);
    f(80, static_cast<T&&>(t).var81_ref()...);
    f(81, static_cast<T&&>(t).var82_ref()...);
    f(82, static_cast<T&&>(t).var83_ref()...);
    f(83, static_cast<T&&>(t).var84_ref()...);
    f(84, static_cast<T&&>(t).var85_ref()...);
    f(85, static_cast<T&&>(t).var86_ref()...);
    f(86, static_cast<T&&>(t).var87_ref()...);
    f(87, static_cast<T&&>(t).var88_ref()...);
    f(88, static_cast<T&&>(t).var89_ref()...);
    f(89, static_cast<T&&>(t).var90_ref()...);
    f(90, static_cast<T&&>(t).var91_ref()...);
    f(91, static_cast<T&&>(t).var92_ref()...);
    f(92, static_cast<T&&>(t).var93_ref()...);
    f(93, static_cast<T&&>(t).var94_ref()...);
    f(94, static_cast<T&&>(t).var95_ref()...);
    f(95, static_cast<T&&>(t).var96_ref()...);
    f(96, static_cast<T&&>(t).var97_ref()...);
    f(97, static_cast<T&&>(t).var98_ref()...);
    f(98, static_cast<T&&>(t).var99_ref()...);
    f(99, static_cast<T&&>(t).var100_ref()...);
  }
};

template <>
struct ForEachField<::thrift::benchmark::MixedInt> {
  template <typename F, typename... T>
  void operator()([[maybe_unused]] F&& f, [[maybe_unused]] T&&... t) const {
    f(0, static_cast<T&&>(t).var1_ref()...);
    f(1, static_cast<T&&>(t).var2_ref()...);
    f(2, static_cast<T&&>(t).var3_ref()...);
    f(3, static_cast<T&&>(t).var4_ref()...);
    f(4, static_cast<T&&>(t).var5_ref()...);
    f(5, static_cast<T&&>(t).var6_ref()...);
    f(6, static_cast<T&&>(t).var7_ref()...);
    f(7, static_cast<T&&>(t).var8_ref()...);
    f(8, static_cast<T&&>(t).var9_ref()...);
    f(9, static_cast<T&&>(t).varx_ref()...);
    f(10, static_cast<T&&>(t).vary_ref()...);
    f(11, static_cast<T&&>(t).varz_ref()...);
  }
};

template <>
struct ForEachField<::thrift::benchmark::BigListMixedInt> {
  template <typename F, typename... T>
  void operator()([[maybe_unused]] F&& f, [[maybe_unused]] T&&... t) const {
    f(0, static_cast<T&&>(t).lst_ref()...);
  }
};

template <>
struct ForEachField<::thrift::benchmark::ComplexStruct> {
  template <typename F, typename... T>
  void operator()([[maybe_unused]] F&& f, [[maybe_unused]] T&&... t) const {
    f(0, static_cast<T&&>(t).var1_ref()...);
    f(1, static_cast<T&&>(t).var2_ref()...);
    f(2, static_cast<T&&>(t).var3_ref()...);
    f(3, static_cast<T&&>(t).var4_ref()...);
    f(4, static_cast<T&&>(t).var5_ref()...);
    f(5, static_cast<T&&>(t).var6_ref()...);
    f(6, static_cast<T&&>(t).var7_ref()...);
    f(7, static_cast<T&&>(t).var8_ref()...);
    f(8, static_cast<T&&>(t).var9_ref()...);
    f(9, static_cast<T&&>(t).var10_ref()...);
    f(10, static_cast<T&&>(t).var11_ref()...);
    f(11, static_cast<T&&>(t).var12_ref()...);
  }
};

template <>
struct ForEachField<::thrift::benchmark::OpEmpty> {
  template <typename F, typename... T>
  void operator()([[maybe_unused]] F&& f, [[maybe_unused]] T&&... t) const {
  }
};

template <>
struct ForEachField<::thrift::benchmark::OpSmallInt> {
  template <typename F, typename... T>
  void operator()([[maybe_unused]] F&& f, [[maybe_unused]] T&&... t) const {
    f(0, static_cast<T&&>(t).smallint_ref()...);
  }
};

template <>
struct ForEachField<::thrift::benchmark::OpBigInt> {
  template <typename F, typename... T>
  void operator()([[maybe_unused]] F&& f, [[maybe_unused]] T&&... t) const {
    f(0, static_cast<T&&>(t).bigint_ref()...);
  }
};

template <>
struct ForEachField<::thrift::benchmark::OpSmallString> {
  template <typename F, typename... T>
  void operator()([[maybe_unused]] F&& f, [[maybe_unused]] T&&... t) const {
    f(0, static_cast<T&&>(t).str_ref()...);
  }
};

template <>
struct ForEachField<::thrift::benchmark::OpBigString> {
  template <typename F, typename... T>
  void operator()([[maybe_unused]] F&& f, [[maybe_unused]] T&&... t) const {
    f(0, static_cast<T&&>(t).str_ref()...);
  }
};

template <>
struct ForEachField<::thrift::benchmark::OpMixed> {
  template <typename F, typename... T>
  void operator()([[maybe_unused]] F&& f, [[maybe_unused]] T&&... t) const {
    f(0, static_cast<T&&>(t).int32_ref()...);
    f(1, static_cast<T&&>(t).int64_ref()...);
    f(2, static_cast<T&&>(t).b_ref()...);
    f(3, static_cast<T&&>(t).str_ref()...);
  }
};

template <>
struct ForEachField<::thrift::benchmark::OpSmallListInt> {
  template <typename F, typename... T>
  void operator()([[maybe_unused]] F&& f, [[maybe_unused]] T&&... t) const {
    f(0, static_cast<T&&>(t).lst_ref()...);
  }
};

template <>
struct ForEachField<::thrift::benchmark::OpBigListInt> {
  template <typename F, typename... T>
  void operator()([[maybe_unused]] F&& f, [[maybe_unused]] T&&... t) const {
    f(0, static_cast<T&&>(t).lst_ref()...);
  }
};

template <>
struct ForEachField<::thrift::benchmark::OpBigListMixed> {
  template <typename F, typename... T>
  void operator()([[maybe_unused]] F&& f, [[maybe_unused]] T&&... t) const {
    f(0, static_cast<T&&>(t).lst_ref()...);
  }
};

template <>
struct ForEachField<::thrift::benchmark::OpLargeListMixed> {
  template <typename F, typename... T>
  void operator()([[maybe_unused]] F&& f, [[maybe_unused]] T&&... t) const {
    f(0, static_cast<T&&>(t).lst_ref()...);
  }
};

template <>
struct ForEachField<::thrift::benchmark::OpLargeSetInt> {
  template <typename F, typename... T>
  void operator()([[maybe_unused]] F&& f, [[maybe_unused]] T&&... t) const {
    f(0, static_cast<T&&>(t).s_ref()...);
  }
};

template <>
struct ForEachField<::thrift::benchmark::OpUnorderedSetInt> {
  template <typename F, typename... T>
  void operator()([[maybe_unused]] F&& f, [[maybe_unused]] T&&... t) const {
    f(0, static_cast<T&&>(t).s_ref()...);
  }
};

template <>
struct ForEachField<::thrift::benchmark::OpSortedVecSetInt> {
  template <typename F, typename... T>
  void operator()([[maybe_unused]] F&& f, [[maybe_unused]] T&&... t) const {
    f(0, static_cast<T&&>(t).s_ref()...);
  }
};

template <>
struct ForEachField<::thrift::benchmark::OpLargeMapInt> {
  template <typename F, typename... T>
  void operator()([[maybe_unused]] F&& f, [[maybe_unused]] T&&... t) const {
    f(0, static_cast<T&&>(t).m_ref()...);
  }
};

template <>
struct ForEachField<::thrift::benchmark::OpLargeMapMixed> {
  template <typename F, typename... T>
  void operator()([[maybe_unused]] F&& f, [[maybe_unused]] T&&... t) const {
    f(0, static_cast<T&&>(t).m_ref()...);
  }
};

template <>
struct ForEachField<::thrift::benchmark::OpLargeUnorderedMapMixed> {
  template <typename F, typename... T>
  void operator()([[maybe_unused]] F&& f, [[maybe_unused]] T&&... t) const {
    f(0, static_cast<T&&>(t).m_ref()...);
  }
};

template <>
struct ForEachField<::thrift::benchmark::OpLargeSortedVecMapMixed> {
  template <typename F, typename... T>
  void operator()([[maybe_unused]] F&& f, [[maybe_unused]] T&&... t) const {
    f(0, static_cast<T&&>(t).m_ref()...);
  }
};

template <>
struct ForEachField<::thrift::benchmark::OpNestedMap1> {
  template <typename F, typename... T>
  void operator()([[maybe_unused]] F&& f, [[maybe_unused]] T&&... t) const {
    f(0, static_cast<T&&>(t).m_ref()...);
  }
};

template <>
struct ForEachField<::thrift::benchmark::OpNestedMap2> {
  template <typename F, typename... T>
  void operator()([[maybe_unused]] F&& f, [[maybe_unused]] T&&... t) const {
    f(0, static_cast<T&&>(t).m_ref()...);
  }
};

template <>
struct ForEachField<::thrift::benchmark::OpNestedMap3> {
  template <typename F, typename... T>
  void operator()([[maybe_unused]] F&& f, [[maybe_unused]] T&&... t) const {
    f(0, static_cast<T&&>(t).m_ref()...);
  }
};

template <>
struct ForEachField<::thrift::benchmark::OpNestedMap4> {
  template <typename F, typename... T>
  void operator()([[maybe_unused]] F&& f, [[maybe_unused]] T&&... t) const {
    f(0, static_cast<T&&>(t).m_ref()...);
  }
};

template <>
struct ForEachField<::thrift::benchmark::OpNestedMap> {
  template <typename F, typename... T>
  void operator()([[maybe_unused]] F&& f, [[maybe_unused]] T&&... t) const {
    f(0, static_cast<T&&>(t).m_ref()...);
  }
};

template <>
struct ForEachField<::thrift::benchmark::OpSortedVecNestedMapRaw> {
  template <typename F, typename... T>
  void operator()([[maybe_unused]] F&& f, [[maybe_unused]] T&&... t) const {
    f(0, static_cast<T&&>(t).m_ref()...);
  }
};

template <>
struct ForEachField<::thrift::benchmark::OpSortedVecNestedMap1> {
  template <typename F, typename... T>
  void operator()([[maybe_unused]] F&& f, [[maybe_unused]] T&&... t) const {
    f(0, static_cast<T&&>(t).m_ref()...);
  }
};

template <>
struct ForEachField<::thrift::benchmark::OpSortedVecNestedMap2> {
  template <typename F, typename... T>
  void operator()([[maybe_unused]] F&& f, [[maybe_unused]] T&&... t) const {
    f(0, static_cast<T&&>(t).m_ref()...);
  }
};

template <>
struct ForEachField<::thrift::benchmark::OpSortedVecNestedMap3> {
  template <typename F, typename... T>
  void operator()([[maybe_unused]] F&& f, [[maybe_unused]] T&&... t) const {
    f(0, static_cast<T&&>(t).m_ref()...);
  }
};

template <>
struct ForEachField<::thrift::benchmark::OpSortedVecNestedMap4> {
  template <typename F, typename... T>
  void operator()([[maybe_unused]] F&& f, [[maybe_unused]] T&&... t) const {
    f(0, static_cast<T&&>(t).m_ref()...);
  }
};

template <>
struct ForEachField<::thrift::benchmark::OpSortedVecNestedMap> {
  template <typename F, typename... T>
  void operator()([[maybe_unused]] F&& f, [[maybe_unused]] T&&... t) const {
    f(0, static_cast<T&&>(t).m_ref()...);
  }
};

template <>
struct ForEachField<::thrift::benchmark::OpUnorderedMapInt> {
  template <typename F, typename... T>
  void operator()([[maybe_unused]] F&& f, [[maybe_unused]] T&&... t) const {
    f(0, static_cast<T&&>(t).m_ref()...);
  }
};

template <>
struct ForEachField<::thrift::benchmark::OpLargeMixed> {
  template <typename F, typename... T>
  void operator()([[maybe_unused]] F&& f, [[maybe_unused]] T&&... t) const {
    f(0, static_cast<T&&>(t).var1_ref()...);
    f(1, static_cast<T&&>(t).var2_ref()...);
    f(2, static_cast<T&&>(t).var3_ref()...);
    f(3, static_cast<T&&>(t).var4_ref()...);
    f(4, static_cast<T&&>(t).var5_ref()...);
    f(5, static_cast<T&&>(t).var6_ref()...);
    f(6, static_cast<T&&>(t).var7_ref()...);
    f(7, static_cast<T&&>(t).var8_ref()...);
    f(8, static_cast<T&&>(t).var9_ref()...);
    f(9, static_cast<T&&>(t).var10_ref()...);
    f(10, static_cast<T&&>(t).var11_ref()...);
    f(11, static_cast<T&&>(t).var12_ref()...);
    f(12, static_cast<T&&>(t).var13_ref()...);
    f(13, static_cast<T&&>(t).var14_ref()...);
    f(14, static_cast<T&&>(t).var15_ref()...);
    f(15, static_cast<T&&>(t).var16_ref()...);
    f(16, static_cast<T&&>(t).var17_ref()...);
    f(17, static_cast<T&&>(t).var18_ref()...);
    f(18, static_cast<T&&>(t).var19_ref()...);
    f(19, static_cast<T&&>(t).var20_ref()...);
    f(20, static_cast<T&&>(t).var21_ref()...);
    f(21, static_cast<T&&>(t).var22_ref()...);
    f(22, static_cast<T&&>(t).var23_ref()...);
    f(23, static_cast<T&&>(t).var24_ref()...);
    f(24, static_cast<T&&>(t).var25_ref()...);
    f(25, static_cast<T&&>(t).var26_ref()...);
    f(26, static_cast<T&&>(t).var27_ref()...);
    f(27, static_cast<T&&>(t).var28_ref()...);
    f(28, static_cast<T&&>(t).var29_ref()...);
    f(29, static_cast<T&&>(t).var30_ref()...);
    f(30, static_cast<T&&>(t).var31_ref()...);
    f(31, static_cast<T&&>(t).var32_ref()...);
    f(32, static_cast<T&&>(t).var33_ref()...);
    f(33, static_cast<T&&>(t).var34_ref()...);
    f(34, static_cast<T&&>(t).var35_ref()...);
    f(35, static_cast<T&&>(t).var36_ref()...);
    f(36, static_cast<T&&>(t).var37_ref()...);
    f(37, static_cast<T&&>(t).var38_ref()...);
    f(38, static_cast<T&&>(t).var39_ref()...);
    f(39, static_cast<T&&>(t).var40_ref()...);
    f(40, static_cast<T&&>(t).var41_ref()...);
    f(41, static_cast<T&&>(t).var42_ref()...);
    f(42, static_cast<T&&>(t).var43_ref()...);
    f(43, static_cast<T&&>(t).var44_ref()...);
    f(44, static_cast<T&&>(t).var45_ref()...);
    f(45, static_cast<T&&>(t).var46_ref()...);
    f(46, static_cast<T&&>(t).var47_ref()...);
    f(47, static_cast<T&&>(t).var48_ref()...);
    f(48, static_cast<T&&>(t).var49_ref()...);
    f(49, static_cast<T&&>(t).var50_ref()...);
    f(50, static_cast<T&&>(t).var51_ref()...);
    f(51, static_cast<T&&>(t).var52_ref()...);
    f(52, static_cast<T&&>(t).var53_ref()...);
    f(53, static_cast<T&&>(t).var54_ref()...);
    f(54, static_cast<T&&>(t).var55_ref()...);
    f(55, static_cast<T&&>(t).var56_ref()...);
    f(56, static_cast<T&&>(t).var57_ref()...);
    f(57, static_cast<T&&>(t).var58_ref()...);
    f(58, static_cast<T&&>(t).var59_ref()...);
    f(59, static_cast<T&&>(t).var60_ref()...);
    f(60, static_cast<T&&>(t).var61_ref()...);
    f(61, static_cast<T&&>(t).var62_ref()...);
    f(62, static_cast<T&&>(t).var63_ref()...);
    f(63, static_cast<T&&>(t).var64_ref()...);
    f(64, static_cast<T&&>(t).var65_ref()...);
    f(65, static_cast<T&&>(t).var66_ref()...);
    f(66, static_cast<T&&>(t).var67_ref()...);
    f(67, static_cast<T&&>(t).var68_ref()...);
    f(68, static_cast<T&&>(t).var69_ref()...);
    f(69, static_cast<T&&>(t).var70_ref()...);
    f(70, static_cast<T&&>(t).var71_ref()...);
    f(71, static_cast<T&&>(t).var72_ref()...);
    f(72, static_cast<T&&>(t).var73_ref()...);
    f(73, static_cast<T&&>(t).var74_ref()...);
    f(74, static_cast<T&&>(t).var75_ref()...);
    f(75, static_cast<T&&>(t).var76_ref()...);
    f(76, static_cast<T&&>(t).var77_ref()...);
    f(77, static_cast<T&&>(t).var78_ref()...);
    f(78, static_cast<T&&>(t).var79_ref()...);
    f(79, static_cast<T&&>(t).var80_ref()...);
    f(80, static_cast<T&&>(t).var81_ref()...);
    f(81, static_cast<T&&>(t).var82_ref()...);
    f(82, static_cast<T&&>(t).var83_ref()...);
    f(83, static_cast<T&&>(t).var84_ref()...);
    f(84, static_cast<T&&>(t).var85_ref()...);
    f(85, static_cast<T&&>(t).var86_ref()...);
    f(86, static_cast<T&&>(t).var87_ref()...);
    f(87, static_cast<T&&>(t).var88_ref()...);
    f(88, static_cast<T&&>(t).var89_ref()...);
    f(89, static_cast<T&&>(t).var90_ref()...);
    f(90, static_cast<T&&>(t).var91_ref()...);
    f(91, static_cast<T&&>(t).var92_ref()...);
    f(92, static_cast<T&&>(t).var93_ref()...);
    f(93, static_cast<T&&>(t).var94_ref()...);
    f(94, static_cast<T&&>(t).var95_ref()...);
    f(95, static_cast<T&&>(t).var96_ref()...);
    f(96, static_cast<T&&>(t).var97_ref()...);
    f(97, static_cast<T&&>(t).var98_ref()...);
    f(98, static_cast<T&&>(t).var99_ref()...);
    f(99, static_cast<T&&>(t).var100_ref()...);
  }
};

template <>
struct ForEachField<::thrift::benchmark::OpMixedInt> {
  template <typename F, typename... T>
  void operator()([[maybe_unused]] F&& f, [[maybe_unused]] T&&... t) const {
    f(0, static_cast<T&&>(t).var1_ref()...);
    f(1, static_cast<T&&>(t).var2_ref()...);
    f(2, static_cast<T&&>(t).var3_ref()...);
    f(3, static_cast<T&&>(t).var4_ref()...);
    f(4, static_cast<T&&>(t).var5_ref()...);
    f(5, static_cast<T&&>(t).var6_ref()...);
    f(6, static_cast<T&&>(t).var7_ref()...);
    f(7, static_cast<T&&>(t).var8_ref()...);
    f(8, static_cast<T&&>(t).var9_ref()...);
    f(9, static_cast<T&&>(t).varx_ref()...);
    f(10, static_cast<T&&>(t).vary_ref()...);
    f(11, static_cast<T&&>(t).varz_ref()...);
  }
};

template <>
struct ForEachField<::thrift::benchmark::OpBigListMixedInt> {
  template <typename F, typename... T>
  void operator()([[maybe_unused]] F&& f, [[maybe_unused]] T&&... t) const {
    f(0, static_cast<T&&>(t).lst_ref()...);
  }
};

template <>
struct ForEachField<::thrift::benchmark::OpComplexStruct> {
  template <typename F, typename... T>
  void operator()([[maybe_unused]] F&& f, [[maybe_unused]] T&&... t) const {
    f(0, static_cast<T&&>(t).var1_ref()...);
    f(1, static_cast<T&&>(t).var2_ref()...);
    f(2, static_cast<T&&>(t).var3_ref()...);
    f(3, static_cast<T&&>(t).var4_ref()...);
    f(4, static_cast<T&&>(t).var5_ref()...);
    f(5, static_cast<T&&>(t).var6_ref()...);
    f(6, static_cast<T&&>(t).var7_ref()...);
    f(7, static_cast<T&&>(t).var8_ref()...);
    f(8, static_cast<T&&>(t).var9_ref()...);
    f(9, static_cast<T&&>(t).var10_ref()...);
    f(10, static_cast<T&&>(t).var11_ref()...);
    f(11, static_cast<T&&>(t).var12_ref()...);
  }
};
} // namespace detail
} // namespace thrift
} // namespace apache
