/**
 * Autogenerated by Thrift for thrift/compiler/test/fixtures/complex-struct/src/module.thrift
 *
 * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
 *  @generated @nocommit
 */
#pragma once

#include <thrift/lib/cpp2/gen/module_types_h.h>



namespace apache {
namespace thrift {
namespace ident {
struct myLongField;
struct MyByteField;
struct myStringField;
struct myFloatField;
struct myLongField;
struct mapListOfFloats;
struct MyIntField;
struct MyStringField;
struct MyDataField;
struct myEnum;
struct MyBoolField;
struct MyByteField;
struct MyShortField;
struct MyLongField;
struct MyDoubleField;
struct lDouble;
struct lShort;
struct lInteger;
struct lLong;
struct lString;
struct lBool;
struct lByte;
struct mShortString;
struct mIntegerString;
struct mStringMyStruct;
struct mStringBool;
struct mIntegerInteger;
struct mIntegerBool;
struct sShort;
struct sMyStruct;
struct sLong;
struct sString;
struct sByte;
struct mListList;
struct age;
struct name;
struct myLongDFset;
struct myLongDF;
struct portDFset;
struct portNum;
struct myBinaryDFset;
struct myBinary;
struct myByteDFSet;
struct myByte;
struct myDoubleDFset;
struct myDoubleDFZero;
struct myDouble;
struct field3;
struct myList;
struct mySet;
struct simpleStruct;
struct listStructDFset;
struct myUnion;
struct listUnionDFset;
struct mapNestlistStructDfSet;
struct mapJavaTypeDFset;
struct emptyMap;
struct enumMapDFset;
struct myLongField;
struct myLongTypeDef;
struct myStringField;
struct myStringTypedef;
struct myMapField;
struct myMapTypedef;
struct myListField;
struct myListTypedef;
struct myMapListOfTypeDef;
struct myEnum;
struct myStruct;
struct myDataItem;
struct complexNestedStruct;
struct longValue;
struct intValue;
struct myEnum;
struct setFloat;
struct myDataItem;
struct complexNestedStruct;
struct setOfSetOfInt;
struct listofListOfListOfListOfEnum;
struct listOfListOfMyStruct;
struct setOfListOfListOfLong;
struct setOfSetOfsetOfLong;
struct mapStructListOfListOfLong;
struct mKeyStructValInt;
struct listOfMapKeyIntValInt;
struct listOfMapKeyStrValList;
struct mapKeySetValLong;
struct mapKeyListValLong;
struct mapKeyMapValMap;
struct mapKeySetValMap;
struct NestedMaps;
struct mapKeyIntValList;
struct mapKeyIntValSet;
struct mapKeySetValInt;
struct mapKeyListValSet;
struct lsMap;
struct ioMap;
struct BigInteger;
struct binaryTestBuffer;
struct message;
struct errorCode;
struct message;
struct errorCode;
struct message;
struct listStrings;
struct errorEnum;
struct unionError;
struct structError;
struct lsMap;
} // namespace ident
namespace detail {
#ifndef APACHE_THRIFT_ACCESSOR_myLongField
#define APACHE_THRIFT_ACCESSOR_myLongField
APACHE_THRIFT_DEFINE_ACCESSOR(myLongField);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_MyByteField
#define APACHE_THRIFT_ACCESSOR_MyByteField
APACHE_THRIFT_DEFINE_ACCESSOR(MyByteField);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_myStringField
#define APACHE_THRIFT_ACCESSOR_myStringField
APACHE_THRIFT_DEFINE_ACCESSOR(myStringField);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_myFloatField
#define APACHE_THRIFT_ACCESSOR_myFloatField
APACHE_THRIFT_DEFINE_ACCESSOR(myFloatField);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_myLongField
#define APACHE_THRIFT_ACCESSOR_myLongField
APACHE_THRIFT_DEFINE_ACCESSOR(myLongField);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_mapListOfFloats
#define APACHE_THRIFT_ACCESSOR_mapListOfFloats
APACHE_THRIFT_DEFINE_ACCESSOR(mapListOfFloats);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_MyIntField
#define APACHE_THRIFT_ACCESSOR_MyIntField
APACHE_THRIFT_DEFINE_ACCESSOR(MyIntField);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_MyStringField
#define APACHE_THRIFT_ACCESSOR_MyStringField
APACHE_THRIFT_DEFINE_ACCESSOR(MyStringField);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_MyDataField
#define APACHE_THRIFT_ACCESSOR_MyDataField
APACHE_THRIFT_DEFINE_ACCESSOR(MyDataField);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_myEnum
#define APACHE_THRIFT_ACCESSOR_myEnum
APACHE_THRIFT_DEFINE_ACCESSOR(myEnum);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_MyBoolField
#define APACHE_THRIFT_ACCESSOR_MyBoolField
APACHE_THRIFT_DEFINE_ACCESSOR(MyBoolField);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_MyByteField
#define APACHE_THRIFT_ACCESSOR_MyByteField
APACHE_THRIFT_DEFINE_ACCESSOR(MyByteField);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_MyShortField
#define APACHE_THRIFT_ACCESSOR_MyShortField
APACHE_THRIFT_DEFINE_ACCESSOR(MyShortField);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_MyLongField
#define APACHE_THRIFT_ACCESSOR_MyLongField
APACHE_THRIFT_DEFINE_ACCESSOR(MyLongField);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_MyDoubleField
#define APACHE_THRIFT_ACCESSOR_MyDoubleField
APACHE_THRIFT_DEFINE_ACCESSOR(MyDoubleField);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_lDouble
#define APACHE_THRIFT_ACCESSOR_lDouble
APACHE_THRIFT_DEFINE_ACCESSOR(lDouble);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_lShort
#define APACHE_THRIFT_ACCESSOR_lShort
APACHE_THRIFT_DEFINE_ACCESSOR(lShort);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_lInteger
#define APACHE_THRIFT_ACCESSOR_lInteger
APACHE_THRIFT_DEFINE_ACCESSOR(lInteger);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_lLong
#define APACHE_THRIFT_ACCESSOR_lLong
APACHE_THRIFT_DEFINE_ACCESSOR(lLong);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_lString
#define APACHE_THRIFT_ACCESSOR_lString
APACHE_THRIFT_DEFINE_ACCESSOR(lString);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_lBool
#define APACHE_THRIFT_ACCESSOR_lBool
APACHE_THRIFT_DEFINE_ACCESSOR(lBool);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_lByte
#define APACHE_THRIFT_ACCESSOR_lByte
APACHE_THRIFT_DEFINE_ACCESSOR(lByte);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_mShortString
#define APACHE_THRIFT_ACCESSOR_mShortString
APACHE_THRIFT_DEFINE_ACCESSOR(mShortString);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_mIntegerString
#define APACHE_THRIFT_ACCESSOR_mIntegerString
APACHE_THRIFT_DEFINE_ACCESSOR(mIntegerString);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_mStringMyStruct
#define APACHE_THRIFT_ACCESSOR_mStringMyStruct
APACHE_THRIFT_DEFINE_ACCESSOR(mStringMyStruct);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_mStringBool
#define APACHE_THRIFT_ACCESSOR_mStringBool
APACHE_THRIFT_DEFINE_ACCESSOR(mStringBool);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_mIntegerInteger
#define APACHE_THRIFT_ACCESSOR_mIntegerInteger
APACHE_THRIFT_DEFINE_ACCESSOR(mIntegerInteger);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_mIntegerBool
#define APACHE_THRIFT_ACCESSOR_mIntegerBool
APACHE_THRIFT_DEFINE_ACCESSOR(mIntegerBool);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_sShort
#define APACHE_THRIFT_ACCESSOR_sShort
APACHE_THRIFT_DEFINE_ACCESSOR(sShort);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_sMyStruct
#define APACHE_THRIFT_ACCESSOR_sMyStruct
APACHE_THRIFT_DEFINE_ACCESSOR(sMyStruct);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_sLong
#define APACHE_THRIFT_ACCESSOR_sLong
APACHE_THRIFT_DEFINE_ACCESSOR(sLong);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_sString
#define APACHE_THRIFT_ACCESSOR_sString
APACHE_THRIFT_DEFINE_ACCESSOR(sString);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_sByte
#define APACHE_THRIFT_ACCESSOR_sByte
APACHE_THRIFT_DEFINE_ACCESSOR(sByte);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_mListList
#define APACHE_THRIFT_ACCESSOR_mListList
APACHE_THRIFT_DEFINE_ACCESSOR(mListList);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_age
#define APACHE_THRIFT_ACCESSOR_age
APACHE_THRIFT_DEFINE_ACCESSOR(age);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_name
#define APACHE_THRIFT_ACCESSOR_name
APACHE_THRIFT_DEFINE_ACCESSOR(name);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_myLongDFset
#define APACHE_THRIFT_ACCESSOR_myLongDFset
APACHE_THRIFT_DEFINE_ACCESSOR(myLongDFset);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_myLongDF
#define APACHE_THRIFT_ACCESSOR_myLongDF
APACHE_THRIFT_DEFINE_ACCESSOR(myLongDF);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_portDFset
#define APACHE_THRIFT_ACCESSOR_portDFset
APACHE_THRIFT_DEFINE_ACCESSOR(portDFset);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_portNum
#define APACHE_THRIFT_ACCESSOR_portNum
APACHE_THRIFT_DEFINE_ACCESSOR(portNum);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_myBinaryDFset
#define APACHE_THRIFT_ACCESSOR_myBinaryDFset
APACHE_THRIFT_DEFINE_ACCESSOR(myBinaryDFset);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_myBinary
#define APACHE_THRIFT_ACCESSOR_myBinary
APACHE_THRIFT_DEFINE_ACCESSOR(myBinary);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_myByteDFSet
#define APACHE_THRIFT_ACCESSOR_myByteDFSet
APACHE_THRIFT_DEFINE_ACCESSOR(myByteDFSet);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_myByte
#define APACHE_THRIFT_ACCESSOR_myByte
APACHE_THRIFT_DEFINE_ACCESSOR(myByte);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_myDoubleDFset
#define APACHE_THRIFT_ACCESSOR_myDoubleDFset
APACHE_THRIFT_DEFINE_ACCESSOR(myDoubleDFset);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_myDoubleDFZero
#define APACHE_THRIFT_ACCESSOR_myDoubleDFZero
APACHE_THRIFT_DEFINE_ACCESSOR(myDoubleDFZero);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_myDouble
#define APACHE_THRIFT_ACCESSOR_myDouble
APACHE_THRIFT_DEFINE_ACCESSOR(myDouble);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_field3
#define APACHE_THRIFT_ACCESSOR_field3
APACHE_THRIFT_DEFINE_ACCESSOR(field3);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_myList
#define APACHE_THRIFT_ACCESSOR_myList
APACHE_THRIFT_DEFINE_ACCESSOR(myList);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_mySet
#define APACHE_THRIFT_ACCESSOR_mySet
APACHE_THRIFT_DEFINE_ACCESSOR(mySet);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_simpleStruct
#define APACHE_THRIFT_ACCESSOR_simpleStruct
APACHE_THRIFT_DEFINE_ACCESSOR(simpleStruct);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_listStructDFset
#define APACHE_THRIFT_ACCESSOR_listStructDFset
APACHE_THRIFT_DEFINE_ACCESSOR(listStructDFset);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_myUnion
#define APACHE_THRIFT_ACCESSOR_myUnion
APACHE_THRIFT_DEFINE_ACCESSOR(myUnion);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_listUnionDFset
#define APACHE_THRIFT_ACCESSOR_listUnionDFset
APACHE_THRIFT_DEFINE_ACCESSOR(listUnionDFset);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_mapNestlistStructDfSet
#define APACHE_THRIFT_ACCESSOR_mapNestlistStructDfSet
APACHE_THRIFT_DEFINE_ACCESSOR(mapNestlistStructDfSet);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_mapJavaTypeDFset
#define APACHE_THRIFT_ACCESSOR_mapJavaTypeDFset
APACHE_THRIFT_DEFINE_ACCESSOR(mapJavaTypeDFset);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_emptyMap
#define APACHE_THRIFT_ACCESSOR_emptyMap
APACHE_THRIFT_DEFINE_ACCESSOR(emptyMap);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_enumMapDFset
#define APACHE_THRIFT_ACCESSOR_enumMapDFset
APACHE_THRIFT_DEFINE_ACCESSOR(enumMapDFset);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_myLongField
#define APACHE_THRIFT_ACCESSOR_myLongField
APACHE_THRIFT_DEFINE_ACCESSOR(myLongField);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_myLongTypeDef
#define APACHE_THRIFT_ACCESSOR_myLongTypeDef
APACHE_THRIFT_DEFINE_ACCESSOR(myLongTypeDef);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_myStringField
#define APACHE_THRIFT_ACCESSOR_myStringField
APACHE_THRIFT_DEFINE_ACCESSOR(myStringField);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_myStringTypedef
#define APACHE_THRIFT_ACCESSOR_myStringTypedef
APACHE_THRIFT_DEFINE_ACCESSOR(myStringTypedef);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_myMapField
#define APACHE_THRIFT_ACCESSOR_myMapField
APACHE_THRIFT_DEFINE_ACCESSOR(myMapField);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_myMapTypedef
#define APACHE_THRIFT_ACCESSOR_myMapTypedef
APACHE_THRIFT_DEFINE_ACCESSOR(myMapTypedef);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_myListField
#define APACHE_THRIFT_ACCESSOR_myListField
APACHE_THRIFT_DEFINE_ACCESSOR(myListField);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_myListTypedef
#define APACHE_THRIFT_ACCESSOR_myListTypedef
APACHE_THRIFT_DEFINE_ACCESSOR(myListTypedef);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_myMapListOfTypeDef
#define APACHE_THRIFT_ACCESSOR_myMapListOfTypeDef
APACHE_THRIFT_DEFINE_ACCESSOR(myMapListOfTypeDef);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_myEnum
#define APACHE_THRIFT_ACCESSOR_myEnum
APACHE_THRIFT_DEFINE_ACCESSOR(myEnum);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_myStruct
#define APACHE_THRIFT_ACCESSOR_myStruct
APACHE_THRIFT_DEFINE_ACCESSOR(myStruct);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_myDataItem
#define APACHE_THRIFT_ACCESSOR_myDataItem
APACHE_THRIFT_DEFINE_ACCESSOR(myDataItem);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_complexNestedStruct
#define APACHE_THRIFT_ACCESSOR_complexNestedStruct
APACHE_THRIFT_DEFINE_ACCESSOR(complexNestedStruct);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_longValue
#define APACHE_THRIFT_ACCESSOR_longValue
APACHE_THRIFT_DEFINE_ACCESSOR(longValue);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_intValue
#define APACHE_THRIFT_ACCESSOR_intValue
APACHE_THRIFT_DEFINE_ACCESSOR(intValue);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_myEnum
#define APACHE_THRIFT_ACCESSOR_myEnum
APACHE_THRIFT_DEFINE_ACCESSOR(myEnum);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_setFloat
#define APACHE_THRIFT_ACCESSOR_setFloat
APACHE_THRIFT_DEFINE_ACCESSOR(setFloat);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_myDataItem
#define APACHE_THRIFT_ACCESSOR_myDataItem
APACHE_THRIFT_DEFINE_ACCESSOR(myDataItem);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_complexNestedStruct
#define APACHE_THRIFT_ACCESSOR_complexNestedStruct
APACHE_THRIFT_DEFINE_ACCESSOR(complexNestedStruct);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_setOfSetOfInt
#define APACHE_THRIFT_ACCESSOR_setOfSetOfInt
APACHE_THRIFT_DEFINE_ACCESSOR(setOfSetOfInt);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_listofListOfListOfListOfEnum
#define APACHE_THRIFT_ACCESSOR_listofListOfListOfListOfEnum
APACHE_THRIFT_DEFINE_ACCESSOR(listofListOfListOfListOfEnum);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_listOfListOfMyStruct
#define APACHE_THRIFT_ACCESSOR_listOfListOfMyStruct
APACHE_THRIFT_DEFINE_ACCESSOR(listOfListOfMyStruct);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_setOfListOfListOfLong
#define APACHE_THRIFT_ACCESSOR_setOfListOfListOfLong
APACHE_THRIFT_DEFINE_ACCESSOR(setOfListOfListOfLong);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_setOfSetOfsetOfLong
#define APACHE_THRIFT_ACCESSOR_setOfSetOfsetOfLong
APACHE_THRIFT_DEFINE_ACCESSOR(setOfSetOfsetOfLong);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_mapStructListOfListOfLong
#define APACHE_THRIFT_ACCESSOR_mapStructListOfListOfLong
APACHE_THRIFT_DEFINE_ACCESSOR(mapStructListOfListOfLong);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_mKeyStructValInt
#define APACHE_THRIFT_ACCESSOR_mKeyStructValInt
APACHE_THRIFT_DEFINE_ACCESSOR(mKeyStructValInt);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_listOfMapKeyIntValInt
#define APACHE_THRIFT_ACCESSOR_listOfMapKeyIntValInt
APACHE_THRIFT_DEFINE_ACCESSOR(listOfMapKeyIntValInt);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_listOfMapKeyStrValList
#define APACHE_THRIFT_ACCESSOR_listOfMapKeyStrValList
APACHE_THRIFT_DEFINE_ACCESSOR(listOfMapKeyStrValList);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_mapKeySetValLong
#define APACHE_THRIFT_ACCESSOR_mapKeySetValLong
APACHE_THRIFT_DEFINE_ACCESSOR(mapKeySetValLong);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_mapKeyListValLong
#define APACHE_THRIFT_ACCESSOR_mapKeyListValLong
APACHE_THRIFT_DEFINE_ACCESSOR(mapKeyListValLong);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_mapKeyMapValMap
#define APACHE_THRIFT_ACCESSOR_mapKeyMapValMap
APACHE_THRIFT_DEFINE_ACCESSOR(mapKeyMapValMap);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_mapKeySetValMap
#define APACHE_THRIFT_ACCESSOR_mapKeySetValMap
APACHE_THRIFT_DEFINE_ACCESSOR(mapKeySetValMap);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_NestedMaps
#define APACHE_THRIFT_ACCESSOR_NestedMaps
APACHE_THRIFT_DEFINE_ACCESSOR(NestedMaps);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_mapKeyIntValList
#define APACHE_THRIFT_ACCESSOR_mapKeyIntValList
APACHE_THRIFT_DEFINE_ACCESSOR(mapKeyIntValList);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_mapKeyIntValSet
#define APACHE_THRIFT_ACCESSOR_mapKeyIntValSet
APACHE_THRIFT_DEFINE_ACCESSOR(mapKeyIntValSet);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_mapKeySetValInt
#define APACHE_THRIFT_ACCESSOR_mapKeySetValInt
APACHE_THRIFT_DEFINE_ACCESSOR(mapKeySetValInt);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_mapKeyListValSet
#define APACHE_THRIFT_ACCESSOR_mapKeyListValSet
APACHE_THRIFT_DEFINE_ACCESSOR(mapKeyListValSet);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_lsMap
#define APACHE_THRIFT_ACCESSOR_lsMap
APACHE_THRIFT_DEFINE_ACCESSOR(lsMap);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_ioMap
#define APACHE_THRIFT_ACCESSOR_ioMap
APACHE_THRIFT_DEFINE_ACCESSOR(ioMap);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_BigInteger
#define APACHE_THRIFT_ACCESSOR_BigInteger
APACHE_THRIFT_DEFINE_ACCESSOR(BigInteger);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_binaryTestBuffer
#define APACHE_THRIFT_ACCESSOR_binaryTestBuffer
APACHE_THRIFT_DEFINE_ACCESSOR(binaryTestBuffer);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_message
#define APACHE_THRIFT_ACCESSOR_message
APACHE_THRIFT_DEFINE_ACCESSOR(message);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_errorCode
#define APACHE_THRIFT_ACCESSOR_errorCode
APACHE_THRIFT_DEFINE_ACCESSOR(errorCode);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_message
#define APACHE_THRIFT_ACCESSOR_message
APACHE_THRIFT_DEFINE_ACCESSOR(message);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_errorCode
#define APACHE_THRIFT_ACCESSOR_errorCode
APACHE_THRIFT_DEFINE_ACCESSOR(errorCode);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_message
#define APACHE_THRIFT_ACCESSOR_message
APACHE_THRIFT_DEFINE_ACCESSOR(message);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_listStrings
#define APACHE_THRIFT_ACCESSOR_listStrings
APACHE_THRIFT_DEFINE_ACCESSOR(listStrings);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_errorEnum
#define APACHE_THRIFT_ACCESSOR_errorEnum
APACHE_THRIFT_DEFINE_ACCESSOR(errorEnum);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_unionError
#define APACHE_THRIFT_ACCESSOR_unionError
APACHE_THRIFT_DEFINE_ACCESSOR(unionError);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_structError
#define APACHE_THRIFT_ACCESSOR_structError
APACHE_THRIFT_DEFINE_ACCESSOR(structError);
#endif
#ifndef APACHE_THRIFT_ACCESSOR_lsMap
#define APACHE_THRIFT_ACCESSOR_lsMap
APACHE_THRIFT_DEFINE_ACCESSOR(lsMap);
#endif
} // namespace detail
} // namespace thrift
} // namespace apache

// BEGIN declare_enums
namespace cpp2 {

/** Glean {"file": "thrift/compiler/test/fixtures/complex-struct/src/module.thrift", "name": "MyEnum", "kind": "enum" } */
enum class MyEnum {
  MyValue1 = 0,
  MyValue2 = 1,
  MyValue3 = 3,
  MyValue4 = 4,
  MyValue5 = 5,
};



} // namespace cpp2

namespace std {
template<> struct hash<::cpp2::MyEnum> :
  ::apache::thrift::detail::enum_hash<::cpp2::MyEnum> {};
} // std

namespace apache { namespace thrift {


template <> struct TEnumDataStorage<::cpp2::MyEnum>;

template <> struct TEnumTraits<::cpp2::MyEnum> {
  using type = ::cpp2::MyEnum;

  static constexpr std::size_t const size = 5;
  static folly::Range<type const*> const values;
  static folly::Range<std::string_view const*> const names;
  static const std::string_view __fbthrift_module_name_internal_do_not_use;

  static bool findName(type value, std::string_view* out) noexcept;
  static bool findValue(std::string_view name, type* out) noexcept;

  template <class ...>
  FOLLY_ERASE static std::string_view typeName() noexcept {
    return "MyEnum";
  }

  static char const* findName(type value) noexcept {
    std::string_view ret;
    (void)findName(value, &ret);
    return ret.data();
  }
  static constexpr type min() { return type::MyValue1; }
  static constexpr type max() { return type::MyValue5; }
};


}} // apache::thrift


// END declare_enums
// BEGIN forward_declare
namespace cpp2 {
class MyStructFloatFieldThrowExp;
class MyStructMapFloatThrowExp;
class MyStruct;
class SimpleStruct;
class defaultStruct;
class MyStructTypeDef;
class MyDataItem;
class MyUnion;
class MyUnionFloatFieldThrowExp;
class ComplexNestedStruct;
class TypeRemapped;
class emptyXcep;
class reqXcep;
class optXcep;
class complexException;
} // namespace cpp2
// END forward_declare
namespace apache::thrift::detail::annotation {
} // namespace apache::thrift::detail::annotation

namespace apache::thrift::detail::qualifier {
} // namespace apache::thrift::detail::qualifier

// BEGIN hash_and_equal_to
// END hash_and_equal_to
namespace cpp2 {
using ::apache::thrift::detail::operator!=;
using ::apache::thrift::detail::operator>;
using ::apache::thrift::detail::operator<=;
using ::apache::thrift::detail::operator>=;

/** Glean {"file": "thrift/compiler/test/fixtures/complex-struct/src/module.thrift", "name": "stringTypedef", "kind": "typedef" } */
typedef ::std::string stringTypedef;
/** Glean {"file": "thrift/compiler/test/fixtures/complex-struct/src/module.thrift", "name": "longTypeDef", "kind": "typedef" } */
typedef ::std::int64_t longTypeDef;
/** Glean {"file": "thrift/compiler/test/fixtures/complex-struct/src/module.thrift", "name": "mapTypedef", "kind": "typedef" } */
typedef ::std::map<::std::int16_t, ::std::string> mapTypedef;
/** Glean {"file": "thrift/compiler/test/fixtures/complex-struct/src/module.thrift", "name": "listTypedef", "kind": "typedef" } */
typedef ::std::vector<double> listTypedef;
/** Glean {"file": "thrift/compiler/test/fixtures/complex-struct/src/module.thrift", "name": "floatTypedef", "kind": "typedef" } */
typedef float floatTypedef;
/** Glean {"file": "thrift/compiler/test/fixtures/complex-struct/src/module.thrift", "name": "FMap", "kind": "typedef" } */
typedef ::std::map<::std::int32_t, ::std::int64_t> FMap;
/** Glean {"file": "thrift/compiler/test/fixtures/complex-struct/src/module.thrift", "name": "binary_4918", "kind": "typedef" } */
typedef ::std::string binary_4918;
/** Glean {"file": "thrift/compiler/test/fixtures/complex-struct/src/module.thrift", "name": "i32_1194", "kind": "typedef" } */
typedef ::std::int32_t i32_1194;
/** Glean {"file": "thrift/compiler/test/fixtures/complex-struct/src/module.thrift", "name": "map_i32_FMap_6797", "kind": "typedef" } */
typedef ::std::map<::std::int32_t, ::cpp2::FMap> map_i32_FMap_6797;
/** Glean {"file": "thrift/compiler/test/fixtures/complex-struct/src/module.thrift", "name": "map_i64_string_5732", "kind": "typedef" } */
typedef ::std::map<::std::int64_t, ::std::string> map_i64_string_5732;

/** Glean {"file": "thrift/compiler/test/fixtures/complex-struct/src/module.thrift", "name": "MyStructFloatFieldThrowExp", "kind": "struct" } */
class MyStructFloatFieldThrowExp final  {
 private:
  friend struct ::apache::thrift::detail::st::struct_private_access;
  template<class> friend struct ::apache::thrift::detail::invoke_reffer;

  //  used by a static_assert in the corresponding source
  static constexpr bool __fbthrift_cpp2_gen_json = false;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  static std::string_view __fbthrift_get_field_name(::apache::thrift::FieldOrdinal ord);
  static std::string_view __fbthrift_get_class_name();
  using __fbthrift_reflection_ident_list = folly::tag_t<
    ::apache::thrift::ident::myLongField,
    ::apache::thrift::ident::MyByteField,
    ::apache::thrift::ident::myStringField,
    ::apache::thrift::ident::myFloatField
  >;

  static constexpr std::int16_t __fbthrift_reflection_field_id_list[] = {0,1,2,3,4};
  using __fbthrift_reflection_type_tags = folly::tag_t<
    ::apache::thrift::type::i64_t,
    ::apache::thrift::type::byte_t,
    ::apache::thrift::type::string_t,
    ::apache::thrift::type::float_t
  >;

  static constexpr std::size_t __fbthrift_field_size_v = 4;

  template<class T>
  using __fbthrift_id = ::apache::thrift::type::field_id<__fbthrift_reflection_field_id_list[folly::to_underlying(T::value)]>;

  template<class T>
  using __fbthrift_type_tag = ::apache::thrift::detail::at<__fbthrift_reflection_type_tags, T::value>;

  template<class T>
  using __fbthrift_ident = ::apache::thrift::detail::at<__fbthrift_reflection_ident_list, T::value>;

  template<class T> using __fbthrift_ordinal = ::apache::thrift::type::ordinal_tag<
    ::apache::thrift::detail::getFieldOrdinal<T,
                                              __fbthrift_reflection_ident_list,
                                              __fbthrift_reflection_type_tags>(
      __fbthrift_reflection_field_id_list
    )
  >;
  void __fbthrift_clear();
  void __fbthrift_clear_terse_fields();
  bool __fbthrift_is_empty() const;

 public:
  using __fbthrift_cpp2_type = MyStructFloatFieldThrowExp;
  static constexpr bool __fbthrift_cpp2_is_union =
    false;
  static constexpr bool __fbthrift_cpp2_uses_op_encode =
    false;


 public:

  MyStructFloatFieldThrowExp();

  // FragileConstructor for use in initialization lists only.
  [[deprecated("This constructor is deprecated")]]
  MyStructFloatFieldThrowExp(apache::thrift::FragileConstructor, ::std::int64_t myLongField__arg, ::std::int8_t MyByteField__arg, ::std::string myStringField__arg, float myFloatField__arg);

  MyStructFloatFieldThrowExp(MyStructFloatFieldThrowExp&&) noexcept;

  MyStructFloatFieldThrowExp(const MyStructFloatFieldThrowExp& src);


  MyStructFloatFieldThrowExp& operator=(MyStructFloatFieldThrowExp&&) noexcept;
  MyStructFloatFieldThrowExp& operator=(const MyStructFloatFieldThrowExp& src);

  ~MyStructFloatFieldThrowExp();

 private:
  ::std::int64_t __fbthrift_field_myLongField;
 private:
  ::std::int8_t __fbthrift_field_MyByteField;
 private:
  ::std::string __fbthrift_field_myStringField;
 private:
  float __fbthrift_field_myFloatField;
 private:
  apache::thrift::detail::isset_bitset<4, apache::thrift::detail::IssetBitsetOption::Unpacked> __isset;

 public:

  bool operator==(const MyStructFloatFieldThrowExp&) const;
  bool operator<(const MyStructFloatFieldThrowExp&) const;

  /** Glean { "field": "myLongField" } */
  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> myLongField_ref() const& {
    return {this->__fbthrift_field_myLongField, __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "myLongField" } */
  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> myLongField_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_myLongField), __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "myLongField" } */
  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> myLongField_ref() & {
    return {this->__fbthrift_field_myLongField, __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "myLongField" } */
  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> myLongField_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_myLongField), __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "myLongField" } */
  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> myLongField() const& {
    return {this->__fbthrift_field_myLongField, __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "myLongField" } */
  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> myLongField() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_myLongField), __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "myLongField" } */
  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> myLongField() & {
    return {this->__fbthrift_field_myLongField, __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "myLongField" } */
  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> myLongField() && {
    return {static_cast<T&&>(this->__fbthrift_field_myLongField), __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "MyByteField" } */
  template <typename..., typename T = ::std::int8_t>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> MyByteField_ref() const& {
    return {this->__fbthrift_field_MyByteField, __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "MyByteField" } */
  template <typename..., typename T = ::std::int8_t>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> MyByteField_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_MyByteField), __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "MyByteField" } */
  template <typename..., typename T = ::std::int8_t>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> MyByteField_ref() & {
    return {this->__fbthrift_field_MyByteField, __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "MyByteField" } */
  template <typename..., typename T = ::std::int8_t>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> MyByteField_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_MyByteField), __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "MyByteField" } */
  template <typename..., typename T = ::std::int8_t>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> MyByteField() const& {
    return {this->__fbthrift_field_MyByteField, __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "MyByteField" } */
  template <typename..., typename T = ::std::int8_t>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> MyByteField() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_MyByteField), __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "MyByteField" } */
  template <typename..., typename T = ::std::int8_t>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> MyByteField() & {
    return {this->__fbthrift_field_MyByteField, __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "MyByteField" } */
  template <typename..., typename T = ::std::int8_t>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> MyByteField() && {
    return {static_cast<T&&>(this->__fbthrift_field_MyByteField), __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "myStringField" } */
  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> myStringField_ref() const& {
    return {this->__fbthrift_field_myStringField, __isset.at(2), __isset.bit(2)};
  }

  /** Glean { "field": "myStringField" } */
  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> myStringField_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_myStringField), __isset.at(2), __isset.bit(2)};
  }

  /** Glean { "field": "myStringField" } */
  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> myStringField_ref() & {
    return {this->__fbthrift_field_myStringField, __isset.at(2), __isset.bit(2)};
  }

  /** Glean { "field": "myStringField" } */
  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> myStringField_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_myStringField), __isset.at(2), __isset.bit(2)};
  }

  /** Glean { "field": "myStringField" } */
  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> myStringField() const& {
    return {this->__fbthrift_field_myStringField, __isset.at(2), __isset.bit(2)};
  }

  /** Glean { "field": "myStringField" } */
  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> myStringField() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_myStringField), __isset.at(2), __isset.bit(2)};
  }

  /** Glean { "field": "myStringField" } */
  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> myStringField() & {
    return {this->__fbthrift_field_myStringField, __isset.at(2), __isset.bit(2)};
  }

  /** Glean { "field": "myStringField" } */
  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> myStringField() && {
    return {static_cast<T&&>(this->__fbthrift_field_myStringField), __isset.at(2), __isset.bit(2)};
  }

  /** Glean { "field": "myFloatField" } */
  template <typename..., typename T = float>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> myFloatField_ref() const& {
    return {this->__fbthrift_field_myFloatField, __isset.at(3), __isset.bit(3)};
  }

  /** Glean { "field": "myFloatField" } */
  template <typename..., typename T = float>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> myFloatField_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_myFloatField), __isset.at(3), __isset.bit(3)};
  }

  /** Glean { "field": "myFloatField" } */
  template <typename..., typename T = float>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> myFloatField_ref() & {
    return {this->__fbthrift_field_myFloatField, __isset.at(3), __isset.bit(3)};
  }

  /** Glean { "field": "myFloatField" } */
  template <typename..., typename T = float>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> myFloatField_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_myFloatField), __isset.at(3), __isset.bit(3)};
  }

  /** Glean { "field": "myFloatField" } */
  template <typename..., typename T = float>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> myFloatField() const& {
    return {this->__fbthrift_field_myFloatField, __isset.at(3), __isset.bit(3)};
  }

  /** Glean { "field": "myFloatField" } */
  template <typename..., typename T = float>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> myFloatField() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_myFloatField), __isset.at(3), __isset.bit(3)};
  }

  /** Glean { "field": "myFloatField" } */
  template <typename..., typename T = float>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> myFloatField() & {
    return {this->__fbthrift_field_myFloatField, __isset.at(3), __isset.bit(3)};
  }

  /** Glean { "field": "myFloatField" } */
  template <typename..., typename T = float>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> myFloatField() && {
    return {static_cast<T&&>(this->__fbthrift_field_myFloatField), __isset.at(3), __isset.bit(3)};
  }

  /** Glean { "field": "myLongField" } */
  ::std::int64_t get_myLongField() const {
    return __fbthrift_field_myLongField;
  }

  /** Glean { "field": "myLongField" } */
  [[deprecated("Use `FOO.myLongField() = BAR;` instead of `FOO.set_myLongField(BAR);`")]]
  ::std::int64_t& set_myLongField(::std::int64_t myLongField_) {
    myLongField_ref() = myLongField_;
    return __fbthrift_field_myLongField;
  }

  /** Glean { "field": "MyByteField" } */
  ::std::int8_t get_MyByteField() const {
    return __fbthrift_field_MyByteField;
  }

  /** Glean { "field": "MyByteField" } */
  [[deprecated("Use `FOO.MyByteField() = BAR;` instead of `FOO.set_MyByteField(BAR);`")]]
  ::std::int8_t& set_MyByteField(::std::int8_t MyByteField_) {
    MyByteField_ref() = MyByteField_;
    return __fbthrift_field_MyByteField;
  }

  /** Glean { "field": "myStringField" } */
  const ::std::string& get_myStringField() const& {
    return __fbthrift_field_myStringField;
  }

  /** Glean { "field": "myStringField" } */
  ::std::string get_myStringField() && {
    return std::move(__fbthrift_field_myStringField);
  }

  /** Glean { "field": "myStringField" } */
  template <typename T_MyStructFloatFieldThrowExp_myStringField_struct_setter = ::std::string>
  [[deprecated("Use `FOO.myStringField() = BAR;` instead of `FOO.set_myStringField(BAR);`")]]
  ::std::string& set_myStringField(T_MyStructFloatFieldThrowExp_myStringField_struct_setter&& myStringField_) {
    myStringField_ref() = std::forward<T_MyStructFloatFieldThrowExp_myStringField_struct_setter>(myStringField_);
    return __fbthrift_field_myStringField;
  }

  /** Glean { "field": "myFloatField" } */
  float get_myFloatField() const {
    return __fbthrift_field_myFloatField;
  }

  /** Glean { "field": "myFloatField" } */
  [[deprecated("Use `FOO.myFloatField() = BAR;` instead of `FOO.set_myFloatField(BAR);`")]]
  float& set_myFloatField(float myFloatField_) {
    myFloatField_ref() = myFloatField_;
    return __fbthrift_field_myFloatField;
  }

  template <class Protocol_>
  unsigned long read(Protocol_* iprot);
  template <class Protocol_>
  uint32_t serializedSize(Protocol_ const* prot_) const;
  template <class Protocol_>
  uint32_t serializedSizeZC(Protocol_ const* prot_) const;
  template <class Protocol_>
  uint32_t write(Protocol_* prot_) const;

 private:
  template <class Protocol_>
  void readNoXfer(Protocol_* iprot);

  friend class ::apache::thrift::Cpp2Ops<MyStructFloatFieldThrowExp>;
  friend void swap(MyStructFloatFieldThrowExp& a, MyStructFloatFieldThrowExp& b);
};

template <class Protocol_>
unsigned long MyStructFloatFieldThrowExp::read(Protocol_* iprot) {
  auto _xferStart = iprot->getCursorPosition();
  readNoXfer(iprot);
  return iprot->getCursorPosition() - _xferStart;
}


/** Glean {"file": "thrift/compiler/test/fixtures/complex-struct/src/module.thrift", "name": "MyStructMapFloatThrowExp", "kind": "struct" } */
class MyStructMapFloatThrowExp final  {
 private:
  friend struct ::apache::thrift::detail::st::struct_private_access;
  template<class> friend struct ::apache::thrift::detail::invoke_reffer;

  //  used by a static_assert in the corresponding source
  static constexpr bool __fbthrift_cpp2_gen_json = false;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  static std::string_view __fbthrift_get_field_name(::apache::thrift::FieldOrdinal ord);
  static std::string_view __fbthrift_get_class_name();
  using __fbthrift_reflection_ident_list = folly::tag_t<
    ::apache::thrift::ident::myLongField,
    ::apache::thrift::ident::mapListOfFloats
  >;

  static constexpr std::int16_t __fbthrift_reflection_field_id_list[] = {0,1,2};
  using __fbthrift_reflection_type_tags = folly::tag_t<
    ::apache::thrift::type::i64_t,
    ::apache::thrift::type::map<::apache::thrift::type::i32_t, ::apache::thrift::type::list<::apache::thrift::type::list<::apache::thrift::type::float_t>>>
  >;

  static constexpr std::size_t __fbthrift_field_size_v = 2;

  template<class T>
  using __fbthrift_id = ::apache::thrift::type::field_id<__fbthrift_reflection_field_id_list[folly::to_underlying(T::value)]>;

  template<class T>
  using __fbthrift_type_tag = ::apache::thrift::detail::at<__fbthrift_reflection_type_tags, T::value>;

  template<class T>
  using __fbthrift_ident = ::apache::thrift::detail::at<__fbthrift_reflection_ident_list, T::value>;

  template<class T> using __fbthrift_ordinal = ::apache::thrift::type::ordinal_tag<
    ::apache::thrift::detail::getFieldOrdinal<T,
                                              __fbthrift_reflection_ident_list,
                                              __fbthrift_reflection_type_tags>(
      __fbthrift_reflection_field_id_list
    )
  >;
  void __fbthrift_clear();
  void __fbthrift_clear_terse_fields();
  bool __fbthrift_is_empty() const;

 public:
  using __fbthrift_cpp2_type = MyStructMapFloatThrowExp;
  static constexpr bool __fbthrift_cpp2_is_union =
    false;
  static constexpr bool __fbthrift_cpp2_uses_op_encode =
    false;


 public:

  MyStructMapFloatThrowExp();

  // FragileConstructor for use in initialization lists only.
  [[deprecated("This constructor is deprecated")]]
  MyStructMapFloatThrowExp(apache::thrift::FragileConstructor, ::std::int64_t myLongField__arg, ::std::map<::std::int32_t, ::std::vector<::std::vector<::cpp2::floatTypedef>>> mapListOfFloats__arg);

  MyStructMapFloatThrowExp(MyStructMapFloatThrowExp&&) noexcept;

  MyStructMapFloatThrowExp(const MyStructMapFloatThrowExp& src);


  MyStructMapFloatThrowExp& operator=(MyStructMapFloatThrowExp&&) noexcept;
  MyStructMapFloatThrowExp& operator=(const MyStructMapFloatThrowExp& src);

  ~MyStructMapFloatThrowExp();

 private:
  ::std::int64_t __fbthrift_field_myLongField;
 private:
  ::std::map<::std::int32_t, ::std::vector<::std::vector<::cpp2::floatTypedef>>> __fbthrift_field_mapListOfFloats;
 private:
  apache::thrift::detail::isset_bitset<2, apache::thrift::detail::IssetBitsetOption::Unpacked> __isset;

 public:

  bool operator==(const MyStructMapFloatThrowExp&) const;
  bool operator<(const MyStructMapFloatThrowExp&) const;

  /** Glean { "field": "myLongField" } */
  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> myLongField_ref() const& {
    return {this->__fbthrift_field_myLongField, __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "myLongField" } */
  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> myLongField_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_myLongField), __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "myLongField" } */
  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> myLongField_ref() & {
    return {this->__fbthrift_field_myLongField, __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "myLongField" } */
  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> myLongField_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_myLongField), __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "myLongField" } */
  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> myLongField() const& {
    return {this->__fbthrift_field_myLongField, __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "myLongField" } */
  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> myLongField() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_myLongField), __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "myLongField" } */
  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> myLongField() & {
    return {this->__fbthrift_field_myLongField, __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "myLongField" } */
  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> myLongField() && {
    return {static_cast<T&&>(this->__fbthrift_field_myLongField), __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "mapListOfFloats" } */
  template <typename..., typename T = ::std::map<::std::int32_t, ::std::vector<::std::vector<::cpp2::floatTypedef>>>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> mapListOfFloats_ref() const& {
    return {this->__fbthrift_field_mapListOfFloats, __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "mapListOfFloats" } */
  template <typename..., typename T = ::std::map<::std::int32_t, ::std::vector<::std::vector<::cpp2::floatTypedef>>>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> mapListOfFloats_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_mapListOfFloats), __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "mapListOfFloats" } */
  template <typename..., typename T = ::std::map<::std::int32_t, ::std::vector<::std::vector<::cpp2::floatTypedef>>>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> mapListOfFloats_ref() & {
    return {this->__fbthrift_field_mapListOfFloats, __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "mapListOfFloats" } */
  template <typename..., typename T = ::std::map<::std::int32_t, ::std::vector<::std::vector<::cpp2::floatTypedef>>>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> mapListOfFloats_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_mapListOfFloats), __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "mapListOfFloats" } */
  template <typename..., typename T = ::std::map<::std::int32_t, ::std::vector<::std::vector<::cpp2::floatTypedef>>>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> mapListOfFloats() const& {
    return {this->__fbthrift_field_mapListOfFloats, __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "mapListOfFloats" } */
  template <typename..., typename T = ::std::map<::std::int32_t, ::std::vector<::std::vector<::cpp2::floatTypedef>>>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> mapListOfFloats() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_mapListOfFloats), __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "mapListOfFloats" } */
  template <typename..., typename T = ::std::map<::std::int32_t, ::std::vector<::std::vector<::cpp2::floatTypedef>>>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> mapListOfFloats() & {
    return {this->__fbthrift_field_mapListOfFloats, __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "mapListOfFloats" } */
  template <typename..., typename T = ::std::map<::std::int32_t, ::std::vector<::std::vector<::cpp2::floatTypedef>>>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> mapListOfFloats() && {
    return {static_cast<T&&>(this->__fbthrift_field_mapListOfFloats), __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "myLongField" } */
  ::std::int64_t get_myLongField() const {
    return __fbthrift_field_myLongField;
  }

  /** Glean { "field": "myLongField" } */
  [[deprecated("Use `FOO.myLongField() = BAR;` instead of `FOO.set_myLongField(BAR);`")]]
  ::std::int64_t& set_myLongField(::std::int64_t myLongField_) {
    myLongField_ref() = myLongField_;
    return __fbthrift_field_myLongField;
  }
  /** Glean { "field": "mapListOfFloats" } */
  const ::std::map<::std::int32_t, ::std::vector<::std::vector<::cpp2::floatTypedef>>>& get_mapListOfFloats() const&;
  /** Glean { "field": "mapListOfFloats" } */
  ::std::map<::std::int32_t, ::std::vector<::std::vector<::cpp2::floatTypedef>>> get_mapListOfFloats() &&;

  /** Glean { "field": "mapListOfFloats" } */
  template <typename T_MyStructMapFloatThrowExp_mapListOfFloats_struct_setter = ::std::map<::std::int32_t, ::std::vector<::std::vector<::cpp2::floatTypedef>>>>
  [[deprecated("Use `FOO.mapListOfFloats() = BAR;` instead of `FOO.set_mapListOfFloats(BAR);`")]]
  ::std::map<::std::int32_t, ::std::vector<::std::vector<::cpp2::floatTypedef>>>& set_mapListOfFloats(T_MyStructMapFloatThrowExp_mapListOfFloats_struct_setter&& mapListOfFloats_) {
    mapListOfFloats_ref() = std::forward<T_MyStructMapFloatThrowExp_mapListOfFloats_struct_setter>(mapListOfFloats_);
    return __fbthrift_field_mapListOfFloats;
  }

  template <class Protocol_>
  unsigned long read(Protocol_* iprot);
  template <class Protocol_>
  uint32_t serializedSize(Protocol_ const* prot_) const;
  template <class Protocol_>
  uint32_t serializedSizeZC(Protocol_ const* prot_) const;
  template <class Protocol_>
  uint32_t write(Protocol_* prot_) const;

 private:
  template <class Protocol_>
  void readNoXfer(Protocol_* iprot);

  friend class ::apache::thrift::Cpp2Ops<MyStructMapFloatThrowExp>;
  friend void swap(MyStructMapFloatThrowExp& a, MyStructMapFloatThrowExp& b);
};

template <class Protocol_>
unsigned long MyStructMapFloatThrowExp::read(Protocol_* iprot) {
  auto _xferStart = iprot->getCursorPosition();
  readNoXfer(iprot);
  return iprot->getCursorPosition() - _xferStart;
}


/** Glean {"file": "thrift/compiler/test/fixtures/complex-struct/src/module.thrift", "name": "MyDataItem", "kind": "struct" } */
class MyDataItem final  {
 private:
  friend struct ::apache::thrift::detail::st::struct_private_access;
  template<class> friend struct ::apache::thrift::detail::invoke_reffer;

  //  used by a static_assert in the corresponding source
  static constexpr bool __fbthrift_cpp2_gen_json = false;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  static std::string_view __fbthrift_get_field_name(::apache::thrift::FieldOrdinal ord);
  static std::string_view __fbthrift_get_class_name();
  using __fbthrift_reflection_ident_list = folly::tag_t<
  >;

  static constexpr std::int16_t __fbthrift_reflection_field_id_list[] = {0};
  using __fbthrift_reflection_type_tags = folly::tag_t<
  >;

  static constexpr std::size_t __fbthrift_field_size_v = 0;

  template<class T>
  using __fbthrift_id = ::apache::thrift::type::field_id<__fbthrift_reflection_field_id_list[folly::to_underlying(T::value)]>;

  template<class T>
  using __fbthrift_type_tag = ::apache::thrift::detail::at<__fbthrift_reflection_type_tags, T::value>;

  template<class T>
  using __fbthrift_ident = ::apache::thrift::detail::at<__fbthrift_reflection_ident_list, T::value>;

  template<class T> using __fbthrift_ordinal = ::apache::thrift::type::ordinal_tag<
    ::apache::thrift::detail::getFieldOrdinal<T,
                                              __fbthrift_reflection_ident_list,
                                              __fbthrift_reflection_type_tags>(
      __fbthrift_reflection_field_id_list
    )
  >;
  void __fbthrift_clear();
  void __fbthrift_clear_terse_fields();
  bool __fbthrift_is_empty() const;

 public:
  using __fbthrift_cpp2_type = MyDataItem;
  static constexpr bool __fbthrift_cpp2_is_union =
    false;
  static constexpr bool __fbthrift_cpp2_uses_op_encode =
    false;


 public:

  MyDataItem() {
  }
  // FragileConstructor for use in initialization lists only.
  [[deprecated("This constructor is deprecated")]]
  MyDataItem(apache::thrift::FragileConstructor);

  MyDataItem(MyDataItem&&) = default;

  MyDataItem(const MyDataItem&) = default;


  MyDataItem& operator=(MyDataItem&&) = default;

  MyDataItem& operator=(const MyDataItem&) = default;

 public:

  bool operator==(const MyDataItem&) const;
  bool operator<(const MyDataItem&) const;

  template <class Protocol_>
  unsigned long read(Protocol_* iprot);
  template <class Protocol_>
  uint32_t serializedSize(Protocol_ const* prot_) const;
  template <class Protocol_>
  uint32_t serializedSizeZC(Protocol_ const* prot_) const;
  template <class Protocol_>
  uint32_t write(Protocol_* prot_) const;

 private:
  template <class Protocol_>
  void readNoXfer(Protocol_* iprot);

  friend class ::apache::thrift::Cpp2Ops<MyDataItem>;
  friend void swap(MyDataItem& a, MyDataItem& b);
};

template <class Protocol_>
unsigned long MyDataItem::read(Protocol_* iprot) {
  auto _xferStart = iprot->getCursorPosition();
  readNoXfer(iprot);
  return iprot->getCursorPosition() - _xferStart;
}


/** Glean {"file": "thrift/compiler/test/fixtures/complex-struct/src/module.thrift", "name": "MyStruct", "kind": "struct" } */
class MyStruct final  {
 private:
  friend struct ::apache::thrift::detail::st::struct_private_access;
  template<class> friend struct ::apache::thrift::detail::invoke_reffer;

  //  used by a static_assert in the corresponding source
  static constexpr bool __fbthrift_cpp2_gen_json = false;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  static std::string_view __fbthrift_get_field_name(::apache::thrift::FieldOrdinal ord);
  static std::string_view __fbthrift_get_class_name();
  using __fbthrift_reflection_ident_list = folly::tag_t<
    ::apache::thrift::ident::MyIntField,
    ::apache::thrift::ident::MyStringField,
    ::apache::thrift::ident::MyDataField,
    ::apache::thrift::ident::myEnum,
    ::apache::thrift::ident::MyBoolField,
    ::apache::thrift::ident::MyByteField,
    ::apache::thrift::ident::MyShortField,
    ::apache::thrift::ident::MyLongField,
    ::apache::thrift::ident::MyDoubleField,
    ::apache::thrift::ident::lDouble,
    ::apache::thrift::ident::lShort,
    ::apache::thrift::ident::lInteger,
    ::apache::thrift::ident::lLong,
    ::apache::thrift::ident::lString,
    ::apache::thrift::ident::lBool,
    ::apache::thrift::ident::lByte,
    ::apache::thrift::ident::mShortString,
    ::apache::thrift::ident::mIntegerString,
    ::apache::thrift::ident::mStringMyStruct,
    ::apache::thrift::ident::mStringBool,
    ::apache::thrift::ident::mIntegerInteger,
    ::apache::thrift::ident::mIntegerBool,
    ::apache::thrift::ident::sShort,
    ::apache::thrift::ident::sMyStruct,
    ::apache::thrift::ident::sLong,
    ::apache::thrift::ident::sString,
    ::apache::thrift::ident::sByte,
    ::apache::thrift::ident::mListList
  >;

  static constexpr std::int16_t __fbthrift_reflection_field_id_list[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28};
  using __fbthrift_reflection_type_tags = folly::tag_t<
    ::apache::thrift::type::i64_t,
    ::apache::thrift::type::string_t,
    ::apache::thrift::type::struct_t<::cpp2::MyDataItem>,
    ::apache::thrift::type::enum_t<::cpp2::MyEnum>,
    ::apache::thrift::type::bool_t,
    ::apache::thrift::type::byte_t,
    ::apache::thrift::type::i16_t,
    ::apache::thrift::type::i64_t,
    ::apache::thrift::type::double_t,
    ::apache::thrift::type::list<::apache::thrift::type::double_t>,
    ::apache::thrift::type::list<::apache::thrift::type::i16_t>,
    ::apache::thrift::type::list<::apache::thrift::type::i32_t>,
    ::apache::thrift::type::list<::apache::thrift::type::i64_t>,
    ::apache::thrift::type::list<::apache::thrift::type::string_t>,
    ::apache::thrift::type::list<::apache::thrift::type::bool_t>,
    ::apache::thrift::type::list<::apache::thrift::type::byte_t>,
    ::apache::thrift::type::map<::apache::thrift::type::i16_t, ::apache::thrift::type::string_t>,
    ::apache::thrift::type::map<::apache::thrift::type::i32_t, ::apache::thrift::type::string_t>,
    ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::cpp2::MyStruct>>,
    ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::bool_t>,
    ::apache::thrift::type::map<::apache::thrift::type::i32_t, ::apache::thrift::type::i32_t>,
    ::apache::thrift::type::map<::apache::thrift::type::i32_t, ::apache::thrift::type::bool_t>,
    ::apache::thrift::type::set<::apache::thrift::type::i16_t>,
    ::apache::thrift::type::set<::apache::thrift::type::struct_t<::cpp2::MyStruct>>,
    ::apache::thrift::type::set<::apache::thrift::type::i64_t>,
    ::apache::thrift::type::set<::apache::thrift::type::string_t>,
    ::apache::thrift::type::set<::apache::thrift::type::byte_t>,
    ::apache::thrift::type::map<::apache::thrift::type::list<::apache::thrift::type::i32_t>, ::apache::thrift::type::list<::apache::thrift::type::i32_t>>
  >;

  static constexpr std::size_t __fbthrift_field_size_v = 28;

  template<class T>
  using __fbthrift_id = ::apache::thrift::type::field_id<__fbthrift_reflection_field_id_list[folly::to_underlying(T::value)]>;

  template<class T>
  using __fbthrift_type_tag = ::apache::thrift::detail::at<__fbthrift_reflection_type_tags, T::value>;

  template<class T>
  using __fbthrift_ident = ::apache::thrift::detail::at<__fbthrift_reflection_ident_list, T::value>;

  template<class T> using __fbthrift_ordinal = ::apache::thrift::type::ordinal_tag<
    ::apache::thrift::detail::getFieldOrdinal<T,
                                              __fbthrift_reflection_ident_list,
                                              __fbthrift_reflection_type_tags>(
      __fbthrift_reflection_field_id_list
    )
  >;
  void __fbthrift_clear();
  void __fbthrift_clear_terse_fields();
  bool __fbthrift_is_empty() const;

 public:
  using __fbthrift_cpp2_type = MyStruct;
  static constexpr bool __fbthrift_cpp2_is_union =
    false;
  static constexpr bool __fbthrift_cpp2_uses_op_encode =
    false;


 public:

  MyStruct();

  // FragileConstructor for use in initialization lists only.
  [[deprecated("This constructor is deprecated")]]
  MyStruct(apache::thrift::FragileConstructor, ::std::int64_t MyIntField__arg, ::std::string MyStringField__arg, ::cpp2::MyDataItem MyDataField__arg, ::cpp2::MyEnum myEnum__arg, bool MyBoolField__arg, ::std::int8_t MyByteField__arg, ::std::int16_t MyShortField__arg, ::std::int64_t MyLongField__arg, double MyDoubleField__arg, ::std::vector<double> lDouble__arg, ::std::vector<::std::int16_t> lShort__arg, ::std::vector<::std::int32_t> lInteger__arg, ::std::vector<::std::int64_t> lLong__arg, ::std::vector<::std::string> lString__arg, ::std::vector<bool> lBool__arg, ::std::vector<::std::int8_t> lByte__arg, ::std::map<::std::int16_t, ::std::string> mShortString__arg, ::std::map<::std::int32_t, ::std::string> mIntegerString__arg, ::std::map<::std::string, ::cpp2::MyStruct> mStringMyStruct__arg, ::std::map<::std::string, bool> mStringBool__arg, ::std::map<::std::int32_t, ::std::int32_t> mIntegerInteger__arg, ::std::map<::std::int32_t, bool> mIntegerBool__arg, ::std::set<::std::int16_t> sShort__arg, ::std::set<::cpp2::MyStruct> sMyStruct__arg, ::std::set<::std::int64_t> sLong__arg, ::std::set<::std::string> sString__arg, ::std::set<::std::int8_t> sByte__arg, ::std::map<::std::vector<::std::int32_t>, ::std::vector<::std::int32_t>> mListList__arg);

  MyStruct(MyStruct&&) noexcept;

  MyStruct(const MyStruct& src);


  MyStruct& operator=(MyStruct&&) noexcept;
  MyStruct& operator=(const MyStruct& src);

  ~MyStruct();

 private:
  ::std::int64_t __fbthrift_field_MyIntField;
 private:
  ::std::string __fbthrift_field_MyStringField;
 private:
  ::cpp2::MyDataItem __fbthrift_field_MyDataField;
 private:
  ::cpp2::MyEnum __fbthrift_field_myEnum;
 private:
  bool __fbthrift_field_MyBoolField;
 private:
  ::std::int8_t __fbthrift_field_MyByteField;
 private:
  ::std::int16_t __fbthrift_field_MyShortField;
 private:
  ::std::int64_t __fbthrift_field_MyLongField;
 private:
  double __fbthrift_field_MyDoubleField;
 private:
  ::std::vector<double> __fbthrift_field_lDouble;
 private:
  ::std::vector<::std::int16_t> __fbthrift_field_lShort;
 private:
  ::std::vector<::std::int32_t> __fbthrift_field_lInteger;
 private:
  ::std::vector<::std::int64_t> __fbthrift_field_lLong;
 private:
  ::std::vector<::std::string> __fbthrift_field_lString;
 private:
  ::std::vector<bool> __fbthrift_field_lBool;
 private:
  ::std::vector<::std::int8_t> __fbthrift_field_lByte;
 private:
  ::std::map<::std::int16_t, ::std::string> __fbthrift_field_mShortString;
 private:
  ::std::map<::std::int32_t, ::std::string> __fbthrift_field_mIntegerString;
 private:
  ::std::map<::std::string, ::cpp2::MyStruct> __fbthrift_field_mStringMyStruct;
 private:
  ::std::map<::std::string, bool> __fbthrift_field_mStringBool;
 private:
  ::std::map<::std::int32_t, ::std::int32_t> __fbthrift_field_mIntegerInteger;
 private:
  ::std::map<::std::int32_t, bool> __fbthrift_field_mIntegerBool;
 private:
  ::std::set<::std::int16_t> __fbthrift_field_sShort;
 private:
  ::std::set<::cpp2::MyStruct> __fbthrift_field_sMyStruct;
 private:
  ::std::set<::std::int64_t> __fbthrift_field_sLong;
 private:
  ::std::set<::std::string> __fbthrift_field_sString;
 private:
  ::std::set<::std::int8_t> __fbthrift_field_sByte;
 private:
  ::std::map<::std::vector<::std::int32_t>, ::std::vector<::std::int32_t>> __fbthrift_field_mListList;
 private:
  apache::thrift::detail::isset_bitset<28, apache::thrift::detail::IssetBitsetOption::Unpacked> __isset;

 public:

  bool operator==(const MyStruct&) const;
  bool operator<(const MyStruct&) const;

  /** Glean { "field": "MyIntField" } */
  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> MyIntField_ref() const& {
    return {this->__fbthrift_field_MyIntField, __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "MyIntField" } */
  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> MyIntField_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_MyIntField), __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "MyIntField" } */
  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> MyIntField_ref() & {
    return {this->__fbthrift_field_MyIntField, __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "MyIntField" } */
  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> MyIntField_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_MyIntField), __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "MyIntField" } */
  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> MyIntField() const& {
    return {this->__fbthrift_field_MyIntField, __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "MyIntField" } */
  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> MyIntField() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_MyIntField), __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "MyIntField" } */
  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> MyIntField() & {
    return {this->__fbthrift_field_MyIntField, __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "MyIntField" } */
  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> MyIntField() && {
    return {static_cast<T&&>(this->__fbthrift_field_MyIntField), __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "MyStringField" } */
  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> MyStringField_ref() const& {
    return {this->__fbthrift_field_MyStringField, __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "MyStringField" } */
  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> MyStringField_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_MyStringField), __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "MyStringField" } */
  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> MyStringField_ref() & {
    return {this->__fbthrift_field_MyStringField, __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "MyStringField" } */
  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> MyStringField_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_MyStringField), __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "MyStringField" } */
  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> MyStringField() const& {
    return {this->__fbthrift_field_MyStringField, __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "MyStringField" } */
  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> MyStringField() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_MyStringField), __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "MyStringField" } */
  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> MyStringField() & {
    return {this->__fbthrift_field_MyStringField, __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "MyStringField" } */
  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> MyStringField() && {
    return {static_cast<T&&>(this->__fbthrift_field_MyStringField), __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "MyDataField" } */
  template <typename..., typename T = ::cpp2::MyDataItem>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> MyDataField_ref() const& {
    return {this->__fbthrift_field_MyDataField, __isset.at(2), __isset.bit(2)};
  }

  /** Glean { "field": "MyDataField" } */
  template <typename..., typename T = ::cpp2::MyDataItem>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> MyDataField_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_MyDataField), __isset.at(2), __isset.bit(2)};
  }

  /** Glean { "field": "MyDataField" } */
  template <typename..., typename T = ::cpp2::MyDataItem>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> MyDataField_ref() & {
    return {this->__fbthrift_field_MyDataField, __isset.at(2), __isset.bit(2)};
  }

  /** Glean { "field": "MyDataField" } */
  template <typename..., typename T = ::cpp2::MyDataItem>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> MyDataField_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_MyDataField), __isset.at(2), __isset.bit(2)};
  }

  /** Glean { "field": "MyDataField" } */
  template <typename..., typename T = ::cpp2::MyDataItem>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> MyDataField() const& {
    return {this->__fbthrift_field_MyDataField, __isset.at(2), __isset.bit(2)};
  }

  /** Glean { "field": "MyDataField" } */
  template <typename..., typename T = ::cpp2::MyDataItem>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> MyDataField() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_MyDataField), __isset.at(2), __isset.bit(2)};
  }

  /** Glean { "field": "MyDataField" } */
  template <typename..., typename T = ::cpp2::MyDataItem>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> MyDataField() & {
    return {this->__fbthrift_field_MyDataField, __isset.at(2), __isset.bit(2)};
  }

  /** Glean { "field": "MyDataField" } */
  template <typename..., typename T = ::cpp2::MyDataItem>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> MyDataField() && {
    return {static_cast<T&&>(this->__fbthrift_field_MyDataField), __isset.at(2), __isset.bit(2)};
  }

  /** Glean { "field": "myEnum" } */
  template <typename..., typename T = ::cpp2::MyEnum>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> myEnum_ref() const& {
    return {this->__fbthrift_field_myEnum, __isset.at(3), __isset.bit(3)};
  }

  /** Glean { "field": "myEnum" } */
  template <typename..., typename T = ::cpp2::MyEnum>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> myEnum_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_myEnum), __isset.at(3), __isset.bit(3)};
  }

  /** Glean { "field": "myEnum" } */
  template <typename..., typename T = ::cpp2::MyEnum>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> myEnum_ref() & {
    return {this->__fbthrift_field_myEnum, __isset.at(3), __isset.bit(3)};
  }

  /** Glean { "field": "myEnum" } */
  template <typename..., typename T = ::cpp2::MyEnum>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> myEnum_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_myEnum), __isset.at(3), __isset.bit(3)};
  }

  /** Glean { "field": "myEnum" } */
  template <typename..., typename T = ::cpp2::MyEnum>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> myEnum() const& {
    return {this->__fbthrift_field_myEnum, __isset.at(3), __isset.bit(3)};
  }

  /** Glean { "field": "myEnum" } */
  template <typename..., typename T = ::cpp2::MyEnum>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> myEnum() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_myEnum), __isset.at(3), __isset.bit(3)};
  }

  /** Glean { "field": "myEnum" } */
  template <typename..., typename T = ::cpp2::MyEnum>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> myEnum() & {
    return {this->__fbthrift_field_myEnum, __isset.at(3), __isset.bit(3)};
  }

  /** Glean { "field": "myEnum" } */
  template <typename..., typename T = ::cpp2::MyEnum>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> myEnum() && {
    return {static_cast<T&&>(this->__fbthrift_field_myEnum), __isset.at(3), __isset.bit(3)};
  }

  /** Glean { "field": "MyBoolField" } */
  template <typename..., typename T = bool>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> MyBoolField_ref() const& {
    return {this->__fbthrift_field_MyBoolField, __isset.at(4), __isset.bit(4)};
  }

  /** Glean { "field": "MyBoolField" } */
  template <typename..., typename T = bool>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> MyBoolField_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_MyBoolField), __isset.at(4), __isset.bit(4)};
  }

  /** Glean { "field": "MyBoolField" } */
  template <typename..., typename T = bool>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> MyBoolField_ref() & {
    return {this->__fbthrift_field_MyBoolField, __isset.at(4), __isset.bit(4)};
  }

  /** Glean { "field": "MyBoolField" } */
  template <typename..., typename T = bool>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> MyBoolField_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_MyBoolField), __isset.at(4), __isset.bit(4)};
  }

  /** Glean { "field": "MyBoolField" } */
  template <typename..., typename T = bool>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> MyBoolField() const& {
    return {this->__fbthrift_field_MyBoolField, __isset.at(4), __isset.bit(4)};
  }

  /** Glean { "field": "MyBoolField" } */
  template <typename..., typename T = bool>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> MyBoolField() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_MyBoolField), __isset.at(4), __isset.bit(4)};
  }

  /** Glean { "field": "MyBoolField" } */
  template <typename..., typename T = bool>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> MyBoolField() & {
    return {this->__fbthrift_field_MyBoolField, __isset.at(4), __isset.bit(4)};
  }

  /** Glean { "field": "MyBoolField" } */
  template <typename..., typename T = bool>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> MyBoolField() && {
    return {static_cast<T&&>(this->__fbthrift_field_MyBoolField), __isset.at(4), __isset.bit(4)};
  }

  /** Glean { "field": "MyByteField" } */
  template <typename..., typename T = ::std::int8_t>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> MyByteField_ref() const& {
    return {this->__fbthrift_field_MyByteField, __isset.at(5), __isset.bit(5)};
  }

  /** Glean { "field": "MyByteField" } */
  template <typename..., typename T = ::std::int8_t>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> MyByteField_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_MyByteField), __isset.at(5), __isset.bit(5)};
  }

  /** Glean { "field": "MyByteField" } */
  template <typename..., typename T = ::std::int8_t>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> MyByteField_ref() & {
    return {this->__fbthrift_field_MyByteField, __isset.at(5), __isset.bit(5)};
  }

  /** Glean { "field": "MyByteField" } */
  template <typename..., typename T = ::std::int8_t>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> MyByteField_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_MyByteField), __isset.at(5), __isset.bit(5)};
  }

  /** Glean { "field": "MyByteField" } */
  template <typename..., typename T = ::std::int8_t>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> MyByteField() const& {
    return {this->__fbthrift_field_MyByteField, __isset.at(5), __isset.bit(5)};
  }

  /** Glean { "field": "MyByteField" } */
  template <typename..., typename T = ::std::int8_t>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> MyByteField() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_MyByteField), __isset.at(5), __isset.bit(5)};
  }

  /** Glean { "field": "MyByteField" } */
  template <typename..., typename T = ::std::int8_t>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> MyByteField() & {
    return {this->__fbthrift_field_MyByteField, __isset.at(5), __isset.bit(5)};
  }

  /** Glean { "field": "MyByteField" } */
  template <typename..., typename T = ::std::int8_t>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> MyByteField() && {
    return {static_cast<T&&>(this->__fbthrift_field_MyByteField), __isset.at(5), __isset.bit(5)};
  }

  /** Glean { "field": "MyShortField" } */
  template <typename..., typename T = ::std::int16_t>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> MyShortField_ref() const& {
    return {this->__fbthrift_field_MyShortField, __isset.at(6), __isset.bit(6)};
  }

  /** Glean { "field": "MyShortField" } */
  template <typename..., typename T = ::std::int16_t>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> MyShortField_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_MyShortField), __isset.at(6), __isset.bit(6)};
  }

  /** Glean { "field": "MyShortField" } */
  template <typename..., typename T = ::std::int16_t>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> MyShortField_ref() & {
    return {this->__fbthrift_field_MyShortField, __isset.at(6), __isset.bit(6)};
  }

  /** Glean { "field": "MyShortField" } */
  template <typename..., typename T = ::std::int16_t>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> MyShortField_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_MyShortField), __isset.at(6), __isset.bit(6)};
  }

  /** Glean { "field": "MyShortField" } */
  template <typename..., typename T = ::std::int16_t>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> MyShortField() const& {
    return {this->__fbthrift_field_MyShortField, __isset.at(6), __isset.bit(6)};
  }

  /** Glean { "field": "MyShortField" } */
  template <typename..., typename T = ::std::int16_t>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> MyShortField() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_MyShortField), __isset.at(6), __isset.bit(6)};
  }

  /** Glean { "field": "MyShortField" } */
  template <typename..., typename T = ::std::int16_t>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> MyShortField() & {
    return {this->__fbthrift_field_MyShortField, __isset.at(6), __isset.bit(6)};
  }

  /** Glean { "field": "MyShortField" } */
  template <typename..., typename T = ::std::int16_t>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> MyShortField() && {
    return {static_cast<T&&>(this->__fbthrift_field_MyShortField), __isset.at(6), __isset.bit(6)};
  }

  /** Glean { "field": "MyLongField" } */
  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> MyLongField_ref() const& {
    return {this->__fbthrift_field_MyLongField, __isset.at(7), __isset.bit(7)};
  }

  /** Glean { "field": "MyLongField" } */
  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> MyLongField_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_MyLongField), __isset.at(7), __isset.bit(7)};
  }

  /** Glean { "field": "MyLongField" } */
  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> MyLongField_ref() & {
    return {this->__fbthrift_field_MyLongField, __isset.at(7), __isset.bit(7)};
  }

  /** Glean { "field": "MyLongField" } */
  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> MyLongField_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_MyLongField), __isset.at(7), __isset.bit(7)};
  }

  /** Glean { "field": "MyLongField" } */
  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> MyLongField() const& {
    return {this->__fbthrift_field_MyLongField, __isset.at(7), __isset.bit(7)};
  }

  /** Glean { "field": "MyLongField" } */
  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> MyLongField() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_MyLongField), __isset.at(7), __isset.bit(7)};
  }

  /** Glean { "field": "MyLongField" } */
  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> MyLongField() & {
    return {this->__fbthrift_field_MyLongField, __isset.at(7), __isset.bit(7)};
  }

  /** Glean { "field": "MyLongField" } */
  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> MyLongField() && {
    return {static_cast<T&&>(this->__fbthrift_field_MyLongField), __isset.at(7), __isset.bit(7)};
  }

  /** Glean { "field": "MyDoubleField" } */
  template <typename..., typename T = double>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> MyDoubleField_ref() const& {
    return {this->__fbthrift_field_MyDoubleField, __isset.at(8), __isset.bit(8)};
  }

  /** Glean { "field": "MyDoubleField" } */
  template <typename..., typename T = double>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> MyDoubleField_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_MyDoubleField), __isset.at(8), __isset.bit(8)};
  }

  /** Glean { "field": "MyDoubleField" } */
  template <typename..., typename T = double>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> MyDoubleField_ref() & {
    return {this->__fbthrift_field_MyDoubleField, __isset.at(8), __isset.bit(8)};
  }

  /** Glean { "field": "MyDoubleField" } */
  template <typename..., typename T = double>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> MyDoubleField_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_MyDoubleField), __isset.at(8), __isset.bit(8)};
  }

  /** Glean { "field": "MyDoubleField" } */
  template <typename..., typename T = double>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> MyDoubleField() const& {
    return {this->__fbthrift_field_MyDoubleField, __isset.at(8), __isset.bit(8)};
  }

  /** Glean { "field": "MyDoubleField" } */
  template <typename..., typename T = double>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> MyDoubleField() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_MyDoubleField), __isset.at(8), __isset.bit(8)};
  }

  /** Glean { "field": "MyDoubleField" } */
  template <typename..., typename T = double>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> MyDoubleField() & {
    return {this->__fbthrift_field_MyDoubleField, __isset.at(8), __isset.bit(8)};
  }

  /** Glean { "field": "MyDoubleField" } */
  template <typename..., typename T = double>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> MyDoubleField() && {
    return {static_cast<T&&>(this->__fbthrift_field_MyDoubleField), __isset.at(8), __isset.bit(8)};
  }

  /** Glean { "field": "lDouble" } */
  template <typename..., typename T = ::std::vector<double>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> lDouble_ref() const& {
    return {this->__fbthrift_field_lDouble, __isset.at(9), __isset.bit(9)};
  }

  /** Glean { "field": "lDouble" } */
  template <typename..., typename T = ::std::vector<double>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> lDouble_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_lDouble), __isset.at(9), __isset.bit(9)};
  }

  /** Glean { "field": "lDouble" } */
  template <typename..., typename T = ::std::vector<double>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> lDouble_ref() & {
    return {this->__fbthrift_field_lDouble, __isset.at(9), __isset.bit(9)};
  }

  /** Glean { "field": "lDouble" } */
  template <typename..., typename T = ::std::vector<double>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> lDouble_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_lDouble), __isset.at(9), __isset.bit(9)};
  }

  /** Glean { "field": "lDouble" } */
  template <typename..., typename T = ::std::vector<double>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> lDouble() const& {
    return {this->__fbthrift_field_lDouble, __isset.at(9), __isset.bit(9)};
  }

  /** Glean { "field": "lDouble" } */
  template <typename..., typename T = ::std::vector<double>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> lDouble() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_lDouble), __isset.at(9), __isset.bit(9)};
  }

  /** Glean { "field": "lDouble" } */
  template <typename..., typename T = ::std::vector<double>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> lDouble() & {
    return {this->__fbthrift_field_lDouble, __isset.at(9), __isset.bit(9)};
  }

  /** Glean { "field": "lDouble" } */
  template <typename..., typename T = ::std::vector<double>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> lDouble() && {
    return {static_cast<T&&>(this->__fbthrift_field_lDouble), __isset.at(9), __isset.bit(9)};
  }

  /** Glean { "field": "lShort" } */
  template <typename..., typename T = ::std::vector<::std::int16_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> lShort_ref() const& {
    return {this->__fbthrift_field_lShort, __isset.at(10), __isset.bit(10)};
  }

  /** Glean { "field": "lShort" } */
  template <typename..., typename T = ::std::vector<::std::int16_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> lShort_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_lShort), __isset.at(10), __isset.bit(10)};
  }

  /** Glean { "field": "lShort" } */
  template <typename..., typename T = ::std::vector<::std::int16_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> lShort_ref() & {
    return {this->__fbthrift_field_lShort, __isset.at(10), __isset.bit(10)};
  }

  /** Glean { "field": "lShort" } */
  template <typename..., typename T = ::std::vector<::std::int16_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> lShort_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_lShort), __isset.at(10), __isset.bit(10)};
  }

  /** Glean { "field": "lShort" } */
  template <typename..., typename T = ::std::vector<::std::int16_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> lShort() const& {
    return {this->__fbthrift_field_lShort, __isset.at(10), __isset.bit(10)};
  }

  /** Glean { "field": "lShort" } */
  template <typename..., typename T = ::std::vector<::std::int16_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> lShort() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_lShort), __isset.at(10), __isset.bit(10)};
  }

  /** Glean { "field": "lShort" } */
  template <typename..., typename T = ::std::vector<::std::int16_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> lShort() & {
    return {this->__fbthrift_field_lShort, __isset.at(10), __isset.bit(10)};
  }

  /** Glean { "field": "lShort" } */
  template <typename..., typename T = ::std::vector<::std::int16_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> lShort() && {
    return {static_cast<T&&>(this->__fbthrift_field_lShort), __isset.at(10), __isset.bit(10)};
  }

  /** Glean { "field": "lInteger" } */
  template <typename..., typename T = ::std::vector<::std::int32_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> lInteger_ref() const& {
    return {this->__fbthrift_field_lInteger, __isset.at(11), __isset.bit(11)};
  }

  /** Glean { "field": "lInteger" } */
  template <typename..., typename T = ::std::vector<::std::int32_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> lInteger_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_lInteger), __isset.at(11), __isset.bit(11)};
  }

  /** Glean { "field": "lInteger" } */
  template <typename..., typename T = ::std::vector<::std::int32_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> lInteger_ref() & {
    return {this->__fbthrift_field_lInteger, __isset.at(11), __isset.bit(11)};
  }

  /** Glean { "field": "lInteger" } */
  template <typename..., typename T = ::std::vector<::std::int32_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> lInteger_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_lInteger), __isset.at(11), __isset.bit(11)};
  }

  /** Glean { "field": "lInteger" } */
  template <typename..., typename T = ::std::vector<::std::int32_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> lInteger() const& {
    return {this->__fbthrift_field_lInteger, __isset.at(11), __isset.bit(11)};
  }

  /** Glean { "field": "lInteger" } */
  template <typename..., typename T = ::std::vector<::std::int32_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> lInteger() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_lInteger), __isset.at(11), __isset.bit(11)};
  }

  /** Glean { "field": "lInteger" } */
  template <typename..., typename T = ::std::vector<::std::int32_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> lInteger() & {
    return {this->__fbthrift_field_lInteger, __isset.at(11), __isset.bit(11)};
  }

  /** Glean { "field": "lInteger" } */
  template <typename..., typename T = ::std::vector<::std::int32_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> lInteger() && {
    return {static_cast<T&&>(this->__fbthrift_field_lInteger), __isset.at(11), __isset.bit(11)};
  }

  /** Glean { "field": "lLong" } */
  template <typename..., typename T = ::std::vector<::std::int64_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> lLong_ref() const& {
    return {this->__fbthrift_field_lLong, __isset.at(12), __isset.bit(12)};
  }

  /** Glean { "field": "lLong" } */
  template <typename..., typename T = ::std::vector<::std::int64_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> lLong_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_lLong), __isset.at(12), __isset.bit(12)};
  }

  /** Glean { "field": "lLong" } */
  template <typename..., typename T = ::std::vector<::std::int64_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> lLong_ref() & {
    return {this->__fbthrift_field_lLong, __isset.at(12), __isset.bit(12)};
  }

  /** Glean { "field": "lLong" } */
  template <typename..., typename T = ::std::vector<::std::int64_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> lLong_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_lLong), __isset.at(12), __isset.bit(12)};
  }

  /** Glean { "field": "lLong" } */
  template <typename..., typename T = ::std::vector<::std::int64_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> lLong() const& {
    return {this->__fbthrift_field_lLong, __isset.at(12), __isset.bit(12)};
  }

  /** Glean { "field": "lLong" } */
  template <typename..., typename T = ::std::vector<::std::int64_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> lLong() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_lLong), __isset.at(12), __isset.bit(12)};
  }

  /** Glean { "field": "lLong" } */
  template <typename..., typename T = ::std::vector<::std::int64_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> lLong() & {
    return {this->__fbthrift_field_lLong, __isset.at(12), __isset.bit(12)};
  }

  /** Glean { "field": "lLong" } */
  template <typename..., typename T = ::std::vector<::std::int64_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> lLong() && {
    return {static_cast<T&&>(this->__fbthrift_field_lLong), __isset.at(12), __isset.bit(12)};
  }

  /** Glean { "field": "lString" } */
  template <typename..., typename T = ::std::vector<::std::string>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> lString_ref() const& {
    return {this->__fbthrift_field_lString, __isset.at(13), __isset.bit(13)};
  }

  /** Glean { "field": "lString" } */
  template <typename..., typename T = ::std::vector<::std::string>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> lString_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_lString), __isset.at(13), __isset.bit(13)};
  }

  /** Glean { "field": "lString" } */
  template <typename..., typename T = ::std::vector<::std::string>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> lString_ref() & {
    return {this->__fbthrift_field_lString, __isset.at(13), __isset.bit(13)};
  }

  /** Glean { "field": "lString" } */
  template <typename..., typename T = ::std::vector<::std::string>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> lString_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_lString), __isset.at(13), __isset.bit(13)};
  }

  /** Glean { "field": "lString" } */
  template <typename..., typename T = ::std::vector<::std::string>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> lString() const& {
    return {this->__fbthrift_field_lString, __isset.at(13), __isset.bit(13)};
  }

  /** Glean { "field": "lString" } */
  template <typename..., typename T = ::std::vector<::std::string>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> lString() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_lString), __isset.at(13), __isset.bit(13)};
  }

  /** Glean { "field": "lString" } */
  template <typename..., typename T = ::std::vector<::std::string>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> lString() & {
    return {this->__fbthrift_field_lString, __isset.at(13), __isset.bit(13)};
  }

  /** Glean { "field": "lString" } */
  template <typename..., typename T = ::std::vector<::std::string>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> lString() && {
    return {static_cast<T&&>(this->__fbthrift_field_lString), __isset.at(13), __isset.bit(13)};
  }

  /** Glean { "field": "lBool" } */
  template <typename..., typename T = ::std::vector<bool>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> lBool_ref() const& {
    return {this->__fbthrift_field_lBool, __isset.at(14), __isset.bit(14)};
  }

  /** Glean { "field": "lBool" } */
  template <typename..., typename T = ::std::vector<bool>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> lBool_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_lBool), __isset.at(14), __isset.bit(14)};
  }

  /** Glean { "field": "lBool" } */
  template <typename..., typename T = ::std::vector<bool>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> lBool_ref() & {
    return {this->__fbthrift_field_lBool, __isset.at(14), __isset.bit(14)};
  }

  /** Glean { "field": "lBool" } */
  template <typename..., typename T = ::std::vector<bool>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> lBool_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_lBool), __isset.at(14), __isset.bit(14)};
  }

  /** Glean { "field": "lBool" } */
  template <typename..., typename T = ::std::vector<bool>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> lBool() const& {
    return {this->__fbthrift_field_lBool, __isset.at(14), __isset.bit(14)};
  }

  /** Glean { "field": "lBool" } */
  template <typename..., typename T = ::std::vector<bool>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> lBool() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_lBool), __isset.at(14), __isset.bit(14)};
  }

  /** Glean { "field": "lBool" } */
  template <typename..., typename T = ::std::vector<bool>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> lBool() & {
    return {this->__fbthrift_field_lBool, __isset.at(14), __isset.bit(14)};
  }

  /** Glean { "field": "lBool" } */
  template <typename..., typename T = ::std::vector<bool>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> lBool() && {
    return {static_cast<T&&>(this->__fbthrift_field_lBool), __isset.at(14), __isset.bit(14)};
  }

  /** Glean { "field": "lByte" } */
  template <typename..., typename T = ::std::vector<::std::int8_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> lByte_ref() const& {
    return {this->__fbthrift_field_lByte, __isset.at(15), __isset.bit(15)};
  }

  /** Glean { "field": "lByte" } */
  template <typename..., typename T = ::std::vector<::std::int8_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> lByte_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_lByte), __isset.at(15), __isset.bit(15)};
  }

  /** Glean { "field": "lByte" } */
  template <typename..., typename T = ::std::vector<::std::int8_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> lByte_ref() & {
    return {this->__fbthrift_field_lByte, __isset.at(15), __isset.bit(15)};
  }

  /** Glean { "field": "lByte" } */
  template <typename..., typename T = ::std::vector<::std::int8_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> lByte_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_lByte), __isset.at(15), __isset.bit(15)};
  }

  /** Glean { "field": "lByte" } */
  template <typename..., typename T = ::std::vector<::std::int8_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> lByte() const& {
    return {this->__fbthrift_field_lByte, __isset.at(15), __isset.bit(15)};
  }

  /** Glean { "field": "lByte" } */
  template <typename..., typename T = ::std::vector<::std::int8_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> lByte() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_lByte), __isset.at(15), __isset.bit(15)};
  }

  /** Glean { "field": "lByte" } */
  template <typename..., typename T = ::std::vector<::std::int8_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> lByte() & {
    return {this->__fbthrift_field_lByte, __isset.at(15), __isset.bit(15)};
  }

  /** Glean { "field": "lByte" } */
  template <typename..., typename T = ::std::vector<::std::int8_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> lByte() && {
    return {static_cast<T&&>(this->__fbthrift_field_lByte), __isset.at(15), __isset.bit(15)};
  }

  /** Glean { "field": "mShortString" } */
  template <typename..., typename T = ::std::map<::std::int16_t, ::std::string>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> mShortString_ref() const& {
    return {this->__fbthrift_field_mShortString, __isset.at(16), __isset.bit(16)};
  }

  /** Glean { "field": "mShortString" } */
  template <typename..., typename T = ::std::map<::std::int16_t, ::std::string>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> mShortString_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_mShortString), __isset.at(16), __isset.bit(16)};
  }

  /** Glean { "field": "mShortString" } */
  template <typename..., typename T = ::std::map<::std::int16_t, ::std::string>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> mShortString_ref() & {
    return {this->__fbthrift_field_mShortString, __isset.at(16), __isset.bit(16)};
  }

  /** Glean { "field": "mShortString" } */
  template <typename..., typename T = ::std::map<::std::int16_t, ::std::string>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> mShortString_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_mShortString), __isset.at(16), __isset.bit(16)};
  }

  /** Glean { "field": "mShortString" } */
  template <typename..., typename T = ::std::map<::std::int16_t, ::std::string>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> mShortString() const& {
    return {this->__fbthrift_field_mShortString, __isset.at(16), __isset.bit(16)};
  }

  /** Glean { "field": "mShortString" } */
  template <typename..., typename T = ::std::map<::std::int16_t, ::std::string>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> mShortString() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_mShortString), __isset.at(16), __isset.bit(16)};
  }

  /** Glean { "field": "mShortString" } */
  template <typename..., typename T = ::std::map<::std::int16_t, ::std::string>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> mShortString() & {
    return {this->__fbthrift_field_mShortString, __isset.at(16), __isset.bit(16)};
  }

  /** Glean { "field": "mShortString" } */
  template <typename..., typename T = ::std::map<::std::int16_t, ::std::string>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> mShortString() && {
    return {static_cast<T&&>(this->__fbthrift_field_mShortString), __isset.at(16), __isset.bit(16)};
  }

  /** Glean { "field": "mIntegerString" } */
  template <typename..., typename T = ::std::map<::std::int32_t, ::std::string>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> mIntegerString_ref() const& {
    return {this->__fbthrift_field_mIntegerString, __isset.at(17), __isset.bit(17)};
  }

  /** Glean { "field": "mIntegerString" } */
  template <typename..., typename T = ::std::map<::std::int32_t, ::std::string>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> mIntegerString_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_mIntegerString), __isset.at(17), __isset.bit(17)};
  }

  /** Glean { "field": "mIntegerString" } */
  template <typename..., typename T = ::std::map<::std::int32_t, ::std::string>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> mIntegerString_ref() & {
    return {this->__fbthrift_field_mIntegerString, __isset.at(17), __isset.bit(17)};
  }

  /** Glean { "field": "mIntegerString" } */
  template <typename..., typename T = ::std::map<::std::int32_t, ::std::string>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> mIntegerString_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_mIntegerString), __isset.at(17), __isset.bit(17)};
  }

  /** Glean { "field": "mIntegerString" } */
  template <typename..., typename T = ::std::map<::std::int32_t, ::std::string>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> mIntegerString() const& {
    return {this->__fbthrift_field_mIntegerString, __isset.at(17), __isset.bit(17)};
  }

  /** Glean { "field": "mIntegerString" } */
  template <typename..., typename T = ::std::map<::std::int32_t, ::std::string>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> mIntegerString() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_mIntegerString), __isset.at(17), __isset.bit(17)};
  }

  /** Glean { "field": "mIntegerString" } */
  template <typename..., typename T = ::std::map<::std::int32_t, ::std::string>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> mIntegerString() & {
    return {this->__fbthrift_field_mIntegerString, __isset.at(17), __isset.bit(17)};
  }

  /** Glean { "field": "mIntegerString" } */
  template <typename..., typename T = ::std::map<::std::int32_t, ::std::string>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> mIntegerString() && {
    return {static_cast<T&&>(this->__fbthrift_field_mIntegerString), __isset.at(17), __isset.bit(17)};
  }

  /** Glean { "field": "mStringMyStruct" } */
  template <typename..., typename T = ::std::map<::std::string, ::cpp2::MyStruct>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> mStringMyStruct_ref() const& {
    return {this->__fbthrift_field_mStringMyStruct, __isset.at(18), __isset.bit(18)};
  }

  /** Glean { "field": "mStringMyStruct" } */
  template <typename..., typename T = ::std::map<::std::string, ::cpp2::MyStruct>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> mStringMyStruct_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_mStringMyStruct), __isset.at(18), __isset.bit(18)};
  }

  /** Glean { "field": "mStringMyStruct" } */
  template <typename..., typename T = ::std::map<::std::string, ::cpp2::MyStruct>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> mStringMyStruct_ref() & {
    return {this->__fbthrift_field_mStringMyStruct, __isset.at(18), __isset.bit(18)};
  }

  /** Glean { "field": "mStringMyStruct" } */
  template <typename..., typename T = ::std::map<::std::string, ::cpp2::MyStruct>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> mStringMyStruct_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_mStringMyStruct), __isset.at(18), __isset.bit(18)};
  }

  /** Glean { "field": "mStringMyStruct" } */
  template <typename..., typename T = ::std::map<::std::string, ::cpp2::MyStruct>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> mStringMyStruct() const& {
    return {this->__fbthrift_field_mStringMyStruct, __isset.at(18), __isset.bit(18)};
  }

  /** Glean { "field": "mStringMyStruct" } */
  template <typename..., typename T = ::std::map<::std::string, ::cpp2::MyStruct>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> mStringMyStruct() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_mStringMyStruct), __isset.at(18), __isset.bit(18)};
  }

  /** Glean { "field": "mStringMyStruct" } */
  template <typename..., typename T = ::std::map<::std::string, ::cpp2::MyStruct>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> mStringMyStruct() & {
    return {this->__fbthrift_field_mStringMyStruct, __isset.at(18), __isset.bit(18)};
  }

  /** Glean { "field": "mStringMyStruct" } */
  template <typename..., typename T = ::std::map<::std::string, ::cpp2::MyStruct>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> mStringMyStruct() && {
    return {static_cast<T&&>(this->__fbthrift_field_mStringMyStruct), __isset.at(18), __isset.bit(18)};
  }

  /** Glean { "field": "mStringBool" } */
  template <typename..., typename T = ::std::map<::std::string, bool>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> mStringBool_ref() const& {
    return {this->__fbthrift_field_mStringBool, __isset.at(19), __isset.bit(19)};
  }

  /** Glean { "field": "mStringBool" } */
  template <typename..., typename T = ::std::map<::std::string, bool>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> mStringBool_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_mStringBool), __isset.at(19), __isset.bit(19)};
  }

  /** Glean { "field": "mStringBool" } */
  template <typename..., typename T = ::std::map<::std::string, bool>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> mStringBool_ref() & {
    return {this->__fbthrift_field_mStringBool, __isset.at(19), __isset.bit(19)};
  }

  /** Glean { "field": "mStringBool" } */
  template <typename..., typename T = ::std::map<::std::string, bool>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> mStringBool_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_mStringBool), __isset.at(19), __isset.bit(19)};
  }

  /** Glean { "field": "mStringBool" } */
  template <typename..., typename T = ::std::map<::std::string, bool>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> mStringBool() const& {
    return {this->__fbthrift_field_mStringBool, __isset.at(19), __isset.bit(19)};
  }

  /** Glean { "field": "mStringBool" } */
  template <typename..., typename T = ::std::map<::std::string, bool>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> mStringBool() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_mStringBool), __isset.at(19), __isset.bit(19)};
  }

  /** Glean { "field": "mStringBool" } */
  template <typename..., typename T = ::std::map<::std::string, bool>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> mStringBool() & {
    return {this->__fbthrift_field_mStringBool, __isset.at(19), __isset.bit(19)};
  }

  /** Glean { "field": "mStringBool" } */
  template <typename..., typename T = ::std::map<::std::string, bool>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> mStringBool() && {
    return {static_cast<T&&>(this->__fbthrift_field_mStringBool), __isset.at(19), __isset.bit(19)};
  }

  /** Glean { "field": "mIntegerInteger" } */
  template <typename..., typename T = ::std::map<::std::int32_t, ::std::int32_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> mIntegerInteger_ref() const& {
    return {this->__fbthrift_field_mIntegerInteger, __isset.at(20), __isset.bit(20)};
  }

  /** Glean { "field": "mIntegerInteger" } */
  template <typename..., typename T = ::std::map<::std::int32_t, ::std::int32_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> mIntegerInteger_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_mIntegerInteger), __isset.at(20), __isset.bit(20)};
  }

  /** Glean { "field": "mIntegerInteger" } */
  template <typename..., typename T = ::std::map<::std::int32_t, ::std::int32_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> mIntegerInteger_ref() & {
    return {this->__fbthrift_field_mIntegerInteger, __isset.at(20), __isset.bit(20)};
  }

  /** Glean { "field": "mIntegerInteger" } */
  template <typename..., typename T = ::std::map<::std::int32_t, ::std::int32_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> mIntegerInteger_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_mIntegerInteger), __isset.at(20), __isset.bit(20)};
  }

  /** Glean { "field": "mIntegerInteger" } */
  template <typename..., typename T = ::std::map<::std::int32_t, ::std::int32_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> mIntegerInteger() const& {
    return {this->__fbthrift_field_mIntegerInteger, __isset.at(20), __isset.bit(20)};
  }

  /** Glean { "field": "mIntegerInteger" } */
  template <typename..., typename T = ::std::map<::std::int32_t, ::std::int32_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> mIntegerInteger() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_mIntegerInteger), __isset.at(20), __isset.bit(20)};
  }

  /** Glean { "field": "mIntegerInteger" } */
  template <typename..., typename T = ::std::map<::std::int32_t, ::std::int32_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> mIntegerInteger() & {
    return {this->__fbthrift_field_mIntegerInteger, __isset.at(20), __isset.bit(20)};
  }

  /** Glean { "field": "mIntegerInteger" } */
  template <typename..., typename T = ::std::map<::std::int32_t, ::std::int32_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> mIntegerInteger() && {
    return {static_cast<T&&>(this->__fbthrift_field_mIntegerInteger), __isset.at(20), __isset.bit(20)};
  }

  /** Glean { "field": "mIntegerBool" } */
  template <typename..., typename T = ::std::map<::std::int32_t, bool>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> mIntegerBool_ref() const& {
    return {this->__fbthrift_field_mIntegerBool, __isset.at(21), __isset.bit(21)};
  }

  /** Glean { "field": "mIntegerBool" } */
  template <typename..., typename T = ::std::map<::std::int32_t, bool>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> mIntegerBool_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_mIntegerBool), __isset.at(21), __isset.bit(21)};
  }

  /** Glean { "field": "mIntegerBool" } */
  template <typename..., typename T = ::std::map<::std::int32_t, bool>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> mIntegerBool_ref() & {
    return {this->__fbthrift_field_mIntegerBool, __isset.at(21), __isset.bit(21)};
  }

  /** Glean { "field": "mIntegerBool" } */
  template <typename..., typename T = ::std::map<::std::int32_t, bool>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> mIntegerBool_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_mIntegerBool), __isset.at(21), __isset.bit(21)};
  }

  /** Glean { "field": "mIntegerBool" } */
  template <typename..., typename T = ::std::map<::std::int32_t, bool>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> mIntegerBool() const& {
    return {this->__fbthrift_field_mIntegerBool, __isset.at(21), __isset.bit(21)};
  }

  /** Glean { "field": "mIntegerBool" } */
  template <typename..., typename T = ::std::map<::std::int32_t, bool>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> mIntegerBool() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_mIntegerBool), __isset.at(21), __isset.bit(21)};
  }

  /** Glean { "field": "mIntegerBool" } */
  template <typename..., typename T = ::std::map<::std::int32_t, bool>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> mIntegerBool() & {
    return {this->__fbthrift_field_mIntegerBool, __isset.at(21), __isset.bit(21)};
  }

  /** Glean { "field": "mIntegerBool" } */
  template <typename..., typename T = ::std::map<::std::int32_t, bool>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> mIntegerBool() && {
    return {static_cast<T&&>(this->__fbthrift_field_mIntegerBool), __isset.at(21), __isset.bit(21)};
  }

  /** Glean { "field": "sShort" } */
  template <typename..., typename T = ::std::set<::std::int16_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> sShort_ref() const& {
    return {this->__fbthrift_field_sShort, __isset.at(22), __isset.bit(22)};
  }

  /** Glean { "field": "sShort" } */
  template <typename..., typename T = ::std::set<::std::int16_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> sShort_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_sShort), __isset.at(22), __isset.bit(22)};
  }

  /** Glean { "field": "sShort" } */
  template <typename..., typename T = ::std::set<::std::int16_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> sShort_ref() & {
    return {this->__fbthrift_field_sShort, __isset.at(22), __isset.bit(22)};
  }

  /** Glean { "field": "sShort" } */
  template <typename..., typename T = ::std::set<::std::int16_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> sShort_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_sShort), __isset.at(22), __isset.bit(22)};
  }

  /** Glean { "field": "sShort" } */
  template <typename..., typename T = ::std::set<::std::int16_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> sShort() const& {
    return {this->__fbthrift_field_sShort, __isset.at(22), __isset.bit(22)};
  }

  /** Glean { "field": "sShort" } */
  template <typename..., typename T = ::std::set<::std::int16_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> sShort() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_sShort), __isset.at(22), __isset.bit(22)};
  }

  /** Glean { "field": "sShort" } */
  template <typename..., typename T = ::std::set<::std::int16_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> sShort() & {
    return {this->__fbthrift_field_sShort, __isset.at(22), __isset.bit(22)};
  }

  /** Glean { "field": "sShort" } */
  template <typename..., typename T = ::std::set<::std::int16_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> sShort() && {
    return {static_cast<T&&>(this->__fbthrift_field_sShort), __isset.at(22), __isset.bit(22)};
  }

  /** Glean { "field": "sMyStruct" } */
  template <typename..., typename T = ::std::set<::cpp2::MyStruct>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> sMyStruct_ref() const& {
    return {this->__fbthrift_field_sMyStruct, __isset.at(23), __isset.bit(23)};
  }

  /** Glean { "field": "sMyStruct" } */
  template <typename..., typename T = ::std::set<::cpp2::MyStruct>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> sMyStruct_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_sMyStruct), __isset.at(23), __isset.bit(23)};
  }

  /** Glean { "field": "sMyStruct" } */
  template <typename..., typename T = ::std::set<::cpp2::MyStruct>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> sMyStruct_ref() & {
    return {this->__fbthrift_field_sMyStruct, __isset.at(23), __isset.bit(23)};
  }

  /** Glean { "field": "sMyStruct" } */
  template <typename..., typename T = ::std::set<::cpp2::MyStruct>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> sMyStruct_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_sMyStruct), __isset.at(23), __isset.bit(23)};
  }

  /** Glean { "field": "sMyStruct" } */
  template <typename..., typename T = ::std::set<::cpp2::MyStruct>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> sMyStruct() const& {
    return {this->__fbthrift_field_sMyStruct, __isset.at(23), __isset.bit(23)};
  }

  /** Glean { "field": "sMyStruct" } */
  template <typename..., typename T = ::std::set<::cpp2::MyStruct>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> sMyStruct() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_sMyStruct), __isset.at(23), __isset.bit(23)};
  }

  /** Glean { "field": "sMyStruct" } */
  template <typename..., typename T = ::std::set<::cpp2::MyStruct>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> sMyStruct() & {
    return {this->__fbthrift_field_sMyStruct, __isset.at(23), __isset.bit(23)};
  }

  /** Glean { "field": "sMyStruct" } */
  template <typename..., typename T = ::std::set<::cpp2::MyStruct>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> sMyStruct() && {
    return {static_cast<T&&>(this->__fbthrift_field_sMyStruct), __isset.at(23), __isset.bit(23)};
  }

  /** Glean { "field": "sLong" } */
  template <typename..., typename T = ::std::set<::std::int64_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> sLong_ref() const& {
    return {this->__fbthrift_field_sLong, __isset.at(24), __isset.bit(24)};
  }

  /** Glean { "field": "sLong" } */
  template <typename..., typename T = ::std::set<::std::int64_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> sLong_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_sLong), __isset.at(24), __isset.bit(24)};
  }

  /** Glean { "field": "sLong" } */
  template <typename..., typename T = ::std::set<::std::int64_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> sLong_ref() & {
    return {this->__fbthrift_field_sLong, __isset.at(24), __isset.bit(24)};
  }

  /** Glean { "field": "sLong" } */
  template <typename..., typename T = ::std::set<::std::int64_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> sLong_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_sLong), __isset.at(24), __isset.bit(24)};
  }

  /** Glean { "field": "sLong" } */
  template <typename..., typename T = ::std::set<::std::int64_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> sLong() const& {
    return {this->__fbthrift_field_sLong, __isset.at(24), __isset.bit(24)};
  }

  /** Glean { "field": "sLong" } */
  template <typename..., typename T = ::std::set<::std::int64_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> sLong() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_sLong), __isset.at(24), __isset.bit(24)};
  }

  /** Glean { "field": "sLong" } */
  template <typename..., typename T = ::std::set<::std::int64_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> sLong() & {
    return {this->__fbthrift_field_sLong, __isset.at(24), __isset.bit(24)};
  }

  /** Glean { "field": "sLong" } */
  template <typename..., typename T = ::std::set<::std::int64_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> sLong() && {
    return {static_cast<T&&>(this->__fbthrift_field_sLong), __isset.at(24), __isset.bit(24)};
  }

  /** Glean { "field": "sString" } */
  template <typename..., typename T = ::std::set<::std::string>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> sString_ref() const& {
    return {this->__fbthrift_field_sString, __isset.at(25), __isset.bit(25)};
  }

  /** Glean { "field": "sString" } */
  template <typename..., typename T = ::std::set<::std::string>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> sString_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_sString), __isset.at(25), __isset.bit(25)};
  }

  /** Glean { "field": "sString" } */
  template <typename..., typename T = ::std::set<::std::string>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> sString_ref() & {
    return {this->__fbthrift_field_sString, __isset.at(25), __isset.bit(25)};
  }

  /** Glean { "field": "sString" } */
  template <typename..., typename T = ::std::set<::std::string>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> sString_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_sString), __isset.at(25), __isset.bit(25)};
  }

  /** Glean { "field": "sString" } */
  template <typename..., typename T = ::std::set<::std::string>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> sString() const& {
    return {this->__fbthrift_field_sString, __isset.at(25), __isset.bit(25)};
  }

  /** Glean { "field": "sString" } */
  template <typename..., typename T = ::std::set<::std::string>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> sString() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_sString), __isset.at(25), __isset.bit(25)};
  }

  /** Glean { "field": "sString" } */
  template <typename..., typename T = ::std::set<::std::string>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> sString() & {
    return {this->__fbthrift_field_sString, __isset.at(25), __isset.bit(25)};
  }

  /** Glean { "field": "sString" } */
  template <typename..., typename T = ::std::set<::std::string>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> sString() && {
    return {static_cast<T&&>(this->__fbthrift_field_sString), __isset.at(25), __isset.bit(25)};
  }

  /** Glean { "field": "sByte" } */
  template <typename..., typename T = ::std::set<::std::int8_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> sByte_ref() const& {
    return {this->__fbthrift_field_sByte, __isset.at(26), __isset.bit(26)};
  }

  /** Glean { "field": "sByte" } */
  template <typename..., typename T = ::std::set<::std::int8_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> sByte_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_sByte), __isset.at(26), __isset.bit(26)};
  }

  /** Glean { "field": "sByte" } */
  template <typename..., typename T = ::std::set<::std::int8_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> sByte_ref() & {
    return {this->__fbthrift_field_sByte, __isset.at(26), __isset.bit(26)};
  }

  /** Glean { "field": "sByte" } */
  template <typename..., typename T = ::std::set<::std::int8_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> sByte_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_sByte), __isset.at(26), __isset.bit(26)};
  }

  /** Glean { "field": "sByte" } */
  template <typename..., typename T = ::std::set<::std::int8_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> sByte() const& {
    return {this->__fbthrift_field_sByte, __isset.at(26), __isset.bit(26)};
  }

  /** Glean { "field": "sByte" } */
  template <typename..., typename T = ::std::set<::std::int8_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> sByte() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_sByte), __isset.at(26), __isset.bit(26)};
  }

  /** Glean { "field": "sByte" } */
  template <typename..., typename T = ::std::set<::std::int8_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> sByte() & {
    return {this->__fbthrift_field_sByte, __isset.at(26), __isset.bit(26)};
  }

  /** Glean { "field": "sByte" } */
  template <typename..., typename T = ::std::set<::std::int8_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> sByte() && {
    return {static_cast<T&&>(this->__fbthrift_field_sByte), __isset.at(26), __isset.bit(26)};
  }

  /** Glean { "field": "mListList" } */
  template <typename..., typename T = ::std::map<::std::vector<::std::int32_t>, ::std::vector<::std::int32_t>>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> mListList_ref() const& {
    return {this->__fbthrift_field_mListList, __isset.at(27), __isset.bit(27)};
  }

  /** Glean { "field": "mListList" } */
  template <typename..., typename T = ::std::map<::std::vector<::std::int32_t>, ::std::vector<::std::int32_t>>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> mListList_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_mListList), __isset.at(27), __isset.bit(27)};
  }

  /** Glean { "field": "mListList" } */
  template <typename..., typename T = ::std::map<::std::vector<::std::int32_t>, ::std::vector<::std::int32_t>>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> mListList_ref() & {
    return {this->__fbthrift_field_mListList, __isset.at(27), __isset.bit(27)};
  }

  /** Glean { "field": "mListList" } */
  template <typename..., typename T = ::std::map<::std::vector<::std::int32_t>, ::std::vector<::std::int32_t>>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> mListList_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_mListList), __isset.at(27), __isset.bit(27)};
  }

  /** Glean { "field": "mListList" } */
  template <typename..., typename T = ::std::map<::std::vector<::std::int32_t>, ::std::vector<::std::int32_t>>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> mListList() const& {
    return {this->__fbthrift_field_mListList, __isset.at(27), __isset.bit(27)};
  }

  /** Glean { "field": "mListList" } */
  template <typename..., typename T = ::std::map<::std::vector<::std::int32_t>, ::std::vector<::std::int32_t>>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> mListList() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_mListList), __isset.at(27), __isset.bit(27)};
  }

  /** Glean { "field": "mListList" } */
  template <typename..., typename T = ::std::map<::std::vector<::std::int32_t>, ::std::vector<::std::int32_t>>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> mListList() & {
    return {this->__fbthrift_field_mListList, __isset.at(27), __isset.bit(27)};
  }

  /** Glean { "field": "mListList" } */
  template <typename..., typename T = ::std::map<::std::vector<::std::int32_t>, ::std::vector<::std::int32_t>>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> mListList() && {
    return {static_cast<T&&>(this->__fbthrift_field_mListList), __isset.at(27), __isset.bit(27)};
  }

  /** Glean { "field": "MyIntField" } */
  ::std::int64_t get_MyIntField() const {
    return __fbthrift_field_MyIntField;
  }

  /** Glean { "field": "MyIntField" } */
  [[deprecated("Use `FOO.MyIntField() = BAR;` instead of `FOO.set_MyIntField(BAR);`")]]
  ::std::int64_t& set_MyIntField(::std::int64_t MyIntField_) {
    MyIntField_ref() = MyIntField_;
    return __fbthrift_field_MyIntField;
  }

  /** Glean { "field": "MyStringField" } */
  const ::std::string& get_MyStringField() const& {
    return __fbthrift_field_MyStringField;
  }

  /** Glean { "field": "MyStringField" } */
  ::std::string get_MyStringField() && {
    return std::move(__fbthrift_field_MyStringField);
  }

  /** Glean { "field": "MyStringField" } */
  template <typename T_MyStruct_MyStringField_struct_setter = ::std::string>
  [[deprecated("Use `FOO.MyStringField() = BAR;` instead of `FOO.set_MyStringField(BAR);`")]]
  ::std::string& set_MyStringField(T_MyStruct_MyStringField_struct_setter&& MyStringField_) {
    MyStringField_ref() = std::forward<T_MyStruct_MyStringField_struct_setter>(MyStringField_);
    return __fbthrift_field_MyStringField;
  }
  /** Glean { "field": "MyDataField" } */
  const ::cpp2::MyDataItem& get_MyDataField() const&;
  /** Glean { "field": "MyDataField" } */
  ::cpp2::MyDataItem get_MyDataField() &&;

  /** Glean { "field": "MyDataField" } */
  template <typename T_MyStruct_MyDataField_struct_setter = ::cpp2::MyDataItem>
  [[deprecated("Use `FOO.MyDataField() = BAR;` instead of `FOO.set_MyDataField(BAR);`")]]
  ::cpp2::MyDataItem& set_MyDataField(T_MyStruct_MyDataField_struct_setter&& MyDataField_) {
    MyDataField_ref() = std::forward<T_MyStruct_MyDataField_struct_setter>(MyDataField_);
    return __fbthrift_field_MyDataField;
  }

  /** Glean { "field": "myEnum" } */
  ::cpp2::MyEnum get_myEnum() const {
    return __fbthrift_field_myEnum;
  }

  /** Glean { "field": "myEnum" } */
  [[deprecated("Use `FOO.myEnum() = BAR;` instead of `FOO.set_myEnum(BAR);`")]]
  ::cpp2::MyEnum& set_myEnum(::cpp2::MyEnum myEnum_) {
    myEnum_ref() = myEnum_;
    return __fbthrift_field_myEnum;
  }

  /** Glean { "field": "MyBoolField" } */
  bool get_MyBoolField() const {
    return __fbthrift_field_MyBoolField;
  }

  /** Glean { "field": "MyBoolField" } */
  [[deprecated("Use `FOO.MyBoolField() = BAR;` instead of `FOO.set_MyBoolField(BAR);`")]]
  bool& set_MyBoolField(bool MyBoolField_) {
    MyBoolField_ref() = MyBoolField_;
    return __fbthrift_field_MyBoolField;
  }

  /** Glean { "field": "MyByteField" } */
  ::std::int8_t get_MyByteField() const {
    return __fbthrift_field_MyByteField;
  }

  /** Glean { "field": "MyByteField" } */
  [[deprecated("Use `FOO.MyByteField() = BAR;` instead of `FOO.set_MyByteField(BAR);`")]]
  ::std::int8_t& set_MyByteField(::std::int8_t MyByteField_) {
    MyByteField_ref() = MyByteField_;
    return __fbthrift_field_MyByteField;
  }

  /** Glean { "field": "MyShortField" } */
  ::std::int16_t get_MyShortField() const {
    return __fbthrift_field_MyShortField;
  }

  /** Glean { "field": "MyShortField" } */
  [[deprecated("Use `FOO.MyShortField() = BAR;` instead of `FOO.set_MyShortField(BAR);`")]]
  ::std::int16_t& set_MyShortField(::std::int16_t MyShortField_) {
    MyShortField_ref() = MyShortField_;
    return __fbthrift_field_MyShortField;
  }

  /** Glean { "field": "MyLongField" } */
  ::std::int64_t get_MyLongField() const {
    return __fbthrift_field_MyLongField;
  }

  /** Glean { "field": "MyLongField" } */
  [[deprecated("Use `FOO.MyLongField() = BAR;` instead of `FOO.set_MyLongField(BAR);`")]]
  ::std::int64_t& set_MyLongField(::std::int64_t MyLongField_) {
    MyLongField_ref() = MyLongField_;
    return __fbthrift_field_MyLongField;
  }

  /** Glean { "field": "MyDoubleField" } */
  double get_MyDoubleField() const {
    return __fbthrift_field_MyDoubleField;
  }

  /** Glean { "field": "MyDoubleField" } */
  [[deprecated("Use `FOO.MyDoubleField() = BAR;` instead of `FOO.set_MyDoubleField(BAR);`")]]
  double& set_MyDoubleField(double MyDoubleField_) {
    MyDoubleField_ref() = MyDoubleField_;
    return __fbthrift_field_MyDoubleField;
  }
  /** Glean { "field": "lDouble" } */
  const ::std::vector<double>& get_lDouble() const&;
  /** Glean { "field": "lDouble" } */
  ::std::vector<double> get_lDouble() &&;

  /** Glean { "field": "lDouble" } */
  template <typename T_MyStruct_lDouble_struct_setter = ::std::vector<double>>
  [[deprecated("Use `FOO.lDouble() = BAR;` instead of `FOO.set_lDouble(BAR);`")]]
  ::std::vector<double>& set_lDouble(T_MyStruct_lDouble_struct_setter&& lDouble_) {
    lDouble_ref() = std::forward<T_MyStruct_lDouble_struct_setter>(lDouble_);
    return __fbthrift_field_lDouble;
  }
  /** Glean { "field": "lShort" } */
  const ::std::vector<::std::int16_t>& get_lShort() const&;
  /** Glean { "field": "lShort" } */
  ::std::vector<::std::int16_t> get_lShort() &&;

  /** Glean { "field": "lShort" } */
  template <typename T_MyStruct_lShort_struct_setter = ::std::vector<::std::int16_t>>
  [[deprecated("Use `FOO.lShort() = BAR;` instead of `FOO.set_lShort(BAR);`")]]
  ::std::vector<::std::int16_t>& set_lShort(T_MyStruct_lShort_struct_setter&& lShort_) {
    lShort_ref() = std::forward<T_MyStruct_lShort_struct_setter>(lShort_);
    return __fbthrift_field_lShort;
  }
  /** Glean { "field": "lInteger" } */
  const ::std::vector<::std::int32_t>& get_lInteger() const&;
  /** Glean { "field": "lInteger" } */
  ::std::vector<::std::int32_t> get_lInteger() &&;

  /** Glean { "field": "lInteger" } */
  template <typename T_MyStruct_lInteger_struct_setter = ::std::vector<::std::int32_t>>
  [[deprecated("Use `FOO.lInteger() = BAR;` instead of `FOO.set_lInteger(BAR);`")]]
  ::std::vector<::std::int32_t>& set_lInteger(T_MyStruct_lInteger_struct_setter&& lInteger_) {
    lInteger_ref() = std::forward<T_MyStruct_lInteger_struct_setter>(lInteger_);
    return __fbthrift_field_lInteger;
  }
  /** Glean { "field": "lLong" } */
  const ::std::vector<::std::int64_t>& get_lLong() const&;
  /** Glean { "field": "lLong" } */
  ::std::vector<::std::int64_t> get_lLong() &&;

  /** Glean { "field": "lLong" } */
  template <typename T_MyStruct_lLong_struct_setter = ::std::vector<::std::int64_t>>
  [[deprecated("Use `FOO.lLong() = BAR;` instead of `FOO.set_lLong(BAR);`")]]
  ::std::vector<::std::int64_t>& set_lLong(T_MyStruct_lLong_struct_setter&& lLong_) {
    lLong_ref() = std::forward<T_MyStruct_lLong_struct_setter>(lLong_);
    return __fbthrift_field_lLong;
  }
  /** Glean { "field": "lString" } */
  const ::std::vector<::std::string>& get_lString() const&;
  /** Glean { "field": "lString" } */
  ::std::vector<::std::string> get_lString() &&;

  /** Glean { "field": "lString" } */
  template <typename T_MyStruct_lString_struct_setter = ::std::vector<::std::string>>
  [[deprecated("Use `FOO.lString() = BAR;` instead of `FOO.set_lString(BAR);`")]]
  ::std::vector<::std::string>& set_lString(T_MyStruct_lString_struct_setter&& lString_) {
    lString_ref() = std::forward<T_MyStruct_lString_struct_setter>(lString_);
    return __fbthrift_field_lString;
  }
  /** Glean { "field": "lBool" } */
  const ::std::vector<bool>& get_lBool() const&;
  /** Glean { "field": "lBool" } */
  ::std::vector<bool> get_lBool() &&;

  /** Glean { "field": "lBool" } */
  template <typename T_MyStruct_lBool_struct_setter = ::std::vector<bool>>
  [[deprecated("Use `FOO.lBool() = BAR;` instead of `FOO.set_lBool(BAR);`")]]
  ::std::vector<bool>& set_lBool(T_MyStruct_lBool_struct_setter&& lBool_) {
    lBool_ref() = std::forward<T_MyStruct_lBool_struct_setter>(lBool_);
    return __fbthrift_field_lBool;
  }
  /** Glean { "field": "lByte" } */
  const ::std::vector<::std::int8_t>& get_lByte() const&;
  /** Glean { "field": "lByte" } */
  ::std::vector<::std::int8_t> get_lByte() &&;

  /** Glean { "field": "lByte" } */
  template <typename T_MyStruct_lByte_struct_setter = ::std::vector<::std::int8_t>>
  [[deprecated("Use `FOO.lByte() = BAR;` instead of `FOO.set_lByte(BAR);`")]]
  ::std::vector<::std::int8_t>& set_lByte(T_MyStruct_lByte_struct_setter&& lByte_) {
    lByte_ref() = std::forward<T_MyStruct_lByte_struct_setter>(lByte_);
    return __fbthrift_field_lByte;
  }
  /** Glean { "field": "mShortString" } */
  const ::std::map<::std::int16_t, ::std::string>& get_mShortString() const&;
  /** Glean { "field": "mShortString" } */
  ::std::map<::std::int16_t, ::std::string> get_mShortString() &&;

  /** Glean { "field": "mShortString" } */
  template <typename T_MyStruct_mShortString_struct_setter = ::std::map<::std::int16_t, ::std::string>>
  [[deprecated("Use `FOO.mShortString() = BAR;` instead of `FOO.set_mShortString(BAR);`")]]
  ::std::map<::std::int16_t, ::std::string>& set_mShortString(T_MyStruct_mShortString_struct_setter&& mShortString_) {
    mShortString_ref() = std::forward<T_MyStruct_mShortString_struct_setter>(mShortString_);
    return __fbthrift_field_mShortString;
  }
  /** Glean { "field": "mIntegerString" } */
  const ::std::map<::std::int32_t, ::std::string>& get_mIntegerString() const&;
  /** Glean { "field": "mIntegerString" } */
  ::std::map<::std::int32_t, ::std::string> get_mIntegerString() &&;

  /** Glean { "field": "mIntegerString" } */
  template <typename T_MyStruct_mIntegerString_struct_setter = ::std::map<::std::int32_t, ::std::string>>
  [[deprecated("Use `FOO.mIntegerString() = BAR;` instead of `FOO.set_mIntegerString(BAR);`")]]
  ::std::map<::std::int32_t, ::std::string>& set_mIntegerString(T_MyStruct_mIntegerString_struct_setter&& mIntegerString_) {
    mIntegerString_ref() = std::forward<T_MyStruct_mIntegerString_struct_setter>(mIntegerString_);
    return __fbthrift_field_mIntegerString;
  }
  /** Glean { "field": "mStringMyStruct" } */
  const ::std::map<::std::string, ::cpp2::MyStruct>& get_mStringMyStruct() const&;
  /** Glean { "field": "mStringMyStruct" } */
  ::std::map<::std::string, ::cpp2::MyStruct> get_mStringMyStruct() &&;

  /** Glean { "field": "mStringMyStruct" } */
  template <typename T_MyStruct_mStringMyStruct_struct_setter = ::std::map<::std::string, ::cpp2::MyStruct>>
  [[deprecated("Use `FOO.mStringMyStruct() = BAR;` instead of `FOO.set_mStringMyStruct(BAR);`")]]
  ::std::map<::std::string, ::cpp2::MyStruct>& set_mStringMyStruct(T_MyStruct_mStringMyStruct_struct_setter&& mStringMyStruct_) {
    mStringMyStruct_ref() = std::forward<T_MyStruct_mStringMyStruct_struct_setter>(mStringMyStruct_);
    return __fbthrift_field_mStringMyStruct;
  }
  /** Glean { "field": "mStringBool" } */
  const ::std::map<::std::string, bool>& get_mStringBool() const&;
  /** Glean { "field": "mStringBool" } */
  ::std::map<::std::string, bool> get_mStringBool() &&;

  /** Glean { "field": "mStringBool" } */
  template <typename T_MyStruct_mStringBool_struct_setter = ::std::map<::std::string, bool>>
  [[deprecated("Use `FOO.mStringBool() = BAR;` instead of `FOO.set_mStringBool(BAR);`")]]
  ::std::map<::std::string, bool>& set_mStringBool(T_MyStruct_mStringBool_struct_setter&& mStringBool_) {
    mStringBool_ref() = std::forward<T_MyStruct_mStringBool_struct_setter>(mStringBool_);
    return __fbthrift_field_mStringBool;
  }
  /** Glean { "field": "mIntegerInteger" } */
  const ::std::map<::std::int32_t, ::std::int32_t>& get_mIntegerInteger() const&;
  /** Glean { "field": "mIntegerInteger" } */
  ::std::map<::std::int32_t, ::std::int32_t> get_mIntegerInteger() &&;

  /** Glean { "field": "mIntegerInteger" } */
  template <typename T_MyStruct_mIntegerInteger_struct_setter = ::std::map<::std::int32_t, ::std::int32_t>>
  [[deprecated("Use `FOO.mIntegerInteger() = BAR;` instead of `FOO.set_mIntegerInteger(BAR);`")]]
  ::std::map<::std::int32_t, ::std::int32_t>& set_mIntegerInteger(T_MyStruct_mIntegerInteger_struct_setter&& mIntegerInteger_) {
    mIntegerInteger_ref() = std::forward<T_MyStruct_mIntegerInteger_struct_setter>(mIntegerInteger_);
    return __fbthrift_field_mIntegerInteger;
  }
  /** Glean { "field": "mIntegerBool" } */
  const ::std::map<::std::int32_t, bool>& get_mIntegerBool() const&;
  /** Glean { "field": "mIntegerBool" } */
  ::std::map<::std::int32_t, bool> get_mIntegerBool() &&;

  /** Glean { "field": "mIntegerBool" } */
  template <typename T_MyStruct_mIntegerBool_struct_setter = ::std::map<::std::int32_t, bool>>
  [[deprecated("Use `FOO.mIntegerBool() = BAR;` instead of `FOO.set_mIntegerBool(BAR);`")]]
  ::std::map<::std::int32_t, bool>& set_mIntegerBool(T_MyStruct_mIntegerBool_struct_setter&& mIntegerBool_) {
    mIntegerBool_ref() = std::forward<T_MyStruct_mIntegerBool_struct_setter>(mIntegerBool_);
    return __fbthrift_field_mIntegerBool;
  }
  /** Glean { "field": "sShort" } */
  const ::std::set<::std::int16_t>& get_sShort() const&;
  /** Glean { "field": "sShort" } */
  ::std::set<::std::int16_t> get_sShort() &&;

  /** Glean { "field": "sShort" } */
  template <typename T_MyStruct_sShort_struct_setter = ::std::set<::std::int16_t>>
  [[deprecated("Use `FOO.sShort() = BAR;` instead of `FOO.set_sShort(BAR);`")]]
  ::std::set<::std::int16_t>& set_sShort(T_MyStruct_sShort_struct_setter&& sShort_) {
    sShort_ref() = std::forward<T_MyStruct_sShort_struct_setter>(sShort_);
    return __fbthrift_field_sShort;
  }
  /** Glean { "field": "sMyStruct" } */
  const ::std::set<::cpp2::MyStruct>& get_sMyStruct() const&;
  /** Glean { "field": "sMyStruct" } */
  ::std::set<::cpp2::MyStruct> get_sMyStruct() &&;

  /** Glean { "field": "sMyStruct" } */
  template <typename T_MyStruct_sMyStruct_struct_setter = ::std::set<::cpp2::MyStruct>>
  [[deprecated("Use `FOO.sMyStruct() = BAR;` instead of `FOO.set_sMyStruct(BAR);`")]]
  ::std::set<::cpp2::MyStruct>& set_sMyStruct(T_MyStruct_sMyStruct_struct_setter&& sMyStruct_) {
    sMyStruct_ref() = std::forward<T_MyStruct_sMyStruct_struct_setter>(sMyStruct_);
    return __fbthrift_field_sMyStruct;
  }
  /** Glean { "field": "sLong" } */
  const ::std::set<::std::int64_t>& get_sLong() const&;
  /** Glean { "field": "sLong" } */
  ::std::set<::std::int64_t> get_sLong() &&;

  /** Glean { "field": "sLong" } */
  template <typename T_MyStruct_sLong_struct_setter = ::std::set<::std::int64_t>>
  [[deprecated("Use `FOO.sLong() = BAR;` instead of `FOO.set_sLong(BAR);`")]]
  ::std::set<::std::int64_t>& set_sLong(T_MyStruct_sLong_struct_setter&& sLong_) {
    sLong_ref() = std::forward<T_MyStruct_sLong_struct_setter>(sLong_);
    return __fbthrift_field_sLong;
  }
  /** Glean { "field": "sString" } */
  const ::std::set<::std::string>& get_sString() const&;
  /** Glean { "field": "sString" } */
  ::std::set<::std::string> get_sString() &&;

  /** Glean { "field": "sString" } */
  template <typename T_MyStruct_sString_struct_setter = ::std::set<::std::string>>
  [[deprecated("Use `FOO.sString() = BAR;` instead of `FOO.set_sString(BAR);`")]]
  ::std::set<::std::string>& set_sString(T_MyStruct_sString_struct_setter&& sString_) {
    sString_ref() = std::forward<T_MyStruct_sString_struct_setter>(sString_);
    return __fbthrift_field_sString;
  }
  /** Glean { "field": "sByte" } */
  const ::std::set<::std::int8_t>& get_sByte() const&;
  /** Glean { "field": "sByte" } */
  ::std::set<::std::int8_t> get_sByte() &&;

  /** Glean { "field": "sByte" } */
  template <typename T_MyStruct_sByte_struct_setter = ::std::set<::std::int8_t>>
  [[deprecated("Use `FOO.sByte() = BAR;` instead of `FOO.set_sByte(BAR);`")]]
  ::std::set<::std::int8_t>& set_sByte(T_MyStruct_sByte_struct_setter&& sByte_) {
    sByte_ref() = std::forward<T_MyStruct_sByte_struct_setter>(sByte_);
    return __fbthrift_field_sByte;
  }
  /** Glean { "field": "mListList" } */
  const ::std::map<::std::vector<::std::int32_t>, ::std::vector<::std::int32_t>>& get_mListList() const&;
  /** Glean { "field": "mListList" } */
  ::std::map<::std::vector<::std::int32_t>, ::std::vector<::std::int32_t>> get_mListList() &&;

  /** Glean { "field": "mListList" } */
  template <typename T_MyStruct_mListList_struct_setter = ::std::map<::std::vector<::std::int32_t>, ::std::vector<::std::int32_t>>>
  [[deprecated("Use `FOO.mListList() = BAR;` instead of `FOO.set_mListList(BAR);`")]]
  ::std::map<::std::vector<::std::int32_t>, ::std::vector<::std::int32_t>>& set_mListList(T_MyStruct_mListList_struct_setter&& mListList_) {
    mListList_ref() = std::forward<T_MyStruct_mListList_struct_setter>(mListList_);
    return __fbthrift_field_mListList;
  }

  template <class Protocol_>
  unsigned long read(Protocol_* iprot);
  template <class Protocol_>
  uint32_t serializedSize(Protocol_ const* prot_) const;
  template <class Protocol_>
  uint32_t serializedSizeZC(Protocol_ const* prot_) const;
  template <class Protocol_>
  uint32_t write(Protocol_* prot_) const;

 private:
  template <class Protocol_>
  void readNoXfer(Protocol_* iprot);

  friend class ::apache::thrift::Cpp2Ops<MyStruct>;
  friend void swap(MyStruct& a, MyStruct& b);
};

template <class Protocol_>
unsigned long MyStruct::read(Protocol_* iprot) {
  auto _xferStart = iprot->getCursorPosition();
  readNoXfer(iprot);
  return iprot->getCursorPosition() - _xferStart;
}


/** Glean {"file": "thrift/compiler/test/fixtures/complex-struct/src/module.thrift", "name": "SimpleStruct", "kind": "struct" } */
class SimpleStruct final  {
 private:
  friend struct ::apache::thrift::detail::st::struct_private_access;
  template<class> friend struct ::apache::thrift::detail::invoke_reffer;

  //  used by a static_assert in the corresponding source
  static constexpr bool __fbthrift_cpp2_gen_json = false;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  static std::string_view __fbthrift_get_field_name(::apache::thrift::FieldOrdinal ord);
  static std::string_view __fbthrift_get_class_name();
  using __fbthrift_reflection_ident_list = folly::tag_t<
    ::apache::thrift::ident::age,
    ::apache::thrift::ident::name
  >;

  static constexpr std::int16_t __fbthrift_reflection_field_id_list[] = {0,1,2};
  using __fbthrift_reflection_type_tags = folly::tag_t<
    ::apache::thrift::type::i64_t,
    ::apache::thrift::type::string_t
  >;

  static constexpr std::size_t __fbthrift_field_size_v = 2;

  template<class T>
  using __fbthrift_id = ::apache::thrift::type::field_id<__fbthrift_reflection_field_id_list[folly::to_underlying(T::value)]>;

  template<class T>
  using __fbthrift_type_tag = ::apache::thrift::detail::at<__fbthrift_reflection_type_tags, T::value>;

  template<class T>
  using __fbthrift_ident = ::apache::thrift::detail::at<__fbthrift_reflection_ident_list, T::value>;

  template<class T> using __fbthrift_ordinal = ::apache::thrift::type::ordinal_tag<
    ::apache::thrift::detail::getFieldOrdinal<T,
                                              __fbthrift_reflection_ident_list,
                                              __fbthrift_reflection_type_tags>(
      __fbthrift_reflection_field_id_list
    )
  >;
  void __fbthrift_clear();
  void __fbthrift_clear_terse_fields();
  bool __fbthrift_is_empty() const;

 public:
  using __fbthrift_cpp2_type = SimpleStruct;
  static constexpr bool __fbthrift_cpp2_is_union =
    false;
  static constexpr bool __fbthrift_cpp2_uses_op_encode =
    false;


 public:

  SimpleStruct();

  // FragileConstructor for use in initialization lists only.
  [[deprecated("This constructor is deprecated")]]
  SimpleStruct(apache::thrift::FragileConstructor, ::std::int64_t age__arg, ::std::string name__arg);

  SimpleStruct(SimpleStruct&&) noexcept;

  SimpleStruct(const SimpleStruct& src);


  SimpleStruct& operator=(SimpleStruct&&) noexcept;
  SimpleStruct& operator=(const SimpleStruct& src);

  ~SimpleStruct();

 private:
  ::std::int64_t __fbthrift_field_age;
 private:
  ::std::string __fbthrift_field_name;
 private:
  apache::thrift::detail::isset_bitset<2, apache::thrift::detail::IssetBitsetOption::Unpacked> __isset;

 public:

  bool operator==(const SimpleStruct&) const;
  bool operator<(const SimpleStruct&) const;

  /** Glean { "field": "age" } */
  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> age_ref() const& {
    return {this->__fbthrift_field_age, __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "age" } */
  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> age_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_age), __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "age" } */
  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> age_ref() & {
    return {this->__fbthrift_field_age, __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "age" } */
  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> age_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_age), __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "age" } */
  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> age() const& {
    return {this->__fbthrift_field_age, __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "age" } */
  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> age() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_age), __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "age" } */
  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> age() & {
    return {this->__fbthrift_field_age, __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "age" } */
  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> age() && {
    return {static_cast<T&&>(this->__fbthrift_field_age), __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "name" } */
  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> name_ref() const& {
    return {this->__fbthrift_field_name, __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "name" } */
  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> name_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_name), __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "name" } */
  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> name_ref() & {
    return {this->__fbthrift_field_name, __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "name" } */
  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> name_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_name), __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "name" } */
  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> name() const& {
    return {this->__fbthrift_field_name, __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "name" } */
  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> name() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_name), __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "name" } */
  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> name() & {
    return {this->__fbthrift_field_name, __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "name" } */
  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> name() && {
    return {static_cast<T&&>(this->__fbthrift_field_name), __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "age" } */
  ::std::int64_t get_age() const {
    return __fbthrift_field_age;
  }

  /** Glean { "field": "age" } */
  [[deprecated("Use `FOO.age() = BAR;` instead of `FOO.set_age(BAR);`")]]
  ::std::int64_t& set_age(::std::int64_t age_) {
    age_ref() = age_;
    return __fbthrift_field_age;
  }

  /** Glean { "field": "name" } */
  const ::std::string& get_name() const& {
    return __fbthrift_field_name;
  }

  /** Glean { "field": "name" } */
  ::std::string get_name() && {
    return std::move(__fbthrift_field_name);
  }

  /** Glean { "field": "name" } */
  template <typename T_SimpleStruct_name_struct_setter = ::std::string>
  [[deprecated("Use `FOO.name() = BAR;` instead of `FOO.set_name(BAR);`")]]
  ::std::string& set_name(T_SimpleStruct_name_struct_setter&& name_) {
    name_ref() = std::forward<T_SimpleStruct_name_struct_setter>(name_);
    return __fbthrift_field_name;
  }

  template <class Protocol_>
  unsigned long read(Protocol_* iprot);
  template <class Protocol_>
  uint32_t serializedSize(Protocol_ const* prot_) const;
  template <class Protocol_>
  uint32_t serializedSizeZC(Protocol_ const* prot_) const;
  template <class Protocol_>
  uint32_t write(Protocol_* prot_) const;

 private:
  template <class Protocol_>
  void readNoXfer(Protocol_* iprot);

  friend class ::apache::thrift::Cpp2Ops<SimpleStruct>;
  friend void swap(SimpleStruct& a, SimpleStruct& b);
};

template <class Protocol_>
unsigned long SimpleStruct::read(Protocol_* iprot) {
  auto _xferStart = iprot->getCursorPosition();
  readNoXfer(iprot);
  return iprot->getCursorPosition() - _xferStart;
}


/** Glean {"file": "thrift/compiler/test/fixtures/complex-struct/src/module.thrift", "name": "ComplexNestedStruct", "kind": "struct" } */
class ComplexNestedStruct final  {
 private:
  friend struct ::apache::thrift::detail::st::struct_private_access;
  template<class> friend struct ::apache::thrift::detail::invoke_reffer;

  //  used by a static_assert in the corresponding source
  static constexpr bool __fbthrift_cpp2_gen_json = false;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  static std::string_view __fbthrift_get_field_name(::apache::thrift::FieldOrdinal ord);
  static std::string_view __fbthrift_get_class_name();
  using __fbthrift_reflection_ident_list = folly::tag_t<
    ::apache::thrift::ident::setOfSetOfInt,
    ::apache::thrift::ident::listofListOfListOfListOfEnum,
    ::apache::thrift::ident::listOfListOfMyStruct,
    ::apache::thrift::ident::setOfListOfListOfLong,
    ::apache::thrift::ident::setOfSetOfsetOfLong,
    ::apache::thrift::ident::mapStructListOfListOfLong,
    ::apache::thrift::ident::mKeyStructValInt,
    ::apache::thrift::ident::listOfMapKeyIntValInt,
    ::apache::thrift::ident::listOfMapKeyStrValList,
    ::apache::thrift::ident::mapKeySetValLong,
    ::apache::thrift::ident::mapKeyListValLong,
    ::apache::thrift::ident::mapKeyMapValMap,
    ::apache::thrift::ident::mapKeySetValMap,
    ::apache::thrift::ident::NestedMaps,
    ::apache::thrift::ident::mapKeyIntValList,
    ::apache::thrift::ident::mapKeyIntValSet,
    ::apache::thrift::ident::mapKeySetValInt,
    ::apache::thrift::ident::mapKeyListValSet
  >;

  static constexpr std::int16_t __fbthrift_reflection_field_id_list[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18};
  using __fbthrift_reflection_type_tags = folly::tag_t<
    ::apache::thrift::type::set<::apache::thrift::type::set<::apache::thrift::type::i32_t>>,
    ::apache::thrift::type::list<::apache::thrift::type::list<::apache::thrift::type::list<::apache::thrift::type::list<::apache::thrift::type::enum_t<::cpp2::MyEnum>>>>>,
    ::apache::thrift::type::list<::apache::thrift::type::list<::apache::thrift::type::struct_t<::cpp2::MyStruct>>>,
    ::apache::thrift::type::set<::apache::thrift::type::list<::apache::thrift::type::list<::apache::thrift::type::i64_t>>>,
    ::apache::thrift::type::set<::apache::thrift::type::set<::apache::thrift::type::set<::apache::thrift::type::i64_t>>>,
    ::apache::thrift::type::map<::apache::thrift::type::i32_t, ::apache::thrift::type::list<::apache::thrift::type::list<::apache::thrift::type::struct_t<::cpp2::MyStruct>>>>,
    ::apache::thrift::type::map<::apache::thrift::type::struct_t<::cpp2::MyStruct>, ::apache::thrift::type::i32_t>,
    ::apache::thrift::type::list<::apache::thrift::type::map<::apache::thrift::type::i32_t, ::apache::thrift::type::i32_t>>,
    ::apache::thrift::type::list<::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::list<::apache::thrift::type::struct_t<::cpp2::MyStruct>>>>,
    ::apache::thrift::type::map<::apache::thrift::type::set<::apache::thrift::type::i32_t>, ::apache::thrift::type::i64_t>,
    ::apache::thrift::type::map<::apache::thrift::type::list<::apache::thrift::type::string_t>, ::apache::thrift::type::i32_t>,
    ::apache::thrift::type::map<::apache::thrift::type::map<::apache::thrift::type::i32_t, ::apache::thrift::type::string_t>, ::apache::thrift::type::map<::apache::thrift::type::i32_t, ::apache::thrift::type::string_t>>,
    ::apache::thrift::type::map<::apache::thrift::type::set<::apache::thrift::type::list<::apache::thrift::type::i32_t>>, ::apache::thrift::type::map<::apache::thrift::type::list<::apache::thrift::type::set<::apache::thrift::type::string_t>>, ::apache::thrift::type::string_t>>,
    ::apache::thrift::type::map<::apache::thrift::type::map<::apache::thrift::type::map<::apache::thrift::type::i32_t, ::apache::thrift::type::string_t>, ::apache::thrift::type::string_t>, ::apache::thrift::type::map<::apache::thrift::type::i32_t, ::apache::thrift::type::string_t>>,
    ::apache::thrift::type::map<::apache::thrift::type::i32_t, ::apache::thrift::type::list<::apache::thrift::type::struct_t<::cpp2::MyStruct>>>,
    ::apache::thrift::type::map<::apache::thrift::type::i32_t, ::apache::thrift::type::set<::apache::thrift::type::bool_t>>,
    ::apache::thrift::type::map<::apache::thrift::type::set<::apache::thrift::type::bool_t>, ::apache::thrift::type::enum_t<::cpp2::MyEnum>>,
    ::apache::thrift::type::map<::apache::thrift::type::list<::apache::thrift::type::i32_t>, ::apache::thrift::type::set<::apache::thrift::type::map<::apache::thrift::type::double_t, ::apache::thrift::type::string_t>>>
  >;

  static constexpr std::size_t __fbthrift_field_size_v = 18;

  template<class T>
  using __fbthrift_id = ::apache::thrift::type::field_id<__fbthrift_reflection_field_id_list[folly::to_underlying(T::value)]>;

  template<class T>
  using __fbthrift_type_tag = ::apache::thrift::detail::at<__fbthrift_reflection_type_tags, T::value>;

  template<class T>
  using __fbthrift_ident = ::apache::thrift::detail::at<__fbthrift_reflection_ident_list, T::value>;

  template<class T> using __fbthrift_ordinal = ::apache::thrift::type::ordinal_tag<
    ::apache::thrift::detail::getFieldOrdinal<T,
                                              __fbthrift_reflection_ident_list,
                                              __fbthrift_reflection_type_tags>(
      __fbthrift_reflection_field_id_list
    )
  >;
  void __fbthrift_clear();
  void __fbthrift_clear_terse_fields();
  bool __fbthrift_is_empty() const;

 public:
  using __fbthrift_cpp2_type = ComplexNestedStruct;
  static constexpr bool __fbthrift_cpp2_is_union =
    false;
  static constexpr bool __fbthrift_cpp2_uses_op_encode =
    false;


 public:

  ComplexNestedStruct();

  // FragileConstructor for use in initialization lists only.
  [[deprecated("This constructor is deprecated")]]
  ComplexNestedStruct(apache::thrift::FragileConstructor, ::std::set<::std::set<::std::int32_t>> setOfSetOfInt__arg, ::std::vector<::std::vector<::std::vector<::std::vector<::cpp2::MyEnum>>>> listofListOfListOfListOfEnum__arg, ::std::vector<::std::vector<::cpp2::MyStruct>> listOfListOfMyStruct__arg, ::std::set<::std::vector<::std::vector<::std::int64_t>>> setOfListOfListOfLong__arg, ::std::set<::std::set<::std::set<::std::int64_t>>> setOfSetOfsetOfLong__arg, ::std::map<::std::int32_t, ::std::vector<::std::vector<::cpp2::MyStruct>>> mapStructListOfListOfLong__arg, ::std::map<::cpp2::MyStruct, ::std::int32_t> mKeyStructValInt__arg, ::std::vector<::std::map<::std::int32_t, ::std::int32_t>> listOfMapKeyIntValInt__arg, ::std::vector<::std::map<::std::string, ::std::vector<::cpp2::MyStruct>>> listOfMapKeyStrValList__arg, ::std::map<::std::set<::std::int32_t>, ::std::int64_t> mapKeySetValLong__arg, ::std::map<::std::vector<::std::string>, ::std::int32_t> mapKeyListValLong__arg, ::std::map<::std::map<::std::int32_t, ::std::string>, ::std::map<::std::int32_t, ::std::string>> mapKeyMapValMap__arg, ::std::map<::std::set<::std::vector<::std::int32_t>>, ::std::map<::std::vector<::std::set<::std::string>>, ::std::string>> mapKeySetValMap__arg, ::std::map<::std::map<::std::map<::std::int32_t, ::std::string>, ::std::string>, ::std::map<::std::int32_t, ::std::string>> NestedMaps__arg, ::std::map<::std::int32_t, ::std::vector<::cpp2::MyStruct>> mapKeyIntValList__arg, ::std::map<::std::int32_t, ::std::set<bool>> mapKeyIntValSet__arg, ::std::map<::std::set<bool>, ::cpp2::MyEnum> mapKeySetValInt__arg, ::std::map<::std::vector<::std::int32_t>, ::std::set<::std::map<double, ::std::string>>> mapKeyListValSet__arg);

  ComplexNestedStruct(ComplexNestedStruct&&) noexcept;

  ComplexNestedStruct(const ComplexNestedStruct& src);


  ComplexNestedStruct& operator=(ComplexNestedStruct&&) noexcept;
  ComplexNestedStruct& operator=(const ComplexNestedStruct& src);

  ~ComplexNestedStruct();

 private:
  ::std::set<::std::set<::std::int32_t>> __fbthrift_field_setOfSetOfInt;
 private:
  ::std::vector<::std::vector<::std::vector<::std::vector<::cpp2::MyEnum>>>> __fbthrift_field_listofListOfListOfListOfEnum;
 private:
  ::std::vector<::std::vector<::cpp2::MyStruct>> __fbthrift_field_listOfListOfMyStruct;
 private:
  ::std::set<::std::vector<::std::vector<::std::int64_t>>> __fbthrift_field_setOfListOfListOfLong;
 private:
  ::std::set<::std::set<::std::set<::std::int64_t>>> __fbthrift_field_setOfSetOfsetOfLong;
 private:
  ::std::map<::std::int32_t, ::std::vector<::std::vector<::cpp2::MyStruct>>> __fbthrift_field_mapStructListOfListOfLong;
 private:
  ::std::map<::cpp2::MyStruct, ::std::int32_t> __fbthrift_field_mKeyStructValInt;
 private:
  ::std::vector<::std::map<::std::int32_t, ::std::int32_t>> __fbthrift_field_listOfMapKeyIntValInt;
 private:
  ::std::vector<::std::map<::std::string, ::std::vector<::cpp2::MyStruct>>> __fbthrift_field_listOfMapKeyStrValList;
 private:
  ::std::map<::std::set<::std::int32_t>, ::std::int64_t> __fbthrift_field_mapKeySetValLong;
 private:
  ::std::map<::std::vector<::std::string>, ::std::int32_t> __fbthrift_field_mapKeyListValLong;
 private:
  ::std::map<::std::map<::std::int32_t, ::std::string>, ::std::map<::std::int32_t, ::std::string>> __fbthrift_field_mapKeyMapValMap;
 private:
  ::std::map<::std::set<::std::vector<::std::int32_t>>, ::std::map<::std::vector<::std::set<::std::string>>, ::std::string>> __fbthrift_field_mapKeySetValMap;
 private:
  ::std::map<::std::map<::std::map<::std::int32_t, ::std::string>, ::std::string>, ::std::map<::std::int32_t, ::std::string>> __fbthrift_field_NestedMaps;
 private:
  ::std::map<::std::int32_t, ::std::vector<::cpp2::MyStruct>> __fbthrift_field_mapKeyIntValList;
 private:
  ::std::map<::std::int32_t, ::std::set<bool>> __fbthrift_field_mapKeyIntValSet;
 private:
  ::std::map<::std::set<bool>, ::cpp2::MyEnum> __fbthrift_field_mapKeySetValInt;
 private:
  ::std::map<::std::vector<::std::int32_t>, ::std::set<::std::map<double, ::std::string>>> __fbthrift_field_mapKeyListValSet;
 private:
  apache::thrift::detail::isset_bitset<18, apache::thrift::detail::IssetBitsetOption::Unpacked> __isset;

 public:

  bool operator==(const ComplexNestedStruct&) const;
  bool operator<(const ComplexNestedStruct&) const;

  /** Glean { "field": "setOfSetOfInt" } */
  template <typename..., typename T = ::std::set<::std::set<::std::int32_t>>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> setOfSetOfInt_ref() const& {
    return {this->__fbthrift_field_setOfSetOfInt, __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "setOfSetOfInt" } */
  template <typename..., typename T = ::std::set<::std::set<::std::int32_t>>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> setOfSetOfInt_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_setOfSetOfInt), __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "setOfSetOfInt" } */
  template <typename..., typename T = ::std::set<::std::set<::std::int32_t>>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> setOfSetOfInt_ref() & {
    return {this->__fbthrift_field_setOfSetOfInt, __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "setOfSetOfInt" } */
  template <typename..., typename T = ::std::set<::std::set<::std::int32_t>>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> setOfSetOfInt_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_setOfSetOfInt), __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "setOfSetOfInt" } */
  template <typename..., typename T = ::std::set<::std::set<::std::int32_t>>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> setOfSetOfInt() const& {
    return {this->__fbthrift_field_setOfSetOfInt, __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "setOfSetOfInt" } */
  template <typename..., typename T = ::std::set<::std::set<::std::int32_t>>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> setOfSetOfInt() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_setOfSetOfInt), __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "setOfSetOfInt" } */
  template <typename..., typename T = ::std::set<::std::set<::std::int32_t>>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> setOfSetOfInt() & {
    return {this->__fbthrift_field_setOfSetOfInt, __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "setOfSetOfInt" } */
  template <typename..., typename T = ::std::set<::std::set<::std::int32_t>>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> setOfSetOfInt() && {
    return {static_cast<T&&>(this->__fbthrift_field_setOfSetOfInt), __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "listofListOfListOfListOfEnum" } */
  template <typename..., typename T = ::std::vector<::std::vector<::std::vector<::std::vector<::cpp2::MyEnum>>>>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> listofListOfListOfListOfEnum_ref() const& {
    return {this->__fbthrift_field_listofListOfListOfListOfEnum, __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "listofListOfListOfListOfEnum" } */
  template <typename..., typename T = ::std::vector<::std::vector<::std::vector<::std::vector<::cpp2::MyEnum>>>>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> listofListOfListOfListOfEnum_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_listofListOfListOfListOfEnum), __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "listofListOfListOfListOfEnum" } */
  template <typename..., typename T = ::std::vector<::std::vector<::std::vector<::std::vector<::cpp2::MyEnum>>>>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> listofListOfListOfListOfEnum_ref() & {
    return {this->__fbthrift_field_listofListOfListOfListOfEnum, __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "listofListOfListOfListOfEnum" } */
  template <typename..., typename T = ::std::vector<::std::vector<::std::vector<::std::vector<::cpp2::MyEnum>>>>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> listofListOfListOfListOfEnum_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_listofListOfListOfListOfEnum), __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "listofListOfListOfListOfEnum" } */
  template <typename..., typename T = ::std::vector<::std::vector<::std::vector<::std::vector<::cpp2::MyEnum>>>>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> listofListOfListOfListOfEnum() const& {
    return {this->__fbthrift_field_listofListOfListOfListOfEnum, __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "listofListOfListOfListOfEnum" } */
  template <typename..., typename T = ::std::vector<::std::vector<::std::vector<::std::vector<::cpp2::MyEnum>>>>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> listofListOfListOfListOfEnum() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_listofListOfListOfListOfEnum), __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "listofListOfListOfListOfEnum" } */
  template <typename..., typename T = ::std::vector<::std::vector<::std::vector<::std::vector<::cpp2::MyEnum>>>>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> listofListOfListOfListOfEnum() & {
    return {this->__fbthrift_field_listofListOfListOfListOfEnum, __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "listofListOfListOfListOfEnum" } */
  template <typename..., typename T = ::std::vector<::std::vector<::std::vector<::std::vector<::cpp2::MyEnum>>>>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> listofListOfListOfListOfEnum() && {
    return {static_cast<T&&>(this->__fbthrift_field_listofListOfListOfListOfEnum), __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "listOfListOfMyStruct" } */
  template <typename..., typename T = ::std::vector<::std::vector<::cpp2::MyStruct>>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> listOfListOfMyStruct_ref() const& {
    return {this->__fbthrift_field_listOfListOfMyStruct, __isset.at(2), __isset.bit(2)};
  }

  /** Glean { "field": "listOfListOfMyStruct" } */
  template <typename..., typename T = ::std::vector<::std::vector<::cpp2::MyStruct>>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> listOfListOfMyStruct_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_listOfListOfMyStruct), __isset.at(2), __isset.bit(2)};
  }

  /** Glean { "field": "listOfListOfMyStruct" } */
  template <typename..., typename T = ::std::vector<::std::vector<::cpp2::MyStruct>>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> listOfListOfMyStruct_ref() & {
    return {this->__fbthrift_field_listOfListOfMyStruct, __isset.at(2), __isset.bit(2)};
  }

  /** Glean { "field": "listOfListOfMyStruct" } */
  template <typename..., typename T = ::std::vector<::std::vector<::cpp2::MyStruct>>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> listOfListOfMyStruct_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_listOfListOfMyStruct), __isset.at(2), __isset.bit(2)};
  }

  /** Glean { "field": "listOfListOfMyStruct" } */
  template <typename..., typename T = ::std::vector<::std::vector<::cpp2::MyStruct>>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> listOfListOfMyStruct() const& {
    return {this->__fbthrift_field_listOfListOfMyStruct, __isset.at(2), __isset.bit(2)};
  }

  /** Glean { "field": "listOfListOfMyStruct" } */
  template <typename..., typename T = ::std::vector<::std::vector<::cpp2::MyStruct>>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> listOfListOfMyStruct() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_listOfListOfMyStruct), __isset.at(2), __isset.bit(2)};
  }

  /** Glean { "field": "listOfListOfMyStruct" } */
  template <typename..., typename T = ::std::vector<::std::vector<::cpp2::MyStruct>>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> listOfListOfMyStruct() & {
    return {this->__fbthrift_field_listOfListOfMyStruct, __isset.at(2), __isset.bit(2)};
  }

  /** Glean { "field": "listOfListOfMyStruct" } */
  template <typename..., typename T = ::std::vector<::std::vector<::cpp2::MyStruct>>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> listOfListOfMyStruct() && {
    return {static_cast<T&&>(this->__fbthrift_field_listOfListOfMyStruct), __isset.at(2), __isset.bit(2)};
  }

  /** Glean { "field": "setOfListOfListOfLong" } */
  template <typename..., typename T = ::std::set<::std::vector<::std::vector<::std::int64_t>>>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> setOfListOfListOfLong_ref() const& {
    return {this->__fbthrift_field_setOfListOfListOfLong, __isset.at(3), __isset.bit(3)};
  }

  /** Glean { "field": "setOfListOfListOfLong" } */
  template <typename..., typename T = ::std::set<::std::vector<::std::vector<::std::int64_t>>>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> setOfListOfListOfLong_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_setOfListOfListOfLong), __isset.at(3), __isset.bit(3)};
  }

  /** Glean { "field": "setOfListOfListOfLong" } */
  template <typename..., typename T = ::std::set<::std::vector<::std::vector<::std::int64_t>>>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> setOfListOfListOfLong_ref() & {
    return {this->__fbthrift_field_setOfListOfListOfLong, __isset.at(3), __isset.bit(3)};
  }

  /** Glean { "field": "setOfListOfListOfLong" } */
  template <typename..., typename T = ::std::set<::std::vector<::std::vector<::std::int64_t>>>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> setOfListOfListOfLong_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_setOfListOfListOfLong), __isset.at(3), __isset.bit(3)};
  }

  /** Glean { "field": "setOfListOfListOfLong" } */
  template <typename..., typename T = ::std::set<::std::vector<::std::vector<::std::int64_t>>>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> setOfListOfListOfLong() const& {
    return {this->__fbthrift_field_setOfListOfListOfLong, __isset.at(3), __isset.bit(3)};
  }

  /** Glean { "field": "setOfListOfListOfLong" } */
  template <typename..., typename T = ::std::set<::std::vector<::std::vector<::std::int64_t>>>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> setOfListOfListOfLong() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_setOfListOfListOfLong), __isset.at(3), __isset.bit(3)};
  }

  /** Glean { "field": "setOfListOfListOfLong" } */
  template <typename..., typename T = ::std::set<::std::vector<::std::vector<::std::int64_t>>>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> setOfListOfListOfLong() & {
    return {this->__fbthrift_field_setOfListOfListOfLong, __isset.at(3), __isset.bit(3)};
  }

  /** Glean { "field": "setOfListOfListOfLong" } */
  template <typename..., typename T = ::std::set<::std::vector<::std::vector<::std::int64_t>>>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> setOfListOfListOfLong() && {
    return {static_cast<T&&>(this->__fbthrift_field_setOfListOfListOfLong), __isset.at(3), __isset.bit(3)};
  }

  /** Glean { "field": "setOfSetOfsetOfLong" } */
  template <typename..., typename T = ::std::set<::std::set<::std::set<::std::int64_t>>>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> setOfSetOfsetOfLong_ref() const& {
    return {this->__fbthrift_field_setOfSetOfsetOfLong, __isset.at(4), __isset.bit(4)};
  }

  /** Glean { "field": "setOfSetOfsetOfLong" } */
  template <typename..., typename T = ::std::set<::std::set<::std::set<::std::int64_t>>>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> setOfSetOfsetOfLong_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_setOfSetOfsetOfLong), __isset.at(4), __isset.bit(4)};
  }

  /** Glean { "field": "setOfSetOfsetOfLong" } */
  template <typename..., typename T = ::std::set<::std::set<::std::set<::std::int64_t>>>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> setOfSetOfsetOfLong_ref() & {
    return {this->__fbthrift_field_setOfSetOfsetOfLong, __isset.at(4), __isset.bit(4)};
  }

  /** Glean { "field": "setOfSetOfsetOfLong" } */
  template <typename..., typename T = ::std::set<::std::set<::std::set<::std::int64_t>>>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> setOfSetOfsetOfLong_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_setOfSetOfsetOfLong), __isset.at(4), __isset.bit(4)};
  }

  /** Glean { "field": "setOfSetOfsetOfLong" } */
  template <typename..., typename T = ::std::set<::std::set<::std::set<::std::int64_t>>>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> setOfSetOfsetOfLong() const& {
    return {this->__fbthrift_field_setOfSetOfsetOfLong, __isset.at(4), __isset.bit(4)};
  }

  /** Glean { "field": "setOfSetOfsetOfLong" } */
  template <typename..., typename T = ::std::set<::std::set<::std::set<::std::int64_t>>>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> setOfSetOfsetOfLong() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_setOfSetOfsetOfLong), __isset.at(4), __isset.bit(4)};
  }

  /** Glean { "field": "setOfSetOfsetOfLong" } */
  template <typename..., typename T = ::std::set<::std::set<::std::set<::std::int64_t>>>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> setOfSetOfsetOfLong() & {
    return {this->__fbthrift_field_setOfSetOfsetOfLong, __isset.at(4), __isset.bit(4)};
  }

  /** Glean { "field": "setOfSetOfsetOfLong" } */
  template <typename..., typename T = ::std::set<::std::set<::std::set<::std::int64_t>>>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> setOfSetOfsetOfLong() && {
    return {static_cast<T&&>(this->__fbthrift_field_setOfSetOfsetOfLong), __isset.at(4), __isset.bit(4)};
  }

  /** Glean { "field": "mapStructListOfListOfLong" } */
  template <typename..., typename T = ::std::map<::std::int32_t, ::std::vector<::std::vector<::cpp2::MyStruct>>>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> mapStructListOfListOfLong_ref() const& {
    return {this->__fbthrift_field_mapStructListOfListOfLong, __isset.at(5), __isset.bit(5)};
  }

  /** Glean { "field": "mapStructListOfListOfLong" } */
  template <typename..., typename T = ::std::map<::std::int32_t, ::std::vector<::std::vector<::cpp2::MyStruct>>>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> mapStructListOfListOfLong_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_mapStructListOfListOfLong), __isset.at(5), __isset.bit(5)};
  }

  /** Glean { "field": "mapStructListOfListOfLong" } */
  template <typename..., typename T = ::std::map<::std::int32_t, ::std::vector<::std::vector<::cpp2::MyStruct>>>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> mapStructListOfListOfLong_ref() & {
    return {this->__fbthrift_field_mapStructListOfListOfLong, __isset.at(5), __isset.bit(5)};
  }

  /** Glean { "field": "mapStructListOfListOfLong" } */
  template <typename..., typename T = ::std::map<::std::int32_t, ::std::vector<::std::vector<::cpp2::MyStruct>>>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> mapStructListOfListOfLong_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_mapStructListOfListOfLong), __isset.at(5), __isset.bit(5)};
  }

  /** Glean { "field": "mapStructListOfListOfLong" } */
  template <typename..., typename T = ::std::map<::std::int32_t, ::std::vector<::std::vector<::cpp2::MyStruct>>>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> mapStructListOfListOfLong() const& {
    return {this->__fbthrift_field_mapStructListOfListOfLong, __isset.at(5), __isset.bit(5)};
  }

  /** Glean { "field": "mapStructListOfListOfLong" } */
  template <typename..., typename T = ::std::map<::std::int32_t, ::std::vector<::std::vector<::cpp2::MyStruct>>>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> mapStructListOfListOfLong() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_mapStructListOfListOfLong), __isset.at(5), __isset.bit(5)};
  }

  /** Glean { "field": "mapStructListOfListOfLong" } */
  template <typename..., typename T = ::std::map<::std::int32_t, ::std::vector<::std::vector<::cpp2::MyStruct>>>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> mapStructListOfListOfLong() & {
    return {this->__fbthrift_field_mapStructListOfListOfLong, __isset.at(5), __isset.bit(5)};
  }

  /** Glean { "field": "mapStructListOfListOfLong" } */
  template <typename..., typename T = ::std::map<::std::int32_t, ::std::vector<::std::vector<::cpp2::MyStruct>>>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> mapStructListOfListOfLong() && {
    return {static_cast<T&&>(this->__fbthrift_field_mapStructListOfListOfLong), __isset.at(5), __isset.bit(5)};
  }

  /** Glean { "field": "mKeyStructValInt" } */
  template <typename..., typename T = ::std::map<::cpp2::MyStruct, ::std::int32_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> mKeyStructValInt_ref() const& {
    return {this->__fbthrift_field_mKeyStructValInt, __isset.at(6), __isset.bit(6)};
  }

  /** Glean { "field": "mKeyStructValInt" } */
  template <typename..., typename T = ::std::map<::cpp2::MyStruct, ::std::int32_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> mKeyStructValInt_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_mKeyStructValInt), __isset.at(6), __isset.bit(6)};
  }

  /** Glean { "field": "mKeyStructValInt" } */
  template <typename..., typename T = ::std::map<::cpp2::MyStruct, ::std::int32_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> mKeyStructValInt_ref() & {
    return {this->__fbthrift_field_mKeyStructValInt, __isset.at(6), __isset.bit(6)};
  }

  /** Glean { "field": "mKeyStructValInt" } */
  template <typename..., typename T = ::std::map<::cpp2::MyStruct, ::std::int32_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> mKeyStructValInt_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_mKeyStructValInt), __isset.at(6), __isset.bit(6)};
  }

  /** Glean { "field": "mKeyStructValInt" } */
  template <typename..., typename T = ::std::map<::cpp2::MyStruct, ::std::int32_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> mKeyStructValInt() const& {
    return {this->__fbthrift_field_mKeyStructValInt, __isset.at(6), __isset.bit(6)};
  }

  /** Glean { "field": "mKeyStructValInt" } */
  template <typename..., typename T = ::std::map<::cpp2::MyStruct, ::std::int32_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> mKeyStructValInt() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_mKeyStructValInt), __isset.at(6), __isset.bit(6)};
  }

  /** Glean { "field": "mKeyStructValInt" } */
  template <typename..., typename T = ::std::map<::cpp2::MyStruct, ::std::int32_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> mKeyStructValInt() & {
    return {this->__fbthrift_field_mKeyStructValInt, __isset.at(6), __isset.bit(6)};
  }

  /** Glean { "field": "mKeyStructValInt" } */
  template <typename..., typename T = ::std::map<::cpp2::MyStruct, ::std::int32_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> mKeyStructValInt() && {
    return {static_cast<T&&>(this->__fbthrift_field_mKeyStructValInt), __isset.at(6), __isset.bit(6)};
  }

  /** Glean { "field": "listOfMapKeyIntValInt" } */
  template <typename..., typename T = ::std::vector<::std::map<::std::int32_t, ::std::int32_t>>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> listOfMapKeyIntValInt_ref() const& {
    return {this->__fbthrift_field_listOfMapKeyIntValInt, __isset.at(7), __isset.bit(7)};
  }

  /** Glean { "field": "listOfMapKeyIntValInt" } */
  template <typename..., typename T = ::std::vector<::std::map<::std::int32_t, ::std::int32_t>>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> listOfMapKeyIntValInt_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_listOfMapKeyIntValInt), __isset.at(7), __isset.bit(7)};
  }

  /** Glean { "field": "listOfMapKeyIntValInt" } */
  template <typename..., typename T = ::std::vector<::std::map<::std::int32_t, ::std::int32_t>>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> listOfMapKeyIntValInt_ref() & {
    return {this->__fbthrift_field_listOfMapKeyIntValInt, __isset.at(7), __isset.bit(7)};
  }

  /** Glean { "field": "listOfMapKeyIntValInt" } */
  template <typename..., typename T = ::std::vector<::std::map<::std::int32_t, ::std::int32_t>>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> listOfMapKeyIntValInt_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_listOfMapKeyIntValInt), __isset.at(7), __isset.bit(7)};
  }

  /** Glean { "field": "listOfMapKeyIntValInt" } */
  template <typename..., typename T = ::std::vector<::std::map<::std::int32_t, ::std::int32_t>>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> listOfMapKeyIntValInt() const& {
    return {this->__fbthrift_field_listOfMapKeyIntValInt, __isset.at(7), __isset.bit(7)};
  }

  /** Glean { "field": "listOfMapKeyIntValInt" } */
  template <typename..., typename T = ::std::vector<::std::map<::std::int32_t, ::std::int32_t>>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> listOfMapKeyIntValInt() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_listOfMapKeyIntValInt), __isset.at(7), __isset.bit(7)};
  }

  /** Glean { "field": "listOfMapKeyIntValInt" } */
  template <typename..., typename T = ::std::vector<::std::map<::std::int32_t, ::std::int32_t>>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> listOfMapKeyIntValInt() & {
    return {this->__fbthrift_field_listOfMapKeyIntValInt, __isset.at(7), __isset.bit(7)};
  }

  /** Glean { "field": "listOfMapKeyIntValInt" } */
  template <typename..., typename T = ::std::vector<::std::map<::std::int32_t, ::std::int32_t>>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> listOfMapKeyIntValInt() && {
    return {static_cast<T&&>(this->__fbthrift_field_listOfMapKeyIntValInt), __isset.at(7), __isset.bit(7)};
  }

  /** Glean { "field": "listOfMapKeyStrValList" } */
  template <typename..., typename T = ::std::vector<::std::map<::std::string, ::std::vector<::cpp2::MyStruct>>>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> listOfMapKeyStrValList_ref() const& {
    return {this->__fbthrift_field_listOfMapKeyStrValList, __isset.at(8), __isset.bit(8)};
  }

  /** Glean { "field": "listOfMapKeyStrValList" } */
  template <typename..., typename T = ::std::vector<::std::map<::std::string, ::std::vector<::cpp2::MyStruct>>>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> listOfMapKeyStrValList_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_listOfMapKeyStrValList), __isset.at(8), __isset.bit(8)};
  }

  /** Glean { "field": "listOfMapKeyStrValList" } */
  template <typename..., typename T = ::std::vector<::std::map<::std::string, ::std::vector<::cpp2::MyStruct>>>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> listOfMapKeyStrValList_ref() & {
    return {this->__fbthrift_field_listOfMapKeyStrValList, __isset.at(8), __isset.bit(8)};
  }

  /** Glean { "field": "listOfMapKeyStrValList" } */
  template <typename..., typename T = ::std::vector<::std::map<::std::string, ::std::vector<::cpp2::MyStruct>>>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> listOfMapKeyStrValList_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_listOfMapKeyStrValList), __isset.at(8), __isset.bit(8)};
  }

  /** Glean { "field": "listOfMapKeyStrValList" } */
  template <typename..., typename T = ::std::vector<::std::map<::std::string, ::std::vector<::cpp2::MyStruct>>>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> listOfMapKeyStrValList() const& {
    return {this->__fbthrift_field_listOfMapKeyStrValList, __isset.at(8), __isset.bit(8)};
  }

  /** Glean { "field": "listOfMapKeyStrValList" } */
  template <typename..., typename T = ::std::vector<::std::map<::std::string, ::std::vector<::cpp2::MyStruct>>>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> listOfMapKeyStrValList() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_listOfMapKeyStrValList), __isset.at(8), __isset.bit(8)};
  }

  /** Glean { "field": "listOfMapKeyStrValList" } */
  template <typename..., typename T = ::std::vector<::std::map<::std::string, ::std::vector<::cpp2::MyStruct>>>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> listOfMapKeyStrValList() & {
    return {this->__fbthrift_field_listOfMapKeyStrValList, __isset.at(8), __isset.bit(8)};
  }

  /** Glean { "field": "listOfMapKeyStrValList" } */
  template <typename..., typename T = ::std::vector<::std::map<::std::string, ::std::vector<::cpp2::MyStruct>>>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> listOfMapKeyStrValList() && {
    return {static_cast<T&&>(this->__fbthrift_field_listOfMapKeyStrValList), __isset.at(8), __isset.bit(8)};
  }

  /** Glean { "field": "mapKeySetValLong" } */
  template <typename..., typename T = ::std::map<::std::set<::std::int32_t>, ::std::int64_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> mapKeySetValLong_ref() const& {
    return {this->__fbthrift_field_mapKeySetValLong, __isset.at(9), __isset.bit(9)};
  }

  /** Glean { "field": "mapKeySetValLong" } */
  template <typename..., typename T = ::std::map<::std::set<::std::int32_t>, ::std::int64_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> mapKeySetValLong_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_mapKeySetValLong), __isset.at(9), __isset.bit(9)};
  }

  /** Glean { "field": "mapKeySetValLong" } */
  template <typename..., typename T = ::std::map<::std::set<::std::int32_t>, ::std::int64_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> mapKeySetValLong_ref() & {
    return {this->__fbthrift_field_mapKeySetValLong, __isset.at(9), __isset.bit(9)};
  }

  /** Glean { "field": "mapKeySetValLong" } */
  template <typename..., typename T = ::std::map<::std::set<::std::int32_t>, ::std::int64_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> mapKeySetValLong_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_mapKeySetValLong), __isset.at(9), __isset.bit(9)};
  }

  /** Glean { "field": "mapKeySetValLong" } */
  template <typename..., typename T = ::std::map<::std::set<::std::int32_t>, ::std::int64_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> mapKeySetValLong() const& {
    return {this->__fbthrift_field_mapKeySetValLong, __isset.at(9), __isset.bit(9)};
  }

  /** Glean { "field": "mapKeySetValLong" } */
  template <typename..., typename T = ::std::map<::std::set<::std::int32_t>, ::std::int64_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> mapKeySetValLong() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_mapKeySetValLong), __isset.at(9), __isset.bit(9)};
  }

  /** Glean { "field": "mapKeySetValLong" } */
  template <typename..., typename T = ::std::map<::std::set<::std::int32_t>, ::std::int64_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> mapKeySetValLong() & {
    return {this->__fbthrift_field_mapKeySetValLong, __isset.at(9), __isset.bit(9)};
  }

  /** Glean { "field": "mapKeySetValLong" } */
  template <typename..., typename T = ::std::map<::std::set<::std::int32_t>, ::std::int64_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> mapKeySetValLong() && {
    return {static_cast<T&&>(this->__fbthrift_field_mapKeySetValLong), __isset.at(9), __isset.bit(9)};
  }

  /** Glean { "field": "mapKeyListValLong" } */
  template <typename..., typename T = ::std::map<::std::vector<::std::string>, ::std::int32_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> mapKeyListValLong_ref() const& {
    return {this->__fbthrift_field_mapKeyListValLong, __isset.at(10), __isset.bit(10)};
  }

  /** Glean { "field": "mapKeyListValLong" } */
  template <typename..., typename T = ::std::map<::std::vector<::std::string>, ::std::int32_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> mapKeyListValLong_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_mapKeyListValLong), __isset.at(10), __isset.bit(10)};
  }

  /** Glean { "field": "mapKeyListValLong" } */
  template <typename..., typename T = ::std::map<::std::vector<::std::string>, ::std::int32_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> mapKeyListValLong_ref() & {
    return {this->__fbthrift_field_mapKeyListValLong, __isset.at(10), __isset.bit(10)};
  }

  /** Glean { "field": "mapKeyListValLong" } */
  template <typename..., typename T = ::std::map<::std::vector<::std::string>, ::std::int32_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> mapKeyListValLong_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_mapKeyListValLong), __isset.at(10), __isset.bit(10)};
  }

  /** Glean { "field": "mapKeyListValLong" } */
  template <typename..., typename T = ::std::map<::std::vector<::std::string>, ::std::int32_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> mapKeyListValLong() const& {
    return {this->__fbthrift_field_mapKeyListValLong, __isset.at(10), __isset.bit(10)};
  }

  /** Glean { "field": "mapKeyListValLong" } */
  template <typename..., typename T = ::std::map<::std::vector<::std::string>, ::std::int32_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> mapKeyListValLong() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_mapKeyListValLong), __isset.at(10), __isset.bit(10)};
  }

  /** Glean { "field": "mapKeyListValLong" } */
  template <typename..., typename T = ::std::map<::std::vector<::std::string>, ::std::int32_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> mapKeyListValLong() & {
    return {this->__fbthrift_field_mapKeyListValLong, __isset.at(10), __isset.bit(10)};
  }

  /** Glean { "field": "mapKeyListValLong" } */
  template <typename..., typename T = ::std::map<::std::vector<::std::string>, ::std::int32_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> mapKeyListValLong() && {
    return {static_cast<T&&>(this->__fbthrift_field_mapKeyListValLong), __isset.at(10), __isset.bit(10)};
  }

  /** Glean { "field": "mapKeyMapValMap" } */
  template <typename..., typename T = ::std::map<::std::map<::std::int32_t, ::std::string>, ::std::map<::std::int32_t, ::std::string>>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> mapKeyMapValMap_ref() const& {
    return {this->__fbthrift_field_mapKeyMapValMap, __isset.at(11), __isset.bit(11)};
  }

  /** Glean { "field": "mapKeyMapValMap" } */
  template <typename..., typename T = ::std::map<::std::map<::std::int32_t, ::std::string>, ::std::map<::std::int32_t, ::std::string>>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> mapKeyMapValMap_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_mapKeyMapValMap), __isset.at(11), __isset.bit(11)};
  }

  /** Glean { "field": "mapKeyMapValMap" } */
  template <typename..., typename T = ::std::map<::std::map<::std::int32_t, ::std::string>, ::std::map<::std::int32_t, ::std::string>>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> mapKeyMapValMap_ref() & {
    return {this->__fbthrift_field_mapKeyMapValMap, __isset.at(11), __isset.bit(11)};
  }

  /** Glean { "field": "mapKeyMapValMap" } */
  template <typename..., typename T = ::std::map<::std::map<::std::int32_t, ::std::string>, ::std::map<::std::int32_t, ::std::string>>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> mapKeyMapValMap_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_mapKeyMapValMap), __isset.at(11), __isset.bit(11)};
  }

  /** Glean { "field": "mapKeyMapValMap" } */
  template <typename..., typename T = ::std::map<::std::map<::std::int32_t, ::std::string>, ::std::map<::std::int32_t, ::std::string>>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> mapKeyMapValMap() const& {
    return {this->__fbthrift_field_mapKeyMapValMap, __isset.at(11), __isset.bit(11)};
  }

  /** Glean { "field": "mapKeyMapValMap" } */
  template <typename..., typename T = ::std::map<::std::map<::std::int32_t, ::std::string>, ::std::map<::std::int32_t, ::std::string>>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> mapKeyMapValMap() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_mapKeyMapValMap), __isset.at(11), __isset.bit(11)};
  }

  /** Glean { "field": "mapKeyMapValMap" } */
  template <typename..., typename T = ::std::map<::std::map<::std::int32_t, ::std::string>, ::std::map<::std::int32_t, ::std::string>>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> mapKeyMapValMap() & {
    return {this->__fbthrift_field_mapKeyMapValMap, __isset.at(11), __isset.bit(11)};
  }

  /** Glean { "field": "mapKeyMapValMap" } */
  template <typename..., typename T = ::std::map<::std::map<::std::int32_t, ::std::string>, ::std::map<::std::int32_t, ::std::string>>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> mapKeyMapValMap() && {
    return {static_cast<T&&>(this->__fbthrift_field_mapKeyMapValMap), __isset.at(11), __isset.bit(11)};
  }

  /** Glean { "field": "mapKeySetValMap" } */
  template <typename..., typename T = ::std::map<::std::set<::std::vector<::std::int32_t>>, ::std::map<::std::vector<::std::set<::std::string>>, ::std::string>>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> mapKeySetValMap_ref() const& {
    return {this->__fbthrift_field_mapKeySetValMap, __isset.at(12), __isset.bit(12)};
  }

  /** Glean { "field": "mapKeySetValMap" } */
  template <typename..., typename T = ::std::map<::std::set<::std::vector<::std::int32_t>>, ::std::map<::std::vector<::std::set<::std::string>>, ::std::string>>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> mapKeySetValMap_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_mapKeySetValMap), __isset.at(12), __isset.bit(12)};
  }

  /** Glean { "field": "mapKeySetValMap" } */
  template <typename..., typename T = ::std::map<::std::set<::std::vector<::std::int32_t>>, ::std::map<::std::vector<::std::set<::std::string>>, ::std::string>>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> mapKeySetValMap_ref() & {
    return {this->__fbthrift_field_mapKeySetValMap, __isset.at(12), __isset.bit(12)};
  }

  /** Glean { "field": "mapKeySetValMap" } */
  template <typename..., typename T = ::std::map<::std::set<::std::vector<::std::int32_t>>, ::std::map<::std::vector<::std::set<::std::string>>, ::std::string>>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> mapKeySetValMap_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_mapKeySetValMap), __isset.at(12), __isset.bit(12)};
  }

  /** Glean { "field": "mapKeySetValMap" } */
  template <typename..., typename T = ::std::map<::std::set<::std::vector<::std::int32_t>>, ::std::map<::std::vector<::std::set<::std::string>>, ::std::string>>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> mapKeySetValMap() const& {
    return {this->__fbthrift_field_mapKeySetValMap, __isset.at(12), __isset.bit(12)};
  }

  /** Glean { "field": "mapKeySetValMap" } */
  template <typename..., typename T = ::std::map<::std::set<::std::vector<::std::int32_t>>, ::std::map<::std::vector<::std::set<::std::string>>, ::std::string>>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> mapKeySetValMap() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_mapKeySetValMap), __isset.at(12), __isset.bit(12)};
  }

  /** Glean { "field": "mapKeySetValMap" } */
  template <typename..., typename T = ::std::map<::std::set<::std::vector<::std::int32_t>>, ::std::map<::std::vector<::std::set<::std::string>>, ::std::string>>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> mapKeySetValMap() & {
    return {this->__fbthrift_field_mapKeySetValMap, __isset.at(12), __isset.bit(12)};
  }

  /** Glean { "field": "mapKeySetValMap" } */
  template <typename..., typename T = ::std::map<::std::set<::std::vector<::std::int32_t>>, ::std::map<::std::vector<::std::set<::std::string>>, ::std::string>>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> mapKeySetValMap() && {
    return {static_cast<T&&>(this->__fbthrift_field_mapKeySetValMap), __isset.at(12), __isset.bit(12)};
  }

  /** Glean { "field": "NestedMaps" } */
  template <typename..., typename T = ::std::map<::std::map<::std::map<::std::int32_t, ::std::string>, ::std::string>, ::std::map<::std::int32_t, ::std::string>>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> NestedMaps_ref() const& {
    return {this->__fbthrift_field_NestedMaps, __isset.at(13), __isset.bit(13)};
  }

  /** Glean { "field": "NestedMaps" } */
  template <typename..., typename T = ::std::map<::std::map<::std::map<::std::int32_t, ::std::string>, ::std::string>, ::std::map<::std::int32_t, ::std::string>>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> NestedMaps_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_NestedMaps), __isset.at(13), __isset.bit(13)};
  }

  /** Glean { "field": "NestedMaps" } */
  template <typename..., typename T = ::std::map<::std::map<::std::map<::std::int32_t, ::std::string>, ::std::string>, ::std::map<::std::int32_t, ::std::string>>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> NestedMaps_ref() & {
    return {this->__fbthrift_field_NestedMaps, __isset.at(13), __isset.bit(13)};
  }

  /** Glean { "field": "NestedMaps" } */
  template <typename..., typename T = ::std::map<::std::map<::std::map<::std::int32_t, ::std::string>, ::std::string>, ::std::map<::std::int32_t, ::std::string>>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> NestedMaps_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_NestedMaps), __isset.at(13), __isset.bit(13)};
  }

  /** Glean { "field": "NestedMaps" } */
  template <typename..., typename T = ::std::map<::std::map<::std::map<::std::int32_t, ::std::string>, ::std::string>, ::std::map<::std::int32_t, ::std::string>>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> NestedMaps() const& {
    return {this->__fbthrift_field_NestedMaps, __isset.at(13), __isset.bit(13)};
  }

  /** Glean { "field": "NestedMaps" } */
  template <typename..., typename T = ::std::map<::std::map<::std::map<::std::int32_t, ::std::string>, ::std::string>, ::std::map<::std::int32_t, ::std::string>>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> NestedMaps() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_NestedMaps), __isset.at(13), __isset.bit(13)};
  }

  /** Glean { "field": "NestedMaps" } */
  template <typename..., typename T = ::std::map<::std::map<::std::map<::std::int32_t, ::std::string>, ::std::string>, ::std::map<::std::int32_t, ::std::string>>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> NestedMaps() & {
    return {this->__fbthrift_field_NestedMaps, __isset.at(13), __isset.bit(13)};
  }

  /** Glean { "field": "NestedMaps" } */
  template <typename..., typename T = ::std::map<::std::map<::std::map<::std::int32_t, ::std::string>, ::std::string>, ::std::map<::std::int32_t, ::std::string>>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> NestedMaps() && {
    return {static_cast<T&&>(this->__fbthrift_field_NestedMaps), __isset.at(13), __isset.bit(13)};
  }

  /** Glean { "field": "mapKeyIntValList" } */
  template <typename..., typename T = ::std::map<::std::int32_t, ::std::vector<::cpp2::MyStruct>>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> mapKeyIntValList_ref() const& {
    return {this->__fbthrift_field_mapKeyIntValList, __isset.at(14), __isset.bit(14)};
  }

  /** Glean { "field": "mapKeyIntValList" } */
  template <typename..., typename T = ::std::map<::std::int32_t, ::std::vector<::cpp2::MyStruct>>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> mapKeyIntValList_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_mapKeyIntValList), __isset.at(14), __isset.bit(14)};
  }

  /** Glean { "field": "mapKeyIntValList" } */
  template <typename..., typename T = ::std::map<::std::int32_t, ::std::vector<::cpp2::MyStruct>>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> mapKeyIntValList_ref() & {
    return {this->__fbthrift_field_mapKeyIntValList, __isset.at(14), __isset.bit(14)};
  }

  /** Glean { "field": "mapKeyIntValList" } */
  template <typename..., typename T = ::std::map<::std::int32_t, ::std::vector<::cpp2::MyStruct>>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> mapKeyIntValList_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_mapKeyIntValList), __isset.at(14), __isset.bit(14)};
  }

  /** Glean { "field": "mapKeyIntValList" } */
  template <typename..., typename T = ::std::map<::std::int32_t, ::std::vector<::cpp2::MyStruct>>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> mapKeyIntValList() const& {
    return {this->__fbthrift_field_mapKeyIntValList, __isset.at(14), __isset.bit(14)};
  }

  /** Glean { "field": "mapKeyIntValList" } */
  template <typename..., typename T = ::std::map<::std::int32_t, ::std::vector<::cpp2::MyStruct>>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> mapKeyIntValList() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_mapKeyIntValList), __isset.at(14), __isset.bit(14)};
  }

  /** Glean { "field": "mapKeyIntValList" } */
  template <typename..., typename T = ::std::map<::std::int32_t, ::std::vector<::cpp2::MyStruct>>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> mapKeyIntValList() & {
    return {this->__fbthrift_field_mapKeyIntValList, __isset.at(14), __isset.bit(14)};
  }

  /** Glean { "field": "mapKeyIntValList" } */
  template <typename..., typename T = ::std::map<::std::int32_t, ::std::vector<::cpp2::MyStruct>>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> mapKeyIntValList() && {
    return {static_cast<T&&>(this->__fbthrift_field_mapKeyIntValList), __isset.at(14), __isset.bit(14)};
  }

  /** Glean { "field": "mapKeyIntValSet" } */
  template <typename..., typename T = ::std::map<::std::int32_t, ::std::set<bool>>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> mapKeyIntValSet_ref() const& {
    return {this->__fbthrift_field_mapKeyIntValSet, __isset.at(15), __isset.bit(15)};
  }

  /** Glean { "field": "mapKeyIntValSet" } */
  template <typename..., typename T = ::std::map<::std::int32_t, ::std::set<bool>>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> mapKeyIntValSet_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_mapKeyIntValSet), __isset.at(15), __isset.bit(15)};
  }

  /** Glean { "field": "mapKeyIntValSet" } */
  template <typename..., typename T = ::std::map<::std::int32_t, ::std::set<bool>>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> mapKeyIntValSet_ref() & {
    return {this->__fbthrift_field_mapKeyIntValSet, __isset.at(15), __isset.bit(15)};
  }

  /** Glean { "field": "mapKeyIntValSet" } */
  template <typename..., typename T = ::std::map<::std::int32_t, ::std::set<bool>>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> mapKeyIntValSet_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_mapKeyIntValSet), __isset.at(15), __isset.bit(15)};
  }

  /** Glean { "field": "mapKeyIntValSet" } */
  template <typename..., typename T = ::std::map<::std::int32_t, ::std::set<bool>>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> mapKeyIntValSet() const& {
    return {this->__fbthrift_field_mapKeyIntValSet, __isset.at(15), __isset.bit(15)};
  }

  /** Glean { "field": "mapKeyIntValSet" } */
  template <typename..., typename T = ::std::map<::std::int32_t, ::std::set<bool>>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> mapKeyIntValSet() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_mapKeyIntValSet), __isset.at(15), __isset.bit(15)};
  }

  /** Glean { "field": "mapKeyIntValSet" } */
  template <typename..., typename T = ::std::map<::std::int32_t, ::std::set<bool>>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> mapKeyIntValSet() & {
    return {this->__fbthrift_field_mapKeyIntValSet, __isset.at(15), __isset.bit(15)};
  }

  /** Glean { "field": "mapKeyIntValSet" } */
  template <typename..., typename T = ::std::map<::std::int32_t, ::std::set<bool>>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> mapKeyIntValSet() && {
    return {static_cast<T&&>(this->__fbthrift_field_mapKeyIntValSet), __isset.at(15), __isset.bit(15)};
  }

  /** Glean { "field": "mapKeySetValInt" } */
  template <typename..., typename T = ::std::map<::std::set<bool>, ::cpp2::MyEnum>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> mapKeySetValInt_ref() const& {
    return {this->__fbthrift_field_mapKeySetValInt, __isset.at(16), __isset.bit(16)};
  }

  /** Glean { "field": "mapKeySetValInt" } */
  template <typename..., typename T = ::std::map<::std::set<bool>, ::cpp2::MyEnum>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> mapKeySetValInt_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_mapKeySetValInt), __isset.at(16), __isset.bit(16)};
  }

  /** Glean { "field": "mapKeySetValInt" } */
  template <typename..., typename T = ::std::map<::std::set<bool>, ::cpp2::MyEnum>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> mapKeySetValInt_ref() & {
    return {this->__fbthrift_field_mapKeySetValInt, __isset.at(16), __isset.bit(16)};
  }

  /** Glean { "field": "mapKeySetValInt" } */
  template <typename..., typename T = ::std::map<::std::set<bool>, ::cpp2::MyEnum>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> mapKeySetValInt_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_mapKeySetValInt), __isset.at(16), __isset.bit(16)};
  }

  /** Glean { "field": "mapKeySetValInt" } */
  template <typename..., typename T = ::std::map<::std::set<bool>, ::cpp2::MyEnum>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> mapKeySetValInt() const& {
    return {this->__fbthrift_field_mapKeySetValInt, __isset.at(16), __isset.bit(16)};
  }

  /** Glean { "field": "mapKeySetValInt" } */
  template <typename..., typename T = ::std::map<::std::set<bool>, ::cpp2::MyEnum>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> mapKeySetValInt() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_mapKeySetValInt), __isset.at(16), __isset.bit(16)};
  }

  /** Glean { "field": "mapKeySetValInt" } */
  template <typename..., typename T = ::std::map<::std::set<bool>, ::cpp2::MyEnum>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> mapKeySetValInt() & {
    return {this->__fbthrift_field_mapKeySetValInt, __isset.at(16), __isset.bit(16)};
  }

  /** Glean { "field": "mapKeySetValInt" } */
  template <typename..., typename T = ::std::map<::std::set<bool>, ::cpp2::MyEnum>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> mapKeySetValInt() && {
    return {static_cast<T&&>(this->__fbthrift_field_mapKeySetValInt), __isset.at(16), __isset.bit(16)};
  }

  /** Glean { "field": "mapKeyListValSet" } */
  template <typename..., typename T = ::std::map<::std::vector<::std::int32_t>, ::std::set<::std::map<double, ::std::string>>>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> mapKeyListValSet_ref() const& {
    return {this->__fbthrift_field_mapKeyListValSet, __isset.at(17), __isset.bit(17)};
  }

  /** Glean { "field": "mapKeyListValSet" } */
  template <typename..., typename T = ::std::map<::std::vector<::std::int32_t>, ::std::set<::std::map<double, ::std::string>>>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> mapKeyListValSet_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_mapKeyListValSet), __isset.at(17), __isset.bit(17)};
  }

  /** Glean { "field": "mapKeyListValSet" } */
  template <typename..., typename T = ::std::map<::std::vector<::std::int32_t>, ::std::set<::std::map<double, ::std::string>>>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> mapKeyListValSet_ref() & {
    return {this->__fbthrift_field_mapKeyListValSet, __isset.at(17), __isset.bit(17)};
  }

  /** Glean { "field": "mapKeyListValSet" } */
  template <typename..., typename T = ::std::map<::std::vector<::std::int32_t>, ::std::set<::std::map<double, ::std::string>>>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> mapKeyListValSet_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_mapKeyListValSet), __isset.at(17), __isset.bit(17)};
  }

  /** Glean { "field": "mapKeyListValSet" } */
  template <typename..., typename T = ::std::map<::std::vector<::std::int32_t>, ::std::set<::std::map<double, ::std::string>>>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> mapKeyListValSet() const& {
    return {this->__fbthrift_field_mapKeyListValSet, __isset.at(17), __isset.bit(17)};
  }

  /** Glean { "field": "mapKeyListValSet" } */
  template <typename..., typename T = ::std::map<::std::vector<::std::int32_t>, ::std::set<::std::map<double, ::std::string>>>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> mapKeyListValSet() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_mapKeyListValSet), __isset.at(17), __isset.bit(17)};
  }

  /** Glean { "field": "mapKeyListValSet" } */
  template <typename..., typename T = ::std::map<::std::vector<::std::int32_t>, ::std::set<::std::map<double, ::std::string>>>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> mapKeyListValSet() & {
    return {this->__fbthrift_field_mapKeyListValSet, __isset.at(17), __isset.bit(17)};
  }

  /** Glean { "field": "mapKeyListValSet" } */
  template <typename..., typename T = ::std::map<::std::vector<::std::int32_t>, ::std::set<::std::map<double, ::std::string>>>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> mapKeyListValSet() && {
    return {static_cast<T&&>(this->__fbthrift_field_mapKeyListValSet), __isset.at(17), __isset.bit(17)};
  }
  /** Glean { "field": "setOfSetOfInt" } */
  const ::std::set<::std::set<::std::int32_t>>& get_setOfSetOfInt() const&;
  /** Glean { "field": "setOfSetOfInt" } */
  ::std::set<::std::set<::std::int32_t>> get_setOfSetOfInt() &&;

  /** Glean { "field": "setOfSetOfInt" } */
  template <typename T_ComplexNestedStruct_setOfSetOfInt_struct_setter = ::std::set<::std::set<::std::int32_t>>>
  [[deprecated("Use `FOO.setOfSetOfInt() = BAR;` instead of `FOO.set_setOfSetOfInt(BAR);`")]]
  ::std::set<::std::set<::std::int32_t>>& set_setOfSetOfInt(T_ComplexNestedStruct_setOfSetOfInt_struct_setter&& setOfSetOfInt_) {
    setOfSetOfInt_ref() = std::forward<T_ComplexNestedStruct_setOfSetOfInt_struct_setter>(setOfSetOfInt_);
    return __fbthrift_field_setOfSetOfInt;
  }
  /** Glean { "field": "listofListOfListOfListOfEnum" } */
  const ::std::vector<::std::vector<::std::vector<::std::vector<::cpp2::MyEnum>>>>& get_listofListOfListOfListOfEnum() const&;
  /** Glean { "field": "listofListOfListOfListOfEnum" } */
  ::std::vector<::std::vector<::std::vector<::std::vector<::cpp2::MyEnum>>>> get_listofListOfListOfListOfEnum() &&;

  /** Glean { "field": "listofListOfListOfListOfEnum" } */
  template <typename T_ComplexNestedStruct_listofListOfListOfListOfEnum_struct_setter = ::std::vector<::std::vector<::std::vector<::std::vector<::cpp2::MyEnum>>>>>
  [[deprecated("Use `FOO.listofListOfListOfListOfEnum() = BAR;` instead of `FOO.set_listofListOfListOfListOfEnum(BAR);`")]]
  ::std::vector<::std::vector<::std::vector<::std::vector<::cpp2::MyEnum>>>>& set_listofListOfListOfListOfEnum(T_ComplexNestedStruct_listofListOfListOfListOfEnum_struct_setter&& listofListOfListOfListOfEnum_) {
    listofListOfListOfListOfEnum_ref() = std::forward<T_ComplexNestedStruct_listofListOfListOfListOfEnum_struct_setter>(listofListOfListOfListOfEnum_);
    return __fbthrift_field_listofListOfListOfListOfEnum;
  }
  /** Glean { "field": "listOfListOfMyStruct" } */
  const ::std::vector<::std::vector<::cpp2::MyStruct>>& get_listOfListOfMyStruct() const&;
  /** Glean { "field": "listOfListOfMyStruct" } */
  ::std::vector<::std::vector<::cpp2::MyStruct>> get_listOfListOfMyStruct() &&;

  /** Glean { "field": "listOfListOfMyStruct" } */
  template <typename T_ComplexNestedStruct_listOfListOfMyStruct_struct_setter = ::std::vector<::std::vector<::cpp2::MyStruct>>>
  [[deprecated("Use `FOO.listOfListOfMyStruct() = BAR;` instead of `FOO.set_listOfListOfMyStruct(BAR);`")]]
  ::std::vector<::std::vector<::cpp2::MyStruct>>& set_listOfListOfMyStruct(T_ComplexNestedStruct_listOfListOfMyStruct_struct_setter&& listOfListOfMyStruct_) {
    listOfListOfMyStruct_ref() = std::forward<T_ComplexNestedStruct_listOfListOfMyStruct_struct_setter>(listOfListOfMyStruct_);
    return __fbthrift_field_listOfListOfMyStruct;
  }
  /** Glean { "field": "setOfListOfListOfLong" } */
  const ::std::set<::std::vector<::std::vector<::std::int64_t>>>& get_setOfListOfListOfLong() const&;
  /** Glean { "field": "setOfListOfListOfLong" } */
  ::std::set<::std::vector<::std::vector<::std::int64_t>>> get_setOfListOfListOfLong() &&;

  /** Glean { "field": "setOfListOfListOfLong" } */
  template <typename T_ComplexNestedStruct_setOfListOfListOfLong_struct_setter = ::std::set<::std::vector<::std::vector<::std::int64_t>>>>
  [[deprecated("Use `FOO.setOfListOfListOfLong() = BAR;` instead of `FOO.set_setOfListOfListOfLong(BAR);`")]]
  ::std::set<::std::vector<::std::vector<::std::int64_t>>>& set_setOfListOfListOfLong(T_ComplexNestedStruct_setOfListOfListOfLong_struct_setter&& setOfListOfListOfLong_) {
    setOfListOfListOfLong_ref() = std::forward<T_ComplexNestedStruct_setOfListOfListOfLong_struct_setter>(setOfListOfListOfLong_);
    return __fbthrift_field_setOfListOfListOfLong;
  }
  /** Glean { "field": "setOfSetOfsetOfLong" } */
  const ::std::set<::std::set<::std::set<::std::int64_t>>>& get_setOfSetOfsetOfLong() const&;
  /** Glean { "field": "setOfSetOfsetOfLong" } */
  ::std::set<::std::set<::std::set<::std::int64_t>>> get_setOfSetOfsetOfLong() &&;

  /** Glean { "field": "setOfSetOfsetOfLong" } */
  template <typename T_ComplexNestedStruct_setOfSetOfsetOfLong_struct_setter = ::std::set<::std::set<::std::set<::std::int64_t>>>>
  [[deprecated("Use `FOO.setOfSetOfsetOfLong() = BAR;` instead of `FOO.set_setOfSetOfsetOfLong(BAR);`")]]
  ::std::set<::std::set<::std::set<::std::int64_t>>>& set_setOfSetOfsetOfLong(T_ComplexNestedStruct_setOfSetOfsetOfLong_struct_setter&& setOfSetOfsetOfLong_) {
    setOfSetOfsetOfLong_ref() = std::forward<T_ComplexNestedStruct_setOfSetOfsetOfLong_struct_setter>(setOfSetOfsetOfLong_);
    return __fbthrift_field_setOfSetOfsetOfLong;
  }
  /** Glean { "field": "mapStructListOfListOfLong" } */
  const ::std::map<::std::int32_t, ::std::vector<::std::vector<::cpp2::MyStruct>>>& get_mapStructListOfListOfLong() const&;
  /** Glean { "field": "mapStructListOfListOfLong" } */
  ::std::map<::std::int32_t, ::std::vector<::std::vector<::cpp2::MyStruct>>> get_mapStructListOfListOfLong() &&;

  /** Glean { "field": "mapStructListOfListOfLong" } */
  template <typename T_ComplexNestedStruct_mapStructListOfListOfLong_struct_setter = ::std::map<::std::int32_t, ::std::vector<::std::vector<::cpp2::MyStruct>>>>
  [[deprecated("Use `FOO.mapStructListOfListOfLong() = BAR;` instead of `FOO.set_mapStructListOfListOfLong(BAR);`")]]
  ::std::map<::std::int32_t, ::std::vector<::std::vector<::cpp2::MyStruct>>>& set_mapStructListOfListOfLong(T_ComplexNestedStruct_mapStructListOfListOfLong_struct_setter&& mapStructListOfListOfLong_) {
    mapStructListOfListOfLong_ref() = std::forward<T_ComplexNestedStruct_mapStructListOfListOfLong_struct_setter>(mapStructListOfListOfLong_);
    return __fbthrift_field_mapStructListOfListOfLong;
  }
  /** Glean { "field": "mKeyStructValInt" } */
  const ::std::map<::cpp2::MyStruct, ::std::int32_t>& get_mKeyStructValInt() const&;
  /** Glean { "field": "mKeyStructValInt" } */
  ::std::map<::cpp2::MyStruct, ::std::int32_t> get_mKeyStructValInt() &&;

  /** Glean { "field": "mKeyStructValInt" } */
  template <typename T_ComplexNestedStruct_mKeyStructValInt_struct_setter = ::std::map<::cpp2::MyStruct, ::std::int32_t>>
  [[deprecated("Use `FOO.mKeyStructValInt() = BAR;` instead of `FOO.set_mKeyStructValInt(BAR);`")]]
  ::std::map<::cpp2::MyStruct, ::std::int32_t>& set_mKeyStructValInt(T_ComplexNestedStruct_mKeyStructValInt_struct_setter&& mKeyStructValInt_) {
    mKeyStructValInt_ref() = std::forward<T_ComplexNestedStruct_mKeyStructValInt_struct_setter>(mKeyStructValInt_);
    return __fbthrift_field_mKeyStructValInt;
  }
  /** Glean { "field": "listOfMapKeyIntValInt" } */
  const ::std::vector<::std::map<::std::int32_t, ::std::int32_t>>& get_listOfMapKeyIntValInt() const&;
  /** Glean { "field": "listOfMapKeyIntValInt" } */
  ::std::vector<::std::map<::std::int32_t, ::std::int32_t>> get_listOfMapKeyIntValInt() &&;

  /** Glean { "field": "listOfMapKeyIntValInt" } */
  template <typename T_ComplexNestedStruct_listOfMapKeyIntValInt_struct_setter = ::std::vector<::std::map<::std::int32_t, ::std::int32_t>>>
  [[deprecated("Use `FOO.listOfMapKeyIntValInt() = BAR;` instead of `FOO.set_listOfMapKeyIntValInt(BAR);`")]]
  ::std::vector<::std::map<::std::int32_t, ::std::int32_t>>& set_listOfMapKeyIntValInt(T_ComplexNestedStruct_listOfMapKeyIntValInt_struct_setter&& listOfMapKeyIntValInt_) {
    listOfMapKeyIntValInt_ref() = std::forward<T_ComplexNestedStruct_listOfMapKeyIntValInt_struct_setter>(listOfMapKeyIntValInt_);
    return __fbthrift_field_listOfMapKeyIntValInt;
  }
  /** Glean { "field": "listOfMapKeyStrValList" } */
  const ::std::vector<::std::map<::std::string, ::std::vector<::cpp2::MyStruct>>>& get_listOfMapKeyStrValList() const&;
  /** Glean { "field": "listOfMapKeyStrValList" } */
  ::std::vector<::std::map<::std::string, ::std::vector<::cpp2::MyStruct>>> get_listOfMapKeyStrValList() &&;

  /** Glean { "field": "listOfMapKeyStrValList" } */
  template <typename T_ComplexNestedStruct_listOfMapKeyStrValList_struct_setter = ::std::vector<::std::map<::std::string, ::std::vector<::cpp2::MyStruct>>>>
  [[deprecated("Use `FOO.listOfMapKeyStrValList() = BAR;` instead of `FOO.set_listOfMapKeyStrValList(BAR);`")]]
  ::std::vector<::std::map<::std::string, ::std::vector<::cpp2::MyStruct>>>& set_listOfMapKeyStrValList(T_ComplexNestedStruct_listOfMapKeyStrValList_struct_setter&& listOfMapKeyStrValList_) {
    listOfMapKeyStrValList_ref() = std::forward<T_ComplexNestedStruct_listOfMapKeyStrValList_struct_setter>(listOfMapKeyStrValList_);
    return __fbthrift_field_listOfMapKeyStrValList;
  }
  /** Glean { "field": "mapKeySetValLong" } */
  const ::std::map<::std::set<::std::int32_t>, ::std::int64_t>& get_mapKeySetValLong() const&;
  /** Glean { "field": "mapKeySetValLong" } */
  ::std::map<::std::set<::std::int32_t>, ::std::int64_t> get_mapKeySetValLong() &&;

  /** Glean { "field": "mapKeySetValLong" } */
  template <typename T_ComplexNestedStruct_mapKeySetValLong_struct_setter = ::std::map<::std::set<::std::int32_t>, ::std::int64_t>>
  [[deprecated("Use `FOO.mapKeySetValLong() = BAR;` instead of `FOO.set_mapKeySetValLong(BAR);`")]]
  ::std::map<::std::set<::std::int32_t>, ::std::int64_t>& set_mapKeySetValLong(T_ComplexNestedStruct_mapKeySetValLong_struct_setter&& mapKeySetValLong_) {
    mapKeySetValLong_ref() = std::forward<T_ComplexNestedStruct_mapKeySetValLong_struct_setter>(mapKeySetValLong_);
    return __fbthrift_field_mapKeySetValLong;
  }
  /** Glean { "field": "mapKeyListValLong" } */
  const ::std::map<::std::vector<::std::string>, ::std::int32_t>& get_mapKeyListValLong() const&;
  /** Glean { "field": "mapKeyListValLong" } */
  ::std::map<::std::vector<::std::string>, ::std::int32_t> get_mapKeyListValLong() &&;

  /** Glean { "field": "mapKeyListValLong" } */
  template <typename T_ComplexNestedStruct_mapKeyListValLong_struct_setter = ::std::map<::std::vector<::std::string>, ::std::int32_t>>
  [[deprecated("Use `FOO.mapKeyListValLong() = BAR;` instead of `FOO.set_mapKeyListValLong(BAR);`")]]
  ::std::map<::std::vector<::std::string>, ::std::int32_t>& set_mapKeyListValLong(T_ComplexNestedStruct_mapKeyListValLong_struct_setter&& mapKeyListValLong_) {
    mapKeyListValLong_ref() = std::forward<T_ComplexNestedStruct_mapKeyListValLong_struct_setter>(mapKeyListValLong_);
    return __fbthrift_field_mapKeyListValLong;
  }
  /** Glean { "field": "mapKeyMapValMap" } */
  const ::std::map<::std::map<::std::int32_t, ::std::string>, ::std::map<::std::int32_t, ::std::string>>& get_mapKeyMapValMap() const&;
  /** Glean { "field": "mapKeyMapValMap" } */
  ::std::map<::std::map<::std::int32_t, ::std::string>, ::std::map<::std::int32_t, ::std::string>> get_mapKeyMapValMap() &&;

  /** Glean { "field": "mapKeyMapValMap" } */
  template <typename T_ComplexNestedStruct_mapKeyMapValMap_struct_setter = ::std::map<::std::map<::std::int32_t, ::std::string>, ::std::map<::std::int32_t, ::std::string>>>
  [[deprecated("Use `FOO.mapKeyMapValMap() = BAR;` instead of `FOO.set_mapKeyMapValMap(BAR);`")]]
  ::std::map<::std::map<::std::int32_t, ::std::string>, ::std::map<::std::int32_t, ::std::string>>& set_mapKeyMapValMap(T_ComplexNestedStruct_mapKeyMapValMap_struct_setter&& mapKeyMapValMap_) {
    mapKeyMapValMap_ref() = std::forward<T_ComplexNestedStruct_mapKeyMapValMap_struct_setter>(mapKeyMapValMap_);
    return __fbthrift_field_mapKeyMapValMap;
  }
  /** Glean { "field": "mapKeySetValMap" } */
  const ::std::map<::std::set<::std::vector<::std::int32_t>>, ::std::map<::std::vector<::std::set<::std::string>>, ::std::string>>& get_mapKeySetValMap() const&;
  /** Glean { "field": "mapKeySetValMap" } */
  ::std::map<::std::set<::std::vector<::std::int32_t>>, ::std::map<::std::vector<::std::set<::std::string>>, ::std::string>> get_mapKeySetValMap() &&;

  /** Glean { "field": "mapKeySetValMap" } */
  template <typename T_ComplexNestedStruct_mapKeySetValMap_struct_setter = ::std::map<::std::set<::std::vector<::std::int32_t>>, ::std::map<::std::vector<::std::set<::std::string>>, ::std::string>>>
  [[deprecated("Use `FOO.mapKeySetValMap() = BAR;` instead of `FOO.set_mapKeySetValMap(BAR);`")]]
  ::std::map<::std::set<::std::vector<::std::int32_t>>, ::std::map<::std::vector<::std::set<::std::string>>, ::std::string>>& set_mapKeySetValMap(T_ComplexNestedStruct_mapKeySetValMap_struct_setter&& mapKeySetValMap_) {
    mapKeySetValMap_ref() = std::forward<T_ComplexNestedStruct_mapKeySetValMap_struct_setter>(mapKeySetValMap_);
    return __fbthrift_field_mapKeySetValMap;
  }
  /** Glean { "field": "NestedMaps" } */
  const ::std::map<::std::map<::std::map<::std::int32_t, ::std::string>, ::std::string>, ::std::map<::std::int32_t, ::std::string>>& get_NestedMaps() const&;
  /** Glean { "field": "NestedMaps" } */
  ::std::map<::std::map<::std::map<::std::int32_t, ::std::string>, ::std::string>, ::std::map<::std::int32_t, ::std::string>> get_NestedMaps() &&;

  /** Glean { "field": "NestedMaps" } */
  template <typename T_ComplexNestedStruct_NestedMaps_struct_setter = ::std::map<::std::map<::std::map<::std::int32_t, ::std::string>, ::std::string>, ::std::map<::std::int32_t, ::std::string>>>
  [[deprecated("Use `FOO.NestedMaps() = BAR;` instead of `FOO.set_NestedMaps(BAR);`")]]
  ::std::map<::std::map<::std::map<::std::int32_t, ::std::string>, ::std::string>, ::std::map<::std::int32_t, ::std::string>>& set_NestedMaps(T_ComplexNestedStruct_NestedMaps_struct_setter&& NestedMaps_) {
    NestedMaps_ref() = std::forward<T_ComplexNestedStruct_NestedMaps_struct_setter>(NestedMaps_);
    return __fbthrift_field_NestedMaps;
  }
  /** Glean { "field": "mapKeyIntValList" } */
  const ::std::map<::std::int32_t, ::std::vector<::cpp2::MyStruct>>& get_mapKeyIntValList() const&;
  /** Glean { "field": "mapKeyIntValList" } */
  ::std::map<::std::int32_t, ::std::vector<::cpp2::MyStruct>> get_mapKeyIntValList() &&;

  /** Glean { "field": "mapKeyIntValList" } */
  template <typename T_ComplexNestedStruct_mapKeyIntValList_struct_setter = ::std::map<::std::int32_t, ::std::vector<::cpp2::MyStruct>>>
  [[deprecated("Use `FOO.mapKeyIntValList() = BAR;` instead of `FOO.set_mapKeyIntValList(BAR);`")]]
  ::std::map<::std::int32_t, ::std::vector<::cpp2::MyStruct>>& set_mapKeyIntValList(T_ComplexNestedStruct_mapKeyIntValList_struct_setter&& mapKeyIntValList_) {
    mapKeyIntValList_ref() = std::forward<T_ComplexNestedStruct_mapKeyIntValList_struct_setter>(mapKeyIntValList_);
    return __fbthrift_field_mapKeyIntValList;
  }
  /** Glean { "field": "mapKeyIntValSet" } */
  const ::std::map<::std::int32_t, ::std::set<bool>>& get_mapKeyIntValSet() const&;
  /** Glean { "field": "mapKeyIntValSet" } */
  ::std::map<::std::int32_t, ::std::set<bool>> get_mapKeyIntValSet() &&;

  /** Glean { "field": "mapKeyIntValSet" } */
  template <typename T_ComplexNestedStruct_mapKeyIntValSet_struct_setter = ::std::map<::std::int32_t, ::std::set<bool>>>
  [[deprecated("Use `FOO.mapKeyIntValSet() = BAR;` instead of `FOO.set_mapKeyIntValSet(BAR);`")]]
  ::std::map<::std::int32_t, ::std::set<bool>>& set_mapKeyIntValSet(T_ComplexNestedStruct_mapKeyIntValSet_struct_setter&& mapKeyIntValSet_) {
    mapKeyIntValSet_ref() = std::forward<T_ComplexNestedStruct_mapKeyIntValSet_struct_setter>(mapKeyIntValSet_);
    return __fbthrift_field_mapKeyIntValSet;
  }
  /** Glean { "field": "mapKeySetValInt" } */
  const ::std::map<::std::set<bool>, ::cpp2::MyEnum>& get_mapKeySetValInt() const&;
  /** Glean { "field": "mapKeySetValInt" } */
  ::std::map<::std::set<bool>, ::cpp2::MyEnum> get_mapKeySetValInt() &&;

  /** Glean { "field": "mapKeySetValInt" } */
  template <typename T_ComplexNestedStruct_mapKeySetValInt_struct_setter = ::std::map<::std::set<bool>, ::cpp2::MyEnum>>
  [[deprecated("Use `FOO.mapKeySetValInt() = BAR;` instead of `FOO.set_mapKeySetValInt(BAR);`")]]
  ::std::map<::std::set<bool>, ::cpp2::MyEnum>& set_mapKeySetValInt(T_ComplexNestedStruct_mapKeySetValInt_struct_setter&& mapKeySetValInt_) {
    mapKeySetValInt_ref() = std::forward<T_ComplexNestedStruct_mapKeySetValInt_struct_setter>(mapKeySetValInt_);
    return __fbthrift_field_mapKeySetValInt;
  }
  /** Glean { "field": "mapKeyListValSet" } */
  const ::std::map<::std::vector<::std::int32_t>, ::std::set<::std::map<double, ::std::string>>>& get_mapKeyListValSet() const&;
  /** Glean { "field": "mapKeyListValSet" } */
  ::std::map<::std::vector<::std::int32_t>, ::std::set<::std::map<double, ::std::string>>> get_mapKeyListValSet() &&;

  /** Glean { "field": "mapKeyListValSet" } */
  template <typename T_ComplexNestedStruct_mapKeyListValSet_struct_setter = ::std::map<::std::vector<::std::int32_t>, ::std::set<::std::map<double, ::std::string>>>>
  [[deprecated("Use `FOO.mapKeyListValSet() = BAR;` instead of `FOO.set_mapKeyListValSet(BAR);`")]]
  ::std::map<::std::vector<::std::int32_t>, ::std::set<::std::map<double, ::std::string>>>& set_mapKeyListValSet(T_ComplexNestedStruct_mapKeyListValSet_struct_setter&& mapKeyListValSet_) {
    mapKeyListValSet_ref() = std::forward<T_ComplexNestedStruct_mapKeyListValSet_struct_setter>(mapKeyListValSet_);
    return __fbthrift_field_mapKeyListValSet;
  }

  template <class Protocol_>
  unsigned long read(Protocol_* iprot);
  template <class Protocol_>
  uint32_t serializedSize(Protocol_ const* prot_) const;
  template <class Protocol_>
  uint32_t serializedSizeZC(Protocol_ const* prot_) const;
  template <class Protocol_>
  uint32_t write(Protocol_* prot_) const;

 private:
  template <class Protocol_>
  void readNoXfer(Protocol_* iprot);

  friend class ::apache::thrift::Cpp2Ops<ComplexNestedStruct>;
  friend void swap(ComplexNestedStruct& a, ComplexNestedStruct& b);
};

template <class Protocol_>
unsigned long ComplexNestedStruct::read(Protocol_* iprot) {
  auto _xferStart = iprot->getCursorPosition();
  readNoXfer(iprot);
  return iprot->getCursorPosition() - _xferStart;
}


/** Glean {"file": "thrift/compiler/test/fixtures/complex-struct/src/module.thrift", "name": "MyUnion", "kind": "union" } */
class MyUnion final  {
 private:
  friend struct ::apache::thrift::detail::st::struct_private_access;
  template<class> friend struct ::apache::thrift::detail::invoke_reffer;

  //  used by a static_assert in the corresponding source
  static constexpr bool __fbthrift_cpp2_gen_json = false;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  static std::string_view __fbthrift_get_field_name(::apache::thrift::FieldOrdinal ord);
  static std::string_view __fbthrift_get_class_name();
  using __fbthrift_reflection_ident_list = folly::tag_t<
    ::apache::thrift::ident::myEnum,
    ::apache::thrift::ident::myStruct,
    ::apache::thrift::ident::myDataItem,
    ::apache::thrift::ident::complexNestedStruct,
    ::apache::thrift::ident::longValue,
    ::apache::thrift::ident::intValue
  >;

  static constexpr std::int16_t __fbthrift_reflection_field_id_list[] = {0,1,2,3,4,5,6};
  using __fbthrift_reflection_type_tags = folly::tag_t<
    ::apache::thrift::type::enum_t<::cpp2::MyEnum>,
    ::apache::thrift::type::struct_t<::cpp2::MyStruct>,
    ::apache::thrift::type::struct_t<::cpp2::MyDataItem>,
    ::apache::thrift::type::struct_t<::cpp2::ComplexNestedStruct>,
    ::apache::thrift::type::i64_t,
    ::apache::thrift::type::i32_t
  >;

  static constexpr std::size_t __fbthrift_field_size_v = 6;

  template<class T>
  using __fbthrift_id = ::apache::thrift::type::field_id<__fbthrift_reflection_field_id_list[folly::to_underlying(T::value)]>;

  template<class T>
  using __fbthrift_type_tag = ::apache::thrift::detail::at<__fbthrift_reflection_type_tags, T::value>;

  template<class T>
  using __fbthrift_ident = ::apache::thrift::detail::at<__fbthrift_reflection_ident_list, T::value>;

  template<class T> using __fbthrift_ordinal = ::apache::thrift::type::ordinal_tag<
    ::apache::thrift::detail::getFieldOrdinal<T,
                                              __fbthrift_reflection_ident_list,
                                              __fbthrift_reflection_type_tags>(
      __fbthrift_reflection_field_id_list
    )
  >;
  void __fbthrift_clear();
  void __fbthrift_destruct();
  bool __fbthrift_is_empty() const;

 public:
  using __fbthrift_cpp2_type = MyUnion;
  static constexpr bool __fbthrift_cpp2_is_union =
    true;
  static constexpr bool __fbthrift_cpp2_uses_op_encode =
    false;


 public:
  enum Type : int {
    __EMPTY__ = 0,
    myEnum = 1,
    myStruct = 2,
    myDataItem = 3,
    complexNestedStruct = 4,
    longValue = 5,
    intValue = 6,
  } ;

  MyUnion()
      : type_(folly::to_underlying(Type::__EMPTY__)) {}

  MyUnion(MyUnion&& rhs) noexcept
      : type_(folly::to_underlying(Type::__EMPTY__)) {
    if (this == &rhs) { return; }
    switch (rhs.getType()) {
      case Type::__EMPTY__:
      {
        return;
      }
      case Type::myEnum:
      {
        set_myEnum(std::move(rhs.value_.myEnum));
        break;
      }
      case Type::myStruct:
      {
        set_myStruct(std::move(rhs.value_.myStruct));
        break;
      }
      case Type::myDataItem:
      {
        set_myDataItem(std::move(rhs.value_.myDataItem));
        break;
      }
      case Type::complexNestedStruct:
      {
        set_complexNestedStruct(std::move(rhs.value_.complexNestedStruct));
        break;
      }
      case Type::longValue:
      {
        set_longValue(std::move(rhs.value_.longValue));
        break;
      }
      case Type::intValue:
      {
        set_intValue(std::move(rhs.value_.intValue));
        break;
      }
      default:
      {
        assert(false);
        break;
      }
    }
    apache::thrift::clear(rhs);
  }

  MyUnion(const MyUnion& rhs);

  MyUnion& operator=(MyUnion&& rhs) noexcept {
    if (this == &rhs) { return *this; }
    switch (rhs.getType()) {
      case Type::__EMPTY__:
      {
        __fbthrift_clear();
        return *this;
      }
      case Type::myEnum:
      {
        set_myEnum(std::move(rhs.value_.myEnum));
        break;
      }
      case Type::myStruct:
      {
        set_myStruct(std::move(rhs.value_.myStruct));
        break;
      }
      case Type::myDataItem:
      {
        set_myDataItem(std::move(rhs.value_.myDataItem));
        break;
      }
      case Type::complexNestedStruct:
      {
        set_complexNestedStruct(std::move(rhs.value_.complexNestedStruct));
        break;
      }
      case Type::longValue:
      {
        set_longValue(std::move(rhs.value_.longValue));
        break;
      }
      case Type::intValue:
      {
        set_intValue(std::move(rhs.value_.intValue));
        break;
      }
      default:
      {
        assert(false);
        __fbthrift_clear();
      }
    }
    apache::thrift::clear(rhs);
    return *this;
  }

  MyUnion& operator=(const MyUnion& rhs);

  ~MyUnion();

  union storage_type {
    ::cpp2::MyEnum myEnum;
    ::cpp2::MyStruct myStruct;
    ::cpp2::MyDataItem myDataItem;
    ::cpp2::ComplexNestedStruct complexNestedStruct;
    ::std::int64_t longValue;
    ::std::int32_t intValue;

    storage_type() {}
    ~storage_type() {}
  } ;

  bool operator==(const MyUnion&) const;
  bool operator<(const MyUnion&) const;

  /** Glean { "field": "myEnum" } */
  template <typename... A, std::enable_if_t<!sizeof...(A), int> = 0>
  ::cpp2::MyEnum& set_myEnum(::cpp2::MyEnum t = ::cpp2::MyEnum()) {
    using T0 = ::cpp2::MyEnum;
    using T = folly::type_t<T0, A...>;
    __fbthrift_clear();
    type_ = folly::to_underlying(Type::myEnum);
    ::new (std::addressof(value_.myEnum)) T(t);
    return value_.myEnum;
  }


  /** Glean { "field": "myStruct" } */
  template <typename... A, std::enable_if_t<!sizeof...(A), int> = 0>
  ::cpp2::MyStruct& set_myStruct(::cpp2::MyStruct const &t) {
    using T0 = ::cpp2::MyStruct;
    using T = folly::type_t<T0, A...>;
    __fbthrift_clear();
    type_ = folly::to_underlying(Type::myStruct);
    ::new (std::addressof(value_.myStruct)) T(t);
    return value_.myStruct;
  }

  /** Glean { "field": "myStruct" } */
  template <typename... A, std::enable_if_t<!sizeof...(A), int> = 0>
  ::cpp2::MyStruct& set_myStruct(::cpp2::MyStruct&& t) {
    using T0 = ::cpp2::MyStruct;
    using T = folly::type_t<T0, A...>;
    __fbthrift_clear();
    type_ = folly::to_underlying(Type::myStruct);
    ::new (std::addressof(value_.myStruct)) T(std::move(t));
    return value_.myStruct;
  }

  /** Glean { "field": "myStruct" } */
  template<typename... T, typename = ::apache::thrift::safe_overload_t<::cpp2::MyStruct, T...>> ::cpp2::MyStruct& set_myStruct(T&&... t) {
    __fbthrift_clear();
    type_ = folly::to_underlying(Type::myStruct);
    ::new (std::addressof(value_.myStruct)) ::cpp2::MyStruct(std::forward<T>(t)...);
    return value_.myStruct;
  }

  /** Glean { "field": "myDataItem" } */
  template <typename... A, std::enable_if_t<!sizeof...(A), int> = 0>
  ::cpp2::MyDataItem& set_myDataItem(::cpp2::MyDataItem const &t) {
    using T0 = ::cpp2::MyDataItem;
    using T = folly::type_t<T0, A...>;
    __fbthrift_clear();
    type_ = folly::to_underlying(Type::myDataItem);
    ::new (std::addressof(value_.myDataItem)) T(t);
    return value_.myDataItem;
  }

  /** Glean { "field": "myDataItem" } */
  template <typename... A, std::enable_if_t<!sizeof...(A), int> = 0>
  ::cpp2::MyDataItem& set_myDataItem(::cpp2::MyDataItem&& t) {
    using T0 = ::cpp2::MyDataItem;
    using T = folly::type_t<T0, A...>;
    __fbthrift_clear();
    type_ = folly::to_underlying(Type::myDataItem);
    ::new (std::addressof(value_.myDataItem)) T(std::move(t));
    return value_.myDataItem;
  }

  /** Glean { "field": "myDataItem" } */
  template<typename... T, typename = ::apache::thrift::safe_overload_t<::cpp2::MyDataItem, T...>> ::cpp2::MyDataItem& set_myDataItem(T&&... t) {
    __fbthrift_clear();
    type_ = folly::to_underlying(Type::myDataItem);
    ::new (std::addressof(value_.myDataItem)) ::cpp2::MyDataItem(std::forward<T>(t)...);
    return value_.myDataItem;
  }

  /** Glean { "field": "complexNestedStruct" } */
  template <typename... A, std::enable_if_t<!sizeof...(A), int> = 0>
  ::cpp2::ComplexNestedStruct& set_complexNestedStruct(::cpp2::ComplexNestedStruct const &t) {
    using T0 = ::cpp2::ComplexNestedStruct;
    using T = folly::type_t<T0, A...>;
    __fbthrift_clear();
    type_ = folly::to_underlying(Type::complexNestedStruct);
    ::new (std::addressof(value_.complexNestedStruct)) T(t);
    return value_.complexNestedStruct;
  }

  /** Glean { "field": "complexNestedStruct" } */
  template <typename... A, std::enable_if_t<!sizeof...(A), int> = 0>
  ::cpp2::ComplexNestedStruct& set_complexNestedStruct(::cpp2::ComplexNestedStruct&& t) {
    using T0 = ::cpp2::ComplexNestedStruct;
    using T = folly::type_t<T0, A...>;
    __fbthrift_clear();
    type_ = folly::to_underlying(Type::complexNestedStruct);
    ::new (std::addressof(value_.complexNestedStruct)) T(std::move(t));
    return value_.complexNestedStruct;
  }

  /** Glean { "field": "complexNestedStruct" } */
  template<typename... T, typename = ::apache::thrift::safe_overload_t<::cpp2::ComplexNestedStruct, T...>> ::cpp2::ComplexNestedStruct& set_complexNestedStruct(T&&... t) {
    __fbthrift_clear();
    type_ = folly::to_underlying(Type::complexNestedStruct);
    ::new (std::addressof(value_.complexNestedStruct)) ::cpp2::ComplexNestedStruct(std::forward<T>(t)...);
    return value_.complexNestedStruct;
  }

  /** Glean { "field": "longValue" } */
  template <typename... A, std::enable_if_t<!sizeof...(A), int> = 0>
  ::std::int64_t& set_longValue(::std::int64_t t = ::std::int64_t()) {
    using T0 = ::std::int64_t;
    using T = folly::type_t<T0, A...>;
    __fbthrift_clear();
    type_ = folly::to_underlying(Type::longValue);
    ::new (std::addressof(value_.longValue)) T(t);
    return value_.longValue;
  }


  /** Glean { "field": "intValue" } */
  template <typename... A, std::enable_if_t<!sizeof...(A), int> = 0>
  ::std::int32_t& set_intValue(::std::int32_t t = ::std::int32_t()) {
    using T0 = ::std::int32_t;
    using T = folly::type_t<T0, A...>;
    __fbthrift_clear();
    type_ = folly::to_underlying(Type::intValue);
    ::new (std::addressof(value_.intValue)) T(t);
    return value_.intValue;
  }


  ::cpp2::MyEnum const& get_myEnum() const {
    if (getType() != Type::myEnum) {
      ::apache::thrift::detail::throw_on_bad_union_field_access();
    }
    return value_.myEnum;
  }

  ::cpp2::MyStruct const& get_myStruct() const {
    if (getType() != Type::myStruct) {
      ::apache::thrift::detail::throw_on_bad_union_field_access();
    }
    return value_.myStruct;
  }

  ::cpp2::MyDataItem const& get_myDataItem() const {
    if (getType() != Type::myDataItem) {
      ::apache::thrift::detail::throw_on_bad_union_field_access();
    }
    return value_.myDataItem;
  }

  ::cpp2::ComplexNestedStruct const& get_complexNestedStruct() const {
    if (getType() != Type::complexNestedStruct) {
      ::apache::thrift::detail::throw_on_bad_union_field_access();
    }
    return value_.complexNestedStruct;
  }

  ::std::int64_t const& get_longValue() const {
    if (getType() != Type::longValue) {
      ::apache::thrift::detail::throw_on_bad_union_field_access();
    }
    return value_.longValue;
  }

  ::std::int32_t const& get_intValue() const {
    if (getType() != Type::intValue) {
      ::apache::thrift::detail::throw_on_bad_union_field_access();
    }
    return value_.intValue;
  }

  ::cpp2::MyEnum& mutable_myEnum() {
    assert(getType() == Type::myEnum);
    return value_.myEnum;
  }

  ::cpp2::MyStruct& mutable_myStruct() {
    assert(getType() == Type::myStruct);
    return value_.myStruct;
  }

  ::cpp2::MyDataItem& mutable_myDataItem() {
    assert(getType() == Type::myDataItem);
    return value_.myDataItem;
  }

  ::cpp2::ComplexNestedStruct& mutable_complexNestedStruct() {
    assert(getType() == Type::complexNestedStruct);
    return value_.complexNestedStruct;
  }

  ::std::int64_t& mutable_longValue() {
    assert(getType() == Type::longValue);
    return value_.longValue;
  }

  ::std::int32_t& mutable_intValue() {
    assert(getType() == Type::intValue);
    return value_.intValue;
  }

  template <typename..., typename T = ::cpp2::MyEnum>
  T move_myEnum() {
    assert(getType() == Type::myEnum);
    return std::move(value_.myEnum);
  }

  template <typename..., typename T = ::cpp2::MyStruct>
  T move_myStruct() {
    assert(getType() == Type::myStruct);
    return std::move(value_.myStruct);
  }

  template <typename..., typename T = ::cpp2::MyDataItem>
  T move_myDataItem() {
    assert(getType() == Type::myDataItem);
    return std::move(value_.myDataItem);
  }

  template <typename..., typename T = ::cpp2::ComplexNestedStruct>
  T move_complexNestedStruct() {
    assert(getType() == Type::complexNestedStruct);
    return std::move(value_.complexNestedStruct);
  }

  template <typename..., typename T = ::std::int64_t>
  T move_longValue() {
    assert(getType() == Type::longValue);
    return std::move(value_.longValue);
  }

  template <typename..., typename T = ::std::int32_t>
  T move_intValue() {
    assert(getType() == Type::intValue);
    return std::move(value_.intValue);
  }

  /** Glean { "field": "myEnum" } */
  template <typename..., typename T = ::cpp2::MyEnum>
  FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> myEnum_ref() const& {
    return {value_.myEnum, type_, folly::to_underlying(Type::myEnum), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  /** Glean { "field": "myEnum" } */
  template <typename..., typename T = ::cpp2::MyEnum>
  FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> myEnum_ref() const&& {
    return {std::move(value_.myEnum), type_, folly::to_underlying(Type::myEnum), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  /** Glean { "field": "myEnum" } */
  template <typename..., typename T = ::cpp2::MyEnum>
  FOLLY_ERASE ::apache::thrift::union_field_ref<T&> myEnum_ref() & {
    return {value_.myEnum, type_, folly::to_underlying(Type::myEnum), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  /** Glean { "field": "myEnum" } */
  template <typename..., typename T = ::cpp2::MyEnum>
  FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> myEnum_ref() && {
    return {std::move(value_.myEnum), type_, folly::to_underlying(Type::myEnum), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }
  /** Glean { "field": "myStruct" } */
  template <typename..., typename T = ::cpp2::MyStruct>
  FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> myStruct_ref() const& {
    return {value_.myStruct, type_, folly::to_underlying(Type::myStruct), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  /** Glean { "field": "myStruct" } */
  template <typename..., typename T = ::cpp2::MyStruct>
  FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> myStruct_ref() const&& {
    return {std::move(value_.myStruct), type_, folly::to_underlying(Type::myStruct), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  /** Glean { "field": "myStruct" } */
  template <typename..., typename T = ::cpp2::MyStruct>
  FOLLY_ERASE ::apache::thrift::union_field_ref<T&> myStruct_ref() & {
    return {value_.myStruct, type_, folly::to_underlying(Type::myStruct), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  /** Glean { "field": "myStruct" } */
  template <typename..., typename T = ::cpp2::MyStruct>
  FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> myStruct_ref() && {
    return {std::move(value_.myStruct), type_, folly::to_underlying(Type::myStruct), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }
  /** Glean { "field": "myDataItem" } */
  template <typename..., typename T = ::cpp2::MyDataItem>
  FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> myDataItem_ref() const& {
    return {value_.myDataItem, type_, folly::to_underlying(Type::myDataItem), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  /** Glean { "field": "myDataItem" } */
  template <typename..., typename T = ::cpp2::MyDataItem>
  FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> myDataItem_ref() const&& {
    return {std::move(value_.myDataItem), type_, folly::to_underlying(Type::myDataItem), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  /** Glean { "field": "myDataItem" } */
  template <typename..., typename T = ::cpp2::MyDataItem>
  FOLLY_ERASE ::apache::thrift::union_field_ref<T&> myDataItem_ref() & {
    return {value_.myDataItem, type_, folly::to_underlying(Type::myDataItem), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  /** Glean { "field": "myDataItem" } */
  template <typename..., typename T = ::cpp2::MyDataItem>
  FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> myDataItem_ref() && {
    return {std::move(value_.myDataItem), type_, folly::to_underlying(Type::myDataItem), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }
  /** Glean { "field": "complexNestedStruct" } */
  template <typename..., typename T = ::cpp2::ComplexNestedStruct>
  FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> complexNestedStruct_ref() const& {
    return {value_.complexNestedStruct, type_, folly::to_underlying(Type::complexNestedStruct), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  /** Glean { "field": "complexNestedStruct" } */
  template <typename..., typename T = ::cpp2::ComplexNestedStruct>
  FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> complexNestedStruct_ref() const&& {
    return {std::move(value_.complexNestedStruct), type_, folly::to_underlying(Type::complexNestedStruct), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  /** Glean { "field": "complexNestedStruct" } */
  template <typename..., typename T = ::cpp2::ComplexNestedStruct>
  FOLLY_ERASE ::apache::thrift::union_field_ref<T&> complexNestedStruct_ref() & {
    return {value_.complexNestedStruct, type_, folly::to_underlying(Type::complexNestedStruct), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  /** Glean { "field": "complexNestedStruct" } */
  template <typename..., typename T = ::cpp2::ComplexNestedStruct>
  FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> complexNestedStruct_ref() && {
    return {std::move(value_.complexNestedStruct), type_, folly::to_underlying(Type::complexNestedStruct), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }
  /** Glean { "field": "longValue" } */
  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> longValue_ref() const& {
    return {value_.longValue, type_, folly::to_underlying(Type::longValue), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  /** Glean { "field": "longValue" } */
  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> longValue_ref() const&& {
    return {std::move(value_.longValue), type_, folly::to_underlying(Type::longValue), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  /** Glean { "field": "longValue" } */
  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::union_field_ref<T&> longValue_ref() & {
    return {value_.longValue, type_, folly::to_underlying(Type::longValue), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  /** Glean { "field": "longValue" } */
  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> longValue_ref() && {
    return {std::move(value_.longValue), type_, folly::to_underlying(Type::longValue), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }
  /** Glean { "field": "intValue" } */
  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> intValue_ref() const& {
    return {value_.intValue, type_, folly::to_underlying(Type::intValue), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  /** Glean { "field": "intValue" } */
  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> intValue_ref() const&& {
    return {std::move(value_.intValue), type_, folly::to_underlying(Type::intValue), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  /** Glean { "field": "intValue" } */
  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::union_field_ref<T&> intValue_ref() & {
    return {value_.intValue, type_, folly::to_underlying(Type::intValue), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  /** Glean { "field": "intValue" } */
  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> intValue_ref() && {
    return {std::move(value_.intValue), type_, folly::to_underlying(Type::intValue), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }
  Type getType() const { return static_cast<Type>(type_); }

  template <class Protocol_>
  unsigned long read(Protocol_* iprot);
  template <class Protocol_>
  uint32_t serializedSize(Protocol_ const* prot_) const;
  template <class Protocol_>
  uint32_t serializedSizeZC(Protocol_ const* prot_) const;
  template <class Protocol_>
  uint32_t write(Protocol_* prot_) const;
 protected:
  storage_type value_;
  std::underlying_type_t<Type> type_;

 private:
  template <class Protocol_>
  void readNoXfer(Protocol_* iprot);

  friend class ::apache::thrift::Cpp2Ops<MyUnion>;
  friend void swap(MyUnion& a, MyUnion& b);
};

template <class Protocol_>
unsigned long MyUnion::read(Protocol_* iprot) {
  auto _xferStart = iprot->getCursorPosition();
  readNoXfer(iprot);
  return iprot->getCursorPosition() - _xferStart;
}


/** Glean {"file": "thrift/compiler/test/fixtures/complex-struct/src/module.thrift", "name": "defaultStruct", "kind": "struct" } */
class defaultStruct final  {
 private:
  friend struct ::apache::thrift::detail::st::struct_private_access;
  template<class> friend struct ::apache::thrift::detail::invoke_reffer;

  //  used by a static_assert in the corresponding source
  static constexpr bool __fbthrift_cpp2_gen_json = false;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  static std::string_view __fbthrift_get_field_name(::apache::thrift::FieldOrdinal ord);
  static std::string_view __fbthrift_get_class_name();
  using __fbthrift_reflection_ident_list = folly::tag_t<
    ::apache::thrift::ident::myLongDFset,
    ::apache::thrift::ident::myLongDF,
    ::apache::thrift::ident::portDFset,
    ::apache::thrift::ident::portNum,
    ::apache::thrift::ident::myBinaryDFset,
    ::apache::thrift::ident::myBinary,
    ::apache::thrift::ident::myByteDFSet,
    ::apache::thrift::ident::myByte,
    ::apache::thrift::ident::myDoubleDFset,
    ::apache::thrift::ident::myDoubleDFZero,
    ::apache::thrift::ident::myDouble,
    ::apache::thrift::ident::field3,
    ::apache::thrift::ident::myList,
    ::apache::thrift::ident::mySet,
    ::apache::thrift::ident::simpleStruct,
    ::apache::thrift::ident::listStructDFset,
    ::apache::thrift::ident::myUnion,
    ::apache::thrift::ident::listUnionDFset,
    ::apache::thrift::ident::mapNestlistStructDfSet,
    ::apache::thrift::ident::mapJavaTypeDFset,
    ::apache::thrift::ident::emptyMap,
    ::apache::thrift::ident::enumMapDFset
  >;

  static constexpr std::int16_t __fbthrift_reflection_field_id_list[] = {0,1,2,3,4,5,6,7,8,9,10,12,13,14,15,16,17,18,19,20,21,22,23};
  using __fbthrift_reflection_type_tags = folly::tag_t<
    ::apache::thrift::type::i64_t,
    ::apache::thrift::type::i64_t,
    ::apache::thrift::type::i32_t,
    ::apache::thrift::type::i32_t,
    ::apache::thrift::type::binary_t,
    ::apache::thrift::type::binary_t,
    ::apache::thrift::type::byte_t,
    ::apache::thrift::type::byte_t,
    ::apache::thrift::type::double_t,
    ::apache::thrift::type::double_t,
    ::apache::thrift::type::double_t,
    ::apache::thrift::type::map<::apache::thrift::type::i32_t, ::apache::thrift::type::string_t>,
    ::apache::thrift::type::list<::apache::thrift::type::enum_t<::cpp2::MyEnum>>,
    ::apache::thrift::type::set<::apache::thrift::type::string_t>,
    ::apache::thrift::type::struct_t<::cpp2::SimpleStruct>,
    ::apache::thrift::type::list<::apache::thrift::type::struct_t<::cpp2::SimpleStruct>>,
    ::apache::thrift::type::union_t<::cpp2::MyUnion>,
    ::apache::thrift::type::list<::apache::thrift::type::union_t<::cpp2::MyUnion>>,
    ::apache::thrift::type::map<::apache::thrift::type::i32_t, ::apache::thrift::type::list<::apache::thrift::type::struct_t<::cpp2::SimpleStruct>>>,
    ::apache::thrift::type::map<::apache::thrift::type::i64_t, ::apache::thrift::type::string_t>,
    ::apache::thrift::type::map<::apache::thrift::type::i64_t, ::apache::thrift::type::i32_t>,
    ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::map<::apache::thrift::type::i32_t, ::apache::thrift::type::enum_t<::cpp2::MyEnum>>>
  >;

  static constexpr std::size_t __fbthrift_field_size_v = 22;

  template<class T>
  using __fbthrift_id = ::apache::thrift::type::field_id<__fbthrift_reflection_field_id_list[folly::to_underlying(T::value)]>;

  template<class T>
  using __fbthrift_type_tag = ::apache::thrift::detail::at<__fbthrift_reflection_type_tags, T::value>;

  template<class T>
  using __fbthrift_ident = ::apache::thrift::detail::at<__fbthrift_reflection_ident_list, T::value>;

  template<class T> using __fbthrift_ordinal = ::apache::thrift::type::ordinal_tag<
    ::apache::thrift::detail::getFieldOrdinal<T,
                                              __fbthrift_reflection_ident_list,
                                              __fbthrift_reflection_type_tags>(
      __fbthrift_reflection_field_id_list
    )
  >;
  void __fbthrift_clear();
  void __fbthrift_clear_terse_fields();
  bool __fbthrift_is_empty() const;

 public:
  using __fbthrift_cpp2_type = defaultStruct;
  static constexpr bool __fbthrift_cpp2_is_union =
    false;
  static constexpr bool __fbthrift_cpp2_uses_op_encode =
    false;


 public:

  defaultStruct();

  // FragileConstructor for use in initialization lists only.
  [[deprecated("This constructor is deprecated")]]
  defaultStruct(apache::thrift::FragileConstructor, ::std::int64_t myLongDFset__arg, ::std::int64_t myLongDF__arg, ::std::int32_t portDFset__arg, ::std::int32_t portNum__arg, ::std::string myBinaryDFset__arg, ::std::string myBinary__arg, ::std::int8_t myByteDFSet__arg, ::std::int8_t myByte__arg, double myDoubleDFset__arg, double myDoubleDFZero__arg, double myDouble__arg, ::std::map<::std::int32_t, ::std::string> field3__arg, ::std::vector<::cpp2::MyEnum> myList__arg, ::std::set<::std::string> mySet__arg, ::cpp2::SimpleStruct simpleStruct__arg, ::std::vector<::cpp2::SimpleStruct> listStructDFset__arg, ::cpp2::MyUnion myUnion__arg, ::std::vector<::cpp2::MyUnion> listUnionDFset__arg, ::std::map<::std::int32_t, ::std::vector<::cpp2::SimpleStruct>> mapNestlistStructDfSet__arg, ::cpp2::map_i64_string_5732 mapJavaTypeDFset__arg, ::std::map<::std::int64_t, ::std::int32_t> emptyMap__arg, ::std::map<::std::string, ::std::map<::std::int32_t, ::cpp2::MyEnum>> enumMapDFset__arg);

  defaultStruct(defaultStruct&&) noexcept;

  defaultStruct(const defaultStruct& src);


  defaultStruct& operator=(defaultStruct&&) noexcept;
  defaultStruct& operator=(const defaultStruct& src);

  ~defaultStruct();

 private:
  ::std::int64_t __fbthrift_field_myLongDFset;
 private:
  ::std::int64_t __fbthrift_field_myLongDF;
 private:
  ::std::int32_t __fbthrift_field_portDFset;
 private:
  ::std::int32_t __fbthrift_field_portNum;
 private:
  ::std::string __fbthrift_field_myBinaryDFset;
 private:
  ::std::string __fbthrift_field_myBinary;
 private:
  ::std::int8_t __fbthrift_field_myByteDFSet;
 private:
  ::std::int8_t __fbthrift_field_myByte;
 private:
  double __fbthrift_field_myDoubleDFset;
 private:
  double __fbthrift_field_myDoubleDFZero;
 private:
  double __fbthrift_field_myDouble;
 private:
  ::std::map<::std::int32_t, ::std::string> __fbthrift_field_field3;
 private:
  ::std::vector<::cpp2::MyEnum> __fbthrift_field_myList;
 private:
  ::std::set<::std::string> __fbthrift_field_mySet;
 private:
  ::cpp2::SimpleStruct __fbthrift_field_simpleStruct;
 private:
  ::std::vector<::cpp2::SimpleStruct> __fbthrift_field_listStructDFset;
 private:
  ::cpp2::MyUnion __fbthrift_field_myUnion;
 private:
  ::std::vector<::cpp2::MyUnion> __fbthrift_field_listUnionDFset;
 private:
  ::std::map<::std::int32_t, ::std::vector<::cpp2::SimpleStruct>> __fbthrift_field_mapNestlistStructDfSet;
 private:
  ::cpp2::map_i64_string_5732 __fbthrift_field_mapJavaTypeDFset;
 private:
  ::std::map<::std::int64_t, ::std::int32_t> __fbthrift_field_emptyMap;
 private:
  ::std::map<::std::string, ::std::map<::std::int32_t, ::cpp2::MyEnum>> __fbthrift_field_enumMapDFset;
 private:
  apache::thrift::detail::isset_bitset<22, apache::thrift::detail::IssetBitsetOption::Unpacked> __isset;

 public:

  bool operator==(const defaultStruct&) const;
  bool operator<(const defaultStruct&) const;

  /** Glean { "field": "myLongDFset" } */
  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> myLongDFset_ref() const& {
    return {this->__fbthrift_field_myLongDFset, __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "myLongDFset" } */
  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> myLongDFset_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_myLongDFset), __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "myLongDFset" } */
  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> myLongDFset_ref() & {
    return {this->__fbthrift_field_myLongDFset, __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "myLongDFset" } */
  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> myLongDFset_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_myLongDFset), __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "myLongDFset" } */
  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> myLongDFset() const& {
    return {this->__fbthrift_field_myLongDFset, __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "myLongDFset" } */
  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> myLongDFset() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_myLongDFset), __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "myLongDFset" } */
  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> myLongDFset() & {
    return {this->__fbthrift_field_myLongDFset, __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "myLongDFset" } */
  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> myLongDFset() && {
    return {static_cast<T&&>(this->__fbthrift_field_myLongDFset), __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "myLongDF" } */
  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> myLongDF_ref() const& {
    return {this->__fbthrift_field_myLongDF, __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "myLongDF" } */
  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> myLongDF_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_myLongDF), __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "myLongDF" } */
  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> myLongDF_ref() & {
    return {this->__fbthrift_field_myLongDF, __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "myLongDF" } */
  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> myLongDF_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_myLongDF), __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "myLongDF" } */
  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> myLongDF() const& {
    return {this->__fbthrift_field_myLongDF, __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "myLongDF" } */
  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> myLongDF() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_myLongDF), __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "myLongDF" } */
  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> myLongDF() & {
    return {this->__fbthrift_field_myLongDF, __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "myLongDF" } */
  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> myLongDF() && {
    return {static_cast<T&&>(this->__fbthrift_field_myLongDF), __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "portDFset" } */
  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> portDFset_ref() const& {
    return {this->__fbthrift_field_portDFset, __isset.at(2), __isset.bit(2)};
  }

  /** Glean { "field": "portDFset" } */
  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> portDFset_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_portDFset), __isset.at(2), __isset.bit(2)};
  }

  /** Glean { "field": "portDFset" } */
  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> portDFset_ref() & {
    return {this->__fbthrift_field_portDFset, __isset.at(2), __isset.bit(2)};
  }

  /** Glean { "field": "portDFset" } */
  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> portDFset_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_portDFset), __isset.at(2), __isset.bit(2)};
  }

  /** Glean { "field": "portDFset" } */
  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> portDFset() const& {
    return {this->__fbthrift_field_portDFset, __isset.at(2), __isset.bit(2)};
  }

  /** Glean { "field": "portDFset" } */
  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> portDFset() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_portDFset), __isset.at(2), __isset.bit(2)};
  }

  /** Glean { "field": "portDFset" } */
  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> portDFset() & {
    return {this->__fbthrift_field_portDFset, __isset.at(2), __isset.bit(2)};
  }

  /** Glean { "field": "portDFset" } */
  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> portDFset() && {
    return {static_cast<T&&>(this->__fbthrift_field_portDFset), __isset.at(2), __isset.bit(2)};
  }

  /** Glean { "field": "portNum" } */
  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> portNum_ref() const& {
    return {this->__fbthrift_field_portNum, __isset.at(3), __isset.bit(3)};
  }

  /** Glean { "field": "portNum" } */
  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> portNum_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_portNum), __isset.at(3), __isset.bit(3)};
  }

  /** Glean { "field": "portNum" } */
  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> portNum_ref() & {
    return {this->__fbthrift_field_portNum, __isset.at(3), __isset.bit(3)};
  }

  /** Glean { "field": "portNum" } */
  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> portNum_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_portNum), __isset.at(3), __isset.bit(3)};
  }

  /** Glean { "field": "portNum" } */
  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> portNum() const& {
    return {this->__fbthrift_field_portNum, __isset.at(3), __isset.bit(3)};
  }

  /** Glean { "field": "portNum" } */
  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> portNum() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_portNum), __isset.at(3), __isset.bit(3)};
  }

  /** Glean { "field": "portNum" } */
  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> portNum() & {
    return {this->__fbthrift_field_portNum, __isset.at(3), __isset.bit(3)};
  }

  /** Glean { "field": "portNum" } */
  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> portNum() && {
    return {static_cast<T&&>(this->__fbthrift_field_portNum), __isset.at(3), __isset.bit(3)};
  }

  /** Glean { "field": "myBinaryDFset" } */
  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> myBinaryDFset_ref() const& {
    return {this->__fbthrift_field_myBinaryDFset, __isset.at(4), __isset.bit(4)};
  }

  /** Glean { "field": "myBinaryDFset" } */
  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> myBinaryDFset_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_myBinaryDFset), __isset.at(4), __isset.bit(4)};
  }

  /** Glean { "field": "myBinaryDFset" } */
  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> myBinaryDFset_ref() & {
    return {this->__fbthrift_field_myBinaryDFset, __isset.at(4), __isset.bit(4)};
  }

  /** Glean { "field": "myBinaryDFset" } */
  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> myBinaryDFset_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_myBinaryDFset), __isset.at(4), __isset.bit(4)};
  }

  /** Glean { "field": "myBinaryDFset" } */
  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> myBinaryDFset() const& {
    return {this->__fbthrift_field_myBinaryDFset, __isset.at(4), __isset.bit(4)};
  }

  /** Glean { "field": "myBinaryDFset" } */
  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> myBinaryDFset() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_myBinaryDFset), __isset.at(4), __isset.bit(4)};
  }

  /** Glean { "field": "myBinaryDFset" } */
  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> myBinaryDFset() & {
    return {this->__fbthrift_field_myBinaryDFset, __isset.at(4), __isset.bit(4)};
  }

  /** Glean { "field": "myBinaryDFset" } */
  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> myBinaryDFset() && {
    return {static_cast<T&&>(this->__fbthrift_field_myBinaryDFset), __isset.at(4), __isset.bit(4)};
  }

  /** Glean { "field": "myBinary" } */
  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> myBinary_ref() const& {
    return {this->__fbthrift_field_myBinary, __isset.at(5), __isset.bit(5)};
  }

  /** Glean { "field": "myBinary" } */
  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> myBinary_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_myBinary), __isset.at(5), __isset.bit(5)};
  }

  /** Glean { "field": "myBinary" } */
  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> myBinary_ref() & {
    return {this->__fbthrift_field_myBinary, __isset.at(5), __isset.bit(5)};
  }

  /** Glean { "field": "myBinary" } */
  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> myBinary_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_myBinary), __isset.at(5), __isset.bit(5)};
  }

  /** Glean { "field": "myBinary" } */
  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> myBinary() const& {
    return {this->__fbthrift_field_myBinary, __isset.at(5), __isset.bit(5)};
  }

  /** Glean { "field": "myBinary" } */
  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> myBinary() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_myBinary), __isset.at(5), __isset.bit(5)};
  }

  /** Glean { "field": "myBinary" } */
  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> myBinary() & {
    return {this->__fbthrift_field_myBinary, __isset.at(5), __isset.bit(5)};
  }

  /** Glean { "field": "myBinary" } */
  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> myBinary() && {
    return {static_cast<T&&>(this->__fbthrift_field_myBinary), __isset.at(5), __isset.bit(5)};
  }

  /** Glean { "field": "myByteDFSet" } */
  template <typename..., typename T = ::std::int8_t>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> myByteDFSet_ref() const& {
    return {this->__fbthrift_field_myByteDFSet, __isset.at(6), __isset.bit(6)};
  }

  /** Glean { "field": "myByteDFSet" } */
  template <typename..., typename T = ::std::int8_t>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> myByteDFSet_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_myByteDFSet), __isset.at(6), __isset.bit(6)};
  }

  /** Glean { "field": "myByteDFSet" } */
  template <typename..., typename T = ::std::int8_t>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> myByteDFSet_ref() & {
    return {this->__fbthrift_field_myByteDFSet, __isset.at(6), __isset.bit(6)};
  }

  /** Glean { "field": "myByteDFSet" } */
  template <typename..., typename T = ::std::int8_t>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> myByteDFSet_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_myByteDFSet), __isset.at(6), __isset.bit(6)};
  }

  /** Glean { "field": "myByteDFSet" } */
  template <typename..., typename T = ::std::int8_t>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> myByteDFSet() const& {
    return {this->__fbthrift_field_myByteDFSet, __isset.at(6), __isset.bit(6)};
  }

  /** Glean { "field": "myByteDFSet" } */
  template <typename..., typename T = ::std::int8_t>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> myByteDFSet() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_myByteDFSet), __isset.at(6), __isset.bit(6)};
  }

  /** Glean { "field": "myByteDFSet" } */
  template <typename..., typename T = ::std::int8_t>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> myByteDFSet() & {
    return {this->__fbthrift_field_myByteDFSet, __isset.at(6), __isset.bit(6)};
  }

  /** Glean { "field": "myByteDFSet" } */
  template <typename..., typename T = ::std::int8_t>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> myByteDFSet() && {
    return {static_cast<T&&>(this->__fbthrift_field_myByteDFSet), __isset.at(6), __isset.bit(6)};
  }

  /** Glean { "field": "myByte" } */
  template <typename..., typename T = ::std::int8_t>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> myByte_ref() const& {
    return {this->__fbthrift_field_myByte, __isset.at(7), __isset.bit(7)};
  }

  /** Glean { "field": "myByte" } */
  template <typename..., typename T = ::std::int8_t>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> myByte_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_myByte), __isset.at(7), __isset.bit(7)};
  }

  /** Glean { "field": "myByte" } */
  template <typename..., typename T = ::std::int8_t>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> myByte_ref() & {
    return {this->__fbthrift_field_myByte, __isset.at(7), __isset.bit(7)};
  }

  /** Glean { "field": "myByte" } */
  template <typename..., typename T = ::std::int8_t>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> myByte_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_myByte), __isset.at(7), __isset.bit(7)};
  }

  /** Glean { "field": "myByte" } */
  template <typename..., typename T = ::std::int8_t>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> myByte() const& {
    return {this->__fbthrift_field_myByte, __isset.at(7), __isset.bit(7)};
  }

  /** Glean { "field": "myByte" } */
  template <typename..., typename T = ::std::int8_t>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> myByte() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_myByte), __isset.at(7), __isset.bit(7)};
  }

  /** Glean { "field": "myByte" } */
  template <typename..., typename T = ::std::int8_t>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> myByte() & {
    return {this->__fbthrift_field_myByte, __isset.at(7), __isset.bit(7)};
  }

  /** Glean { "field": "myByte" } */
  template <typename..., typename T = ::std::int8_t>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> myByte() && {
    return {static_cast<T&&>(this->__fbthrift_field_myByte), __isset.at(7), __isset.bit(7)};
  }

  /** Glean { "field": "myDoubleDFset" } */
  template <typename..., typename T = double>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> myDoubleDFset_ref() const& {
    return {this->__fbthrift_field_myDoubleDFset, __isset.at(8), __isset.bit(8)};
  }

  /** Glean { "field": "myDoubleDFset" } */
  template <typename..., typename T = double>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> myDoubleDFset_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_myDoubleDFset), __isset.at(8), __isset.bit(8)};
  }

  /** Glean { "field": "myDoubleDFset" } */
  template <typename..., typename T = double>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> myDoubleDFset_ref() & {
    return {this->__fbthrift_field_myDoubleDFset, __isset.at(8), __isset.bit(8)};
  }

  /** Glean { "field": "myDoubleDFset" } */
  template <typename..., typename T = double>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> myDoubleDFset_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_myDoubleDFset), __isset.at(8), __isset.bit(8)};
  }

  /** Glean { "field": "myDoubleDFset" } */
  template <typename..., typename T = double>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> myDoubleDFset() const& {
    return {this->__fbthrift_field_myDoubleDFset, __isset.at(8), __isset.bit(8)};
  }

  /** Glean { "field": "myDoubleDFset" } */
  template <typename..., typename T = double>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> myDoubleDFset() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_myDoubleDFset), __isset.at(8), __isset.bit(8)};
  }

  /** Glean { "field": "myDoubleDFset" } */
  template <typename..., typename T = double>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> myDoubleDFset() & {
    return {this->__fbthrift_field_myDoubleDFset, __isset.at(8), __isset.bit(8)};
  }

  /** Glean { "field": "myDoubleDFset" } */
  template <typename..., typename T = double>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> myDoubleDFset() && {
    return {static_cast<T&&>(this->__fbthrift_field_myDoubleDFset), __isset.at(8), __isset.bit(8)};
  }

  /** Glean { "field": "myDoubleDFZero" } */
  template <typename..., typename T = double>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> myDoubleDFZero_ref() const& {
    return {this->__fbthrift_field_myDoubleDFZero, __isset.at(9), __isset.bit(9)};
  }

  /** Glean { "field": "myDoubleDFZero" } */
  template <typename..., typename T = double>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> myDoubleDFZero_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_myDoubleDFZero), __isset.at(9), __isset.bit(9)};
  }

  /** Glean { "field": "myDoubleDFZero" } */
  template <typename..., typename T = double>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> myDoubleDFZero_ref() & {
    return {this->__fbthrift_field_myDoubleDFZero, __isset.at(9), __isset.bit(9)};
  }

  /** Glean { "field": "myDoubleDFZero" } */
  template <typename..., typename T = double>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> myDoubleDFZero_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_myDoubleDFZero), __isset.at(9), __isset.bit(9)};
  }

  /** Glean { "field": "myDoubleDFZero" } */
  template <typename..., typename T = double>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> myDoubleDFZero() const& {
    return {this->__fbthrift_field_myDoubleDFZero, __isset.at(9), __isset.bit(9)};
  }

  /** Glean { "field": "myDoubleDFZero" } */
  template <typename..., typename T = double>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> myDoubleDFZero() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_myDoubleDFZero), __isset.at(9), __isset.bit(9)};
  }

  /** Glean { "field": "myDoubleDFZero" } */
  template <typename..., typename T = double>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> myDoubleDFZero() & {
    return {this->__fbthrift_field_myDoubleDFZero, __isset.at(9), __isset.bit(9)};
  }

  /** Glean { "field": "myDoubleDFZero" } */
  template <typename..., typename T = double>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> myDoubleDFZero() && {
    return {static_cast<T&&>(this->__fbthrift_field_myDoubleDFZero), __isset.at(9), __isset.bit(9)};
  }

  /** Glean { "field": "myDouble" } */
  template <typename..., typename T = double>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> myDouble_ref() const& {
    return {this->__fbthrift_field_myDouble, __isset.at(10), __isset.bit(10)};
  }

  /** Glean { "field": "myDouble" } */
  template <typename..., typename T = double>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> myDouble_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_myDouble), __isset.at(10), __isset.bit(10)};
  }

  /** Glean { "field": "myDouble" } */
  template <typename..., typename T = double>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> myDouble_ref() & {
    return {this->__fbthrift_field_myDouble, __isset.at(10), __isset.bit(10)};
  }

  /** Glean { "field": "myDouble" } */
  template <typename..., typename T = double>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> myDouble_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_myDouble), __isset.at(10), __isset.bit(10)};
  }

  /** Glean { "field": "myDouble" } */
  template <typename..., typename T = double>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> myDouble() const& {
    return {this->__fbthrift_field_myDouble, __isset.at(10), __isset.bit(10)};
  }

  /** Glean { "field": "myDouble" } */
  template <typename..., typename T = double>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> myDouble() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_myDouble), __isset.at(10), __isset.bit(10)};
  }

  /** Glean { "field": "myDouble" } */
  template <typename..., typename T = double>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> myDouble() & {
    return {this->__fbthrift_field_myDouble, __isset.at(10), __isset.bit(10)};
  }

  /** Glean { "field": "myDouble" } */
  template <typename..., typename T = double>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> myDouble() && {
    return {static_cast<T&&>(this->__fbthrift_field_myDouble), __isset.at(10), __isset.bit(10)};
  }

  /** Glean { "field": "field3" } */
  template <typename..., typename T = ::std::map<::std::int32_t, ::std::string>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> field3_ref() const& {
    return {this->__fbthrift_field_field3, __isset.at(11), __isset.bit(11)};
  }

  /** Glean { "field": "field3" } */
  template <typename..., typename T = ::std::map<::std::int32_t, ::std::string>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> field3_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_field3), __isset.at(11), __isset.bit(11)};
  }

  /** Glean { "field": "field3" } */
  template <typename..., typename T = ::std::map<::std::int32_t, ::std::string>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> field3_ref() & {
    return {this->__fbthrift_field_field3, __isset.at(11), __isset.bit(11)};
  }

  /** Glean { "field": "field3" } */
  template <typename..., typename T = ::std::map<::std::int32_t, ::std::string>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> field3_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_field3), __isset.at(11), __isset.bit(11)};
  }

  /** Glean { "field": "field3" } */
  template <typename..., typename T = ::std::map<::std::int32_t, ::std::string>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> field3() const& {
    return {this->__fbthrift_field_field3, __isset.at(11), __isset.bit(11)};
  }

  /** Glean { "field": "field3" } */
  template <typename..., typename T = ::std::map<::std::int32_t, ::std::string>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> field3() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_field3), __isset.at(11), __isset.bit(11)};
  }

  /** Glean { "field": "field3" } */
  template <typename..., typename T = ::std::map<::std::int32_t, ::std::string>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> field3() & {
    return {this->__fbthrift_field_field3, __isset.at(11), __isset.bit(11)};
  }

  /** Glean { "field": "field3" } */
  template <typename..., typename T = ::std::map<::std::int32_t, ::std::string>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> field3() && {
    return {static_cast<T&&>(this->__fbthrift_field_field3), __isset.at(11), __isset.bit(11)};
  }

  /** Glean { "field": "myList" } */
  template <typename..., typename T = ::std::vector<::cpp2::MyEnum>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> myList_ref() const& {
    return {this->__fbthrift_field_myList, __isset.at(12), __isset.bit(12)};
  }

  /** Glean { "field": "myList" } */
  template <typename..., typename T = ::std::vector<::cpp2::MyEnum>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> myList_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_myList), __isset.at(12), __isset.bit(12)};
  }

  /** Glean { "field": "myList" } */
  template <typename..., typename T = ::std::vector<::cpp2::MyEnum>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> myList_ref() & {
    return {this->__fbthrift_field_myList, __isset.at(12), __isset.bit(12)};
  }

  /** Glean { "field": "myList" } */
  template <typename..., typename T = ::std::vector<::cpp2::MyEnum>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> myList_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_myList), __isset.at(12), __isset.bit(12)};
  }

  /** Glean { "field": "myList" } */
  template <typename..., typename T = ::std::vector<::cpp2::MyEnum>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> myList() const& {
    return {this->__fbthrift_field_myList, __isset.at(12), __isset.bit(12)};
  }

  /** Glean { "field": "myList" } */
  template <typename..., typename T = ::std::vector<::cpp2::MyEnum>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> myList() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_myList), __isset.at(12), __isset.bit(12)};
  }

  /** Glean { "field": "myList" } */
  template <typename..., typename T = ::std::vector<::cpp2::MyEnum>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> myList() & {
    return {this->__fbthrift_field_myList, __isset.at(12), __isset.bit(12)};
  }

  /** Glean { "field": "myList" } */
  template <typename..., typename T = ::std::vector<::cpp2::MyEnum>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> myList() && {
    return {static_cast<T&&>(this->__fbthrift_field_myList), __isset.at(12), __isset.bit(12)};
  }

  /** Glean { "field": "mySet" } */
  template <typename..., typename T = ::std::set<::std::string>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> mySet_ref() const& {
    return {this->__fbthrift_field_mySet, __isset.at(13), __isset.bit(13)};
  }

  /** Glean { "field": "mySet" } */
  template <typename..., typename T = ::std::set<::std::string>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> mySet_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_mySet), __isset.at(13), __isset.bit(13)};
  }

  /** Glean { "field": "mySet" } */
  template <typename..., typename T = ::std::set<::std::string>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> mySet_ref() & {
    return {this->__fbthrift_field_mySet, __isset.at(13), __isset.bit(13)};
  }

  /** Glean { "field": "mySet" } */
  template <typename..., typename T = ::std::set<::std::string>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> mySet_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_mySet), __isset.at(13), __isset.bit(13)};
  }

  /** Glean { "field": "mySet" } */
  template <typename..., typename T = ::std::set<::std::string>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> mySet() const& {
    return {this->__fbthrift_field_mySet, __isset.at(13), __isset.bit(13)};
  }

  /** Glean { "field": "mySet" } */
  template <typename..., typename T = ::std::set<::std::string>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> mySet() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_mySet), __isset.at(13), __isset.bit(13)};
  }

  /** Glean { "field": "mySet" } */
  template <typename..., typename T = ::std::set<::std::string>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> mySet() & {
    return {this->__fbthrift_field_mySet, __isset.at(13), __isset.bit(13)};
  }

  /** Glean { "field": "mySet" } */
  template <typename..., typename T = ::std::set<::std::string>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> mySet() && {
    return {static_cast<T&&>(this->__fbthrift_field_mySet), __isset.at(13), __isset.bit(13)};
  }

  /** Glean { "field": "simpleStruct" } */
  template <typename..., typename T = ::cpp2::SimpleStruct>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> simpleStruct_ref() const& {
    return {this->__fbthrift_field_simpleStruct, __isset.at(14), __isset.bit(14)};
  }

  /** Glean { "field": "simpleStruct" } */
  template <typename..., typename T = ::cpp2::SimpleStruct>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> simpleStruct_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_simpleStruct), __isset.at(14), __isset.bit(14)};
  }

  /** Glean { "field": "simpleStruct" } */
  template <typename..., typename T = ::cpp2::SimpleStruct>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> simpleStruct_ref() & {
    return {this->__fbthrift_field_simpleStruct, __isset.at(14), __isset.bit(14)};
  }

  /** Glean { "field": "simpleStruct" } */
  template <typename..., typename T = ::cpp2::SimpleStruct>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> simpleStruct_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_simpleStruct), __isset.at(14), __isset.bit(14)};
  }

  /** Glean { "field": "simpleStruct" } */
  template <typename..., typename T = ::cpp2::SimpleStruct>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> simpleStruct() const& {
    return {this->__fbthrift_field_simpleStruct, __isset.at(14), __isset.bit(14)};
  }

  /** Glean { "field": "simpleStruct" } */
  template <typename..., typename T = ::cpp2::SimpleStruct>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> simpleStruct() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_simpleStruct), __isset.at(14), __isset.bit(14)};
  }

  /** Glean { "field": "simpleStruct" } */
  template <typename..., typename T = ::cpp2::SimpleStruct>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> simpleStruct() & {
    return {this->__fbthrift_field_simpleStruct, __isset.at(14), __isset.bit(14)};
  }

  /** Glean { "field": "simpleStruct" } */
  template <typename..., typename T = ::cpp2::SimpleStruct>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> simpleStruct() && {
    return {static_cast<T&&>(this->__fbthrift_field_simpleStruct), __isset.at(14), __isset.bit(14)};
  }

  /** Glean { "field": "listStructDFset" } */
  template <typename..., typename T = ::std::vector<::cpp2::SimpleStruct>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> listStructDFset_ref() const& {
    return {this->__fbthrift_field_listStructDFset, __isset.at(15), __isset.bit(15)};
  }

  /** Glean { "field": "listStructDFset" } */
  template <typename..., typename T = ::std::vector<::cpp2::SimpleStruct>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> listStructDFset_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_listStructDFset), __isset.at(15), __isset.bit(15)};
  }

  /** Glean { "field": "listStructDFset" } */
  template <typename..., typename T = ::std::vector<::cpp2::SimpleStruct>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> listStructDFset_ref() & {
    return {this->__fbthrift_field_listStructDFset, __isset.at(15), __isset.bit(15)};
  }

  /** Glean { "field": "listStructDFset" } */
  template <typename..., typename T = ::std::vector<::cpp2::SimpleStruct>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> listStructDFset_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_listStructDFset), __isset.at(15), __isset.bit(15)};
  }

  /** Glean { "field": "listStructDFset" } */
  template <typename..., typename T = ::std::vector<::cpp2::SimpleStruct>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> listStructDFset() const& {
    return {this->__fbthrift_field_listStructDFset, __isset.at(15), __isset.bit(15)};
  }

  /** Glean { "field": "listStructDFset" } */
  template <typename..., typename T = ::std::vector<::cpp2::SimpleStruct>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> listStructDFset() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_listStructDFset), __isset.at(15), __isset.bit(15)};
  }

  /** Glean { "field": "listStructDFset" } */
  template <typename..., typename T = ::std::vector<::cpp2::SimpleStruct>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> listStructDFset() & {
    return {this->__fbthrift_field_listStructDFset, __isset.at(15), __isset.bit(15)};
  }

  /** Glean { "field": "listStructDFset" } */
  template <typename..., typename T = ::std::vector<::cpp2::SimpleStruct>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> listStructDFset() && {
    return {static_cast<T&&>(this->__fbthrift_field_listStructDFset), __isset.at(15), __isset.bit(15)};
  }

  /** Glean { "field": "myUnion" } */
  template <typename..., typename T = ::cpp2::MyUnion>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> myUnion_ref() const& {
    return {this->__fbthrift_field_myUnion, __isset.at(16), __isset.bit(16)};
  }

  /** Glean { "field": "myUnion" } */
  template <typename..., typename T = ::cpp2::MyUnion>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> myUnion_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_myUnion), __isset.at(16), __isset.bit(16)};
  }

  /** Glean { "field": "myUnion" } */
  template <typename..., typename T = ::cpp2::MyUnion>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> myUnion_ref() & {
    return {this->__fbthrift_field_myUnion, __isset.at(16), __isset.bit(16)};
  }

  /** Glean { "field": "myUnion" } */
  template <typename..., typename T = ::cpp2::MyUnion>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> myUnion_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_myUnion), __isset.at(16), __isset.bit(16)};
  }

  /** Glean { "field": "myUnion" } */
  template <typename..., typename T = ::cpp2::MyUnion>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> myUnion() const& {
    return {this->__fbthrift_field_myUnion, __isset.at(16), __isset.bit(16)};
  }

  /** Glean { "field": "myUnion" } */
  template <typename..., typename T = ::cpp2::MyUnion>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> myUnion() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_myUnion), __isset.at(16), __isset.bit(16)};
  }

  /** Glean { "field": "myUnion" } */
  template <typename..., typename T = ::cpp2::MyUnion>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> myUnion() & {
    return {this->__fbthrift_field_myUnion, __isset.at(16), __isset.bit(16)};
  }

  /** Glean { "field": "myUnion" } */
  template <typename..., typename T = ::cpp2::MyUnion>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> myUnion() && {
    return {static_cast<T&&>(this->__fbthrift_field_myUnion), __isset.at(16), __isset.bit(16)};
  }

  /** Glean { "field": "listUnionDFset" } */
  template <typename..., typename T = ::std::vector<::cpp2::MyUnion>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> listUnionDFset_ref() const& {
    return {this->__fbthrift_field_listUnionDFset, __isset.at(17), __isset.bit(17)};
  }

  /** Glean { "field": "listUnionDFset" } */
  template <typename..., typename T = ::std::vector<::cpp2::MyUnion>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> listUnionDFset_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_listUnionDFset), __isset.at(17), __isset.bit(17)};
  }

  /** Glean { "field": "listUnionDFset" } */
  template <typename..., typename T = ::std::vector<::cpp2::MyUnion>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> listUnionDFset_ref() & {
    return {this->__fbthrift_field_listUnionDFset, __isset.at(17), __isset.bit(17)};
  }

  /** Glean { "field": "listUnionDFset" } */
  template <typename..., typename T = ::std::vector<::cpp2::MyUnion>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> listUnionDFset_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_listUnionDFset), __isset.at(17), __isset.bit(17)};
  }

  /** Glean { "field": "listUnionDFset" } */
  template <typename..., typename T = ::std::vector<::cpp2::MyUnion>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> listUnionDFset() const& {
    return {this->__fbthrift_field_listUnionDFset, __isset.at(17), __isset.bit(17)};
  }

  /** Glean { "field": "listUnionDFset" } */
  template <typename..., typename T = ::std::vector<::cpp2::MyUnion>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> listUnionDFset() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_listUnionDFset), __isset.at(17), __isset.bit(17)};
  }

  /** Glean { "field": "listUnionDFset" } */
  template <typename..., typename T = ::std::vector<::cpp2::MyUnion>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> listUnionDFset() & {
    return {this->__fbthrift_field_listUnionDFset, __isset.at(17), __isset.bit(17)};
  }

  /** Glean { "field": "listUnionDFset" } */
  template <typename..., typename T = ::std::vector<::cpp2::MyUnion>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> listUnionDFset() && {
    return {static_cast<T&&>(this->__fbthrift_field_listUnionDFset), __isset.at(17), __isset.bit(17)};
  }

  /** Glean { "field": "mapNestlistStructDfSet" } */
  template <typename..., typename T = ::std::map<::std::int32_t, ::std::vector<::cpp2::SimpleStruct>>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> mapNestlistStructDfSet_ref() const& {
    return {this->__fbthrift_field_mapNestlistStructDfSet, __isset.at(18), __isset.bit(18)};
  }

  /** Glean { "field": "mapNestlistStructDfSet" } */
  template <typename..., typename T = ::std::map<::std::int32_t, ::std::vector<::cpp2::SimpleStruct>>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> mapNestlistStructDfSet_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_mapNestlistStructDfSet), __isset.at(18), __isset.bit(18)};
  }

  /** Glean { "field": "mapNestlistStructDfSet" } */
  template <typename..., typename T = ::std::map<::std::int32_t, ::std::vector<::cpp2::SimpleStruct>>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> mapNestlistStructDfSet_ref() & {
    return {this->__fbthrift_field_mapNestlistStructDfSet, __isset.at(18), __isset.bit(18)};
  }

  /** Glean { "field": "mapNestlistStructDfSet" } */
  template <typename..., typename T = ::std::map<::std::int32_t, ::std::vector<::cpp2::SimpleStruct>>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> mapNestlistStructDfSet_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_mapNestlistStructDfSet), __isset.at(18), __isset.bit(18)};
  }

  /** Glean { "field": "mapNestlistStructDfSet" } */
  template <typename..., typename T = ::std::map<::std::int32_t, ::std::vector<::cpp2::SimpleStruct>>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> mapNestlistStructDfSet() const& {
    return {this->__fbthrift_field_mapNestlistStructDfSet, __isset.at(18), __isset.bit(18)};
  }

  /** Glean { "field": "mapNestlistStructDfSet" } */
  template <typename..., typename T = ::std::map<::std::int32_t, ::std::vector<::cpp2::SimpleStruct>>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> mapNestlistStructDfSet() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_mapNestlistStructDfSet), __isset.at(18), __isset.bit(18)};
  }

  /** Glean { "field": "mapNestlistStructDfSet" } */
  template <typename..., typename T = ::std::map<::std::int32_t, ::std::vector<::cpp2::SimpleStruct>>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> mapNestlistStructDfSet() & {
    return {this->__fbthrift_field_mapNestlistStructDfSet, __isset.at(18), __isset.bit(18)};
  }

  /** Glean { "field": "mapNestlistStructDfSet" } */
  template <typename..., typename T = ::std::map<::std::int32_t, ::std::vector<::cpp2::SimpleStruct>>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> mapNestlistStructDfSet() && {
    return {static_cast<T&&>(this->__fbthrift_field_mapNestlistStructDfSet), __isset.at(18), __isset.bit(18)};
  }

  /** Glean { "field": "mapJavaTypeDFset" } */
  template <typename..., typename T = ::cpp2::map_i64_string_5732>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> mapJavaTypeDFset_ref() const& {
    return {this->__fbthrift_field_mapJavaTypeDFset, __isset.at(19), __isset.bit(19)};
  }

  /** Glean { "field": "mapJavaTypeDFset" } */
  template <typename..., typename T = ::cpp2::map_i64_string_5732>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> mapJavaTypeDFset_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_mapJavaTypeDFset), __isset.at(19), __isset.bit(19)};
  }

  /** Glean { "field": "mapJavaTypeDFset" } */
  template <typename..., typename T = ::cpp2::map_i64_string_5732>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> mapJavaTypeDFset_ref() & {
    return {this->__fbthrift_field_mapJavaTypeDFset, __isset.at(19), __isset.bit(19)};
  }

  /** Glean { "field": "mapJavaTypeDFset" } */
  template <typename..., typename T = ::cpp2::map_i64_string_5732>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> mapJavaTypeDFset_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_mapJavaTypeDFset), __isset.at(19), __isset.bit(19)};
  }

  /** Glean { "field": "mapJavaTypeDFset" } */
  template <typename..., typename T = ::cpp2::map_i64_string_5732>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> mapJavaTypeDFset() const& {
    return {this->__fbthrift_field_mapJavaTypeDFset, __isset.at(19), __isset.bit(19)};
  }

  /** Glean { "field": "mapJavaTypeDFset" } */
  template <typename..., typename T = ::cpp2::map_i64_string_5732>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> mapJavaTypeDFset() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_mapJavaTypeDFset), __isset.at(19), __isset.bit(19)};
  }

  /** Glean { "field": "mapJavaTypeDFset" } */
  template <typename..., typename T = ::cpp2::map_i64_string_5732>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> mapJavaTypeDFset() & {
    return {this->__fbthrift_field_mapJavaTypeDFset, __isset.at(19), __isset.bit(19)};
  }

  /** Glean { "field": "mapJavaTypeDFset" } */
  template <typename..., typename T = ::cpp2::map_i64_string_5732>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> mapJavaTypeDFset() && {
    return {static_cast<T&&>(this->__fbthrift_field_mapJavaTypeDFset), __isset.at(19), __isset.bit(19)};
  }

  /** Glean { "field": "emptyMap" } */
  template <typename..., typename T = ::std::map<::std::int64_t, ::std::int32_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> emptyMap_ref() const& {
    return {this->__fbthrift_field_emptyMap, __isset.at(20), __isset.bit(20)};
  }

  /** Glean { "field": "emptyMap" } */
  template <typename..., typename T = ::std::map<::std::int64_t, ::std::int32_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> emptyMap_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_emptyMap), __isset.at(20), __isset.bit(20)};
  }

  /** Glean { "field": "emptyMap" } */
  template <typename..., typename T = ::std::map<::std::int64_t, ::std::int32_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> emptyMap_ref() & {
    return {this->__fbthrift_field_emptyMap, __isset.at(20), __isset.bit(20)};
  }

  /** Glean { "field": "emptyMap" } */
  template <typename..., typename T = ::std::map<::std::int64_t, ::std::int32_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> emptyMap_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_emptyMap), __isset.at(20), __isset.bit(20)};
  }

  /** Glean { "field": "emptyMap" } */
  template <typename..., typename T = ::std::map<::std::int64_t, ::std::int32_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> emptyMap() const& {
    return {this->__fbthrift_field_emptyMap, __isset.at(20), __isset.bit(20)};
  }

  /** Glean { "field": "emptyMap" } */
  template <typename..., typename T = ::std::map<::std::int64_t, ::std::int32_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> emptyMap() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_emptyMap), __isset.at(20), __isset.bit(20)};
  }

  /** Glean { "field": "emptyMap" } */
  template <typename..., typename T = ::std::map<::std::int64_t, ::std::int32_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> emptyMap() & {
    return {this->__fbthrift_field_emptyMap, __isset.at(20), __isset.bit(20)};
  }

  /** Glean { "field": "emptyMap" } */
  template <typename..., typename T = ::std::map<::std::int64_t, ::std::int32_t>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> emptyMap() && {
    return {static_cast<T&&>(this->__fbthrift_field_emptyMap), __isset.at(20), __isset.bit(20)};
  }

  /** Glean { "field": "enumMapDFset" } */
  template <typename..., typename T = ::std::map<::std::string, ::std::map<::std::int32_t, ::cpp2::MyEnum>>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> enumMapDFset_ref() const& {
    return {this->__fbthrift_field_enumMapDFset, __isset.at(21), __isset.bit(21)};
  }

  /** Glean { "field": "enumMapDFset" } */
  template <typename..., typename T = ::std::map<::std::string, ::std::map<::std::int32_t, ::cpp2::MyEnum>>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> enumMapDFset_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_enumMapDFset), __isset.at(21), __isset.bit(21)};
  }

  /** Glean { "field": "enumMapDFset" } */
  template <typename..., typename T = ::std::map<::std::string, ::std::map<::std::int32_t, ::cpp2::MyEnum>>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> enumMapDFset_ref() & {
    return {this->__fbthrift_field_enumMapDFset, __isset.at(21), __isset.bit(21)};
  }

  /** Glean { "field": "enumMapDFset" } */
  template <typename..., typename T = ::std::map<::std::string, ::std::map<::std::int32_t, ::cpp2::MyEnum>>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> enumMapDFset_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_enumMapDFset), __isset.at(21), __isset.bit(21)};
  }

  /** Glean { "field": "enumMapDFset" } */
  template <typename..., typename T = ::std::map<::std::string, ::std::map<::std::int32_t, ::cpp2::MyEnum>>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> enumMapDFset() const& {
    return {this->__fbthrift_field_enumMapDFset, __isset.at(21), __isset.bit(21)};
  }

  /** Glean { "field": "enumMapDFset" } */
  template <typename..., typename T = ::std::map<::std::string, ::std::map<::std::int32_t, ::cpp2::MyEnum>>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> enumMapDFset() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_enumMapDFset), __isset.at(21), __isset.bit(21)};
  }

  /** Glean { "field": "enumMapDFset" } */
  template <typename..., typename T = ::std::map<::std::string, ::std::map<::std::int32_t, ::cpp2::MyEnum>>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> enumMapDFset() & {
    return {this->__fbthrift_field_enumMapDFset, __isset.at(21), __isset.bit(21)};
  }

  /** Glean { "field": "enumMapDFset" } */
  template <typename..., typename T = ::std::map<::std::string, ::std::map<::std::int32_t, ::cpp2::MyEnum>>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> enumMapDFset() && {
    return {static_cast<T&&>(this->__fbthrift_field_enumMapDFset), __isset.at(21), __isset.bit(21)};
  }

  /** Glean { "field": "myLongDFset" } */
  ::std::int64_t get_myLongDFset() const {
    return __fbthrift_field_myLongDFset;
  }

  /** Glean { "field": "myLongDFset" } */
  [[deprecated("Use `FOO.myLongDFset() = BAR;` instead of `FOO.set_myLongDFset(BAR);`")]]
  ::std::int64_t& set_myLongDFset(::std::int64_t myLongDFset_) {
    myLongDFset_ref() = myLongDFset_;
    return __fbthrift_field_myLongDFset;
  }

  /** Glean { "field": "myLongDF" } */
  ::std::int64_t get_myLongDF() const {
    return __fbthrift_field_myLongDF;
  }

  /** Glean { "field": "myLongDF" } */
  [[deprecated("Use `FOO.myLongDF() = BAR;` instead of `FOO.set_myLongDF(BAR);`")]]
  ::std::int64_t& set_myLongDF(::std::int64_t myLongDF_) {
    myLongDF_ref() = myLongDF_;
    return __fbthrift_field_myLongDF;
  }

  /** Glean { "field": "portDFset" } */
  ::std::int32_t get_portDFset() const {
    return __fbthrift_field_portDFset;
  }

  /** Glean { "field": "portDFset" } */
  [[deprecated("Use `FOO.portDFset() = BAR;` instead of `FOO.set_portDFset(BAR);`")]]
  ::std::int32_t& set_portDFset(::std::int32_t portDFset_) {
    portDFset_ref() = portDFset_;
    return __fbthrift_field_portDFset;
  }

  /** Glean { "field": "portNum" } */
  ::std::int32_t get_portNum() const {
    return __fbthrift_field_portNum;
  }

  /** Glean { "field": "portNum" } */
  [[deprecated("Use `FOO.portNum() = BAR;` instead of `FOO.set_portNum(BAR);`")]]
  ::std::int32_t& set_portNum(::std::int32_t portNum_) {
    portNum_ref() = portNum_;
    return __fbthrift_field_portNum;
  }

  /** Glean { "field": "myBinaryDFset" } */
  const ::std::string& get_myBinaryDFset() const& {
    return __fbthrift_field_myBinaryDFset;
  }

  /** Glean { "field": "myBinaryDFset" } */
  ::std::string get_myBinaryDFset() && {
    return std::move(__fbthrift_field_myBinaryDFset);
  }

  /** Glean { "field": "myBinaryDFset" } */
  template <typename T_defaultStruct_myBinaryDFset_struct_setter = ::std::string>
  [[deprecated("Use `FOO.myBinaryDFset() = BAR;` instead of `FOO.set_myBinaryDFset(BAR);`")]]
  ::std::string& set_myBinaryDFset(T_defaultStruct_myBinaryDFset_struct_setter&& myBinaryDFset_) {
    myBinaryDFset_ref() = std::forward<T_defaultStruct_myBinaryDFset_struct_setter>(myBinaryDFset_);
    return __fbthrift_field_myBinaryDFset;
  }

  /** Glean { "field": "myBinary" } */
  const ::std::string& get_myBinary() const& {
    return __fbthrift_field_myBinary;
  }

  /** Glean { "field": "myBinary" } */
  ::std::string get_myBinary() && {
    return std::move(__fbthrift_field_myBinary);
  }

  /** Glean { "field": "myBinary" } */
  template <typename T_defaultStruct_myBinary_struct_setter = ::std::string>
  [[deprecated("Use `FOO.myBinary() = BAR;` instead of `FOO.set_myBinary(BAR);`")]]
  ::std::string& set_myBinary(T_defaultStruct_myBinary_struct_setter&& myBinary_) {
    myBinary_ref() = std::forward<T_defaultStruct_myBinary_struct_setter>(myBinary_);
    return __fbthrift_field_myBinary;
  }

  /** Glean { "field": "myByteDFSet" } */
  ::std::int8_t get_myByteDFSet() const {
    return __fbthrift_field_myByteDFSet;
  }

  /** Glean { "field": "myByteDFSet" } */
  [[deprecated("Use `FOO.myByteDFSet() = BAR;` instead of `FOO.set_myByteDFSet(BAR);`")]]
  ::std::int8_t& set_myByteDFSet(::std::int8_t myByteDFSet_) {
    myByteDFSet_ref() = myByteDFSet_;
    return __fbthrift_field_myByteDFSet;
  }

  /** Glean { "field": "myByte" } */
  ::std::int8_t get_myByte() const {
    return __fbthrift_field_myByte;
  }

  /** Glean { "field": "myByte" } */
  [[deprecated("Use `FOO.myByte() = BAR;` instead of `FOO.set_myByte(BAR);`")]]
  ::std::int8_t& set_myByte(::std::int8_t myByte_) {
    myByte_ref() = myByte_;
    return __fbthrift_field_myByte;
  }

  /** Glean { "field": "myDoubleDFset" } */
  double get_myDoubleDFset() const {
    return __fbthrift_field_myDoubleDFset;
  }

  /** Glean { "field": "myDoubleDFset" } */
  [[deprecated("Use `FOO.myDoubleDFset() = BAR;` instead of `FOO.set_myDoubleDFset(BAR);`")]]
  double& set_myDoubleDFset(double myDoubleDFset_) {
    myDoubleDFset_ref() = myDoubleDFset_;
    return __fbthrift_field_myDoubleDFset;
  }

  /** Glean { "field": "myDoubleDFZero" } */
  double get_myDoubleDFZero() const {
    return __fbthrift_field_myDoubleDFZero;
  }

  /** Glean { "field": "myDoubleDFZero" } */
  [[deprecated("Use `FOO.myDoubleDFZero() = BAR;` instead of `FOO.set_myDoubleDFZero(BAR);`")]]
  double& set_myDoubleDFZero(double myDoubleDFZero_) {
    myDoubleDFZero_ref() = myDoubleDFZero_;
    return __fbthrift_field_myDoubleDFZero;
  }

  /** Glean { "field": "myDouble" } */
  double get_myDouble() const {
    return __fbthrift_field_myDouble;
  }

  /** Glean { "field": "myDouble" } */
  [[deprecated("Use `FOO.myDouble() = BAR;` instead of `FOO.set_myDouble(BAR);`")]]
  double& set_myDouble(double myDouble_) {
    myDouble_ref() = myDouble_;
    return __fbthrift_field_myDouble;
  }
  /** Glean { "field": "field3" } */
  const ::std::map<::std::int32_t, ::std::string>& get_field3() const&;
  /** Glean { "field": "field3" } */
  ::std::map<::std::int32_t, ::std::string> get_field3() &&;

  /** Glean { "field": "field3" } */
  template <typename T_defaultStruct_field3_struct_setter = ::std::map<::std::int32_t, ::std::string>>
  [[deprecated("Use `FOO.field3() = BAR;` instead of `FOO.set_field3(BAR);`")]]
  ::std::map<::std::int32_t, ::std::string>& set_field3(T_defaultStruct_field3_struct_setter&& field3_) {
    field3_ref() = std::forward<T_defaultStruct_field3_struct_setter>(field3_);
    return __fbthrift_field_field3;
  }
  /** Glean { "field": "myList" } */
  const ::std::vector<::cpp2::MyEnum>& get_myList() const&;
  /** Glean { "field": "myList" } */
  ::std::vector<::cpp2::MyEnum> get_myList() &&;

  /** Glean { "field": "myList" } */
  template <typename T_defaultStruct_myList_struct_setter = ::std::vector<::cpp2::MyEnum>>
  [[deprecated("Use `FOO.myList() = BAR;` instead of `FOO.set_myList(BAR);`")]]
  ::std::vector<::cpp2::MyEnum>& set_myList(T_defaultStruct_myList_struct_setter&& myList_) {
    myList_ref() = std::forward<T_defaultStruct_myList_struct_setter>(myList_);
    return __fbthrift_field_myList;
  }
  /** Glean { "field": "mySet" } */
  const ::std::set<::std::string>& get_mySet() const&;
  /** Glean { "field": "mySet" } */
  ::std::set<::std::string> get_mySet() &&;

  /** Glean { "field": "mySet" } */
  template <typename T_defaultStruct_mySet_struct_setter = ::std::set<::std::string>>
  [[deprecated("Use `FOO.mySet() = BAR;` instead of `FOO.set_mySet(BAR);`")]]
  ::std::set<::std::string>& set_mySet(T_defaultStruct_mySet_struct_setter&& mySet_) {
    mySet_ref() = std::forward<T_defaultStruct_mySet_struct_setter>(mySet_);
    return __fbthrift_field_mySet;
  }
  /** Glean { "field": "simpleStruct" } */
  const ::cpp2::SimpleStruct& get_simpleStruct() const&;
  /** Glean { "field": "simpleStruct" } */
  ::cpp2::SimpleStruct get_simpleStruct() &&;

  /** Glean { "field": "simpleStruct" } */
  template <typename T_defaultStruct_simpleStruct_struct_setter = ::cpp2::SimpleStruct>
  [[deprecated("Use `FOO.simpleStruct() = BAR;` instead of `FOO.set_simpleStruct(BAR);`")]]
  ::cpp2::SimpleStruct& set_simpleStruct(T_defaultStruct_simpleStruct_struct_setter&& simpleStruct_) {
    simpleStruct_ref() = std::forward<T_defaultStruct_simpleStruct_struct_setter>(simpleStruct_);
    return __fbthrift_field_simpleStruct;
  }
  /** Glean { "field": "listStructDFset" } */
  const ::std::vector<::cpp2::SimpleStruct>& get_listStructDFset() const&;
  /** Glean { "field": "listStructDFset" } */
  ::std::vector<::cpp2::SimpleStruct> get_listStructDFset() &&;

  /** Glean { "field": "listStructDFset" } */
  template <typename T_defaultStruct_listStructDFset_struct_setter = ::std::vector<::cpp2::SimpleStruct>>
  [[deprecated("Use `FOO.listStructDFset() = BAR;` instead of `FOO.set_listStructDFset(BAR);`")]]
  ::std::vector<::cpp2::SimpleStruct>& set_listStructDFset(T_defaultStruct_listStructDFset_struct_setter&& listStructDFset_) {
    listStructDFset_ref() = std::forward<T_defaultStruct_listStructDFset_struct_setter>(listStructDFset_);
    return __fbthrift_field_listStructDFset;
  }
  /** Glean { "field": "myUnion" } */
  const ::cpp2::MyUnion& get_myUnion() const&;
  /** Glean { "field": "myUnion" } */
  ::cpp2::MyUnion get_myUnion() &&;

  /** Glean { "field": "myUnion" } */
  template <typename T_defaultStruct_myUnion_struct_setter = ::cpp2::MyUnion>
  [[deprecated("Use `FOO.myUnion() = BAR;` instead of `FOO.set_myUnion(BAR);`")]]
  ::cpp2::MyUnion& set_myUnion(T_defaultStruct_myUnion_struct_setter&& myUnion_) {
    myUnion_ref() = std::forward<T_defaultStruct_myUnion_struct_setter>(myUnion_);
    return __fbthrift_field_myUnion;
  }
  /** Glean { "field": "listUnionDFset" } */
  const ::std::vector<::cpp2::MyUnion>& get_listUnionDFset() const&;
  /** Glean { "field": "listUnionDFset" } */
  ::std::vector<::cpp2::MyUnion> get_listUnionDFset() &&;

  /** Glean { "field": "listUnionDFset" } */
  template <typename T_defaultStruct_listUnionDFset_struct_setter = ::std::vector<::cpp2::MyUnion>>
  [[deprecated("Use `FOO.listUnionDFset() = BAR;` instead of `FOO.set_listUnionDFset(BAR);`")]]
  ::std::vector<::cpp2::MyUnion>& set_listUnionDFset(T_defaultStruct_listUnionDFset_struct_setter&& listUnionDFset_) {
    listUnionDFset_ref() = std::forward<T_defaultStruct_listUnionDFset_struct_setter>(listUnionDFset_);
    return __fbthrift_field_listUnionDFset;
  }
  /** Glean { "field": "mapNestlistStructDfSet" } */
  const ::std::map<::std::int32_t, ::std::vector<::cpp2::SimpleStruct>>& get_mapNestlistStructDfSet() const&;
  /** Glean { "field": "mapNestlistStructDfSet" } */
  ::std::map<::std::int32_t, ::std::vector<::cpp2::SimpleStruct>> get_mapNestlistStructDfSet() &&;

  /** Glean { "field": "mapNestlistStructDfSet" } */
  template <typename T_defaultStruct_mapNestlistStructDfSet_struct_setter = ::std::map<::std::int32_t, ::std::vector<::cpp2::SimpleStruct>>>
  [[deprecated("Use `FOO.mapNestlistStructDfSet() = BAR;` instead of `FOO.set_mapNestlistStructDfSet(BAR);`")]]
  ::std::map<::std::int32_t, ::std::vector<::cpp2::SimpleStruct>>& set_mapNestlistStructDfSet(T_defaultStruct_mapNestlistStructDfSet_struct_setter&& mapNestlistStructDfSet_) {
    mapNestlistStructDfSet_ref() = std::forward<T_defaultStruct_mapNestlistStructDfSet_struct_setter>(mapNestlistStructDfSet_);
    return __fbthrift_field_mapNestlistStructDfSet;
  }
  /** Glean { "field": "mapJavaTypeDFset" } */
  const ::cpp2::map_i64_string_5732& get_mapJavaTypeDFset() const&;
  /** Glean { "field": "mapJavaTypeDFset" } */
  ::cpp2::map_i64_string_5732 get_mapJavaTypeDFset() &&;

  /** Glean { "field": "mapJavaTypeDFset" } */
  template <typename T_defaultStruct_mapJavaTypeDFset_struct_setter = ::cpp2::map_i64_string_5732>
  [[deprecated("Use `FOO.mapJavaTypeDFset() = BAR;` instead of `FOO.set_mapJavaTypeDFset(BAR);`")]]
  ::cpp2::map_i64_string_5732& set_mapJavaTypeDFset(T_defaultStruct_mapJavaTypeDFset_struct_setter&& mapJavaTypeDFset_) {
    mapJavaTypeDFset_ref() = std::forward<T_defaultStruct_mapJavaTypeDFset_struct_setter>(mapJavaTypeDFset_);
    return __fbthrift_field_mapJavaTypeDFset;
  }
  /** Glean { "field": "emptyMap" } */
  const ::std::map<::std::int64_t, ::std::int32_t>& get_emptyMap() const&;
  /** Glean { "field": "emptyMap" } */
  ::std::map<::std::int64_t, ::std::int32_t> get_emptyMap() &&;

  /** Glean { "field": "emptyMap" } */
  template <typename T_defaultStruct_emptyMap_struct_setter = ::std::map<::std::int64_t, ::std::int32_t>>
  [[deprecated("Use `FOO.emptyMap() = BAR;` instead of `FOO.set_emptyMap(BAR);`")]]
  ::std::map<::std::int64_t, ::std::int32_t>& set_emptyMap(T_defaultStruct_emptyMap_struct_setter&& emptyMap_) {
    emptyMap_ref() = std::forward<T_defaultStruct_emptyMap_struct_setter>(emptyMap_);
    return __fbthrift_field_emptyMap;
  }
  /** Glean { "field": "enumMapDFset" } */
  const ::std::map<::std::string, ::std::map<::std::int32_t, ::cpp2::MyEnum>>& get_enumMapDFset() const&;
  /** Glean { "field": "enumMapDFset" } */
  ::std::map<::std::string, ::std::map<::std::int32_t, ::cpp2::MyEnum>> get_enumMapDFset() &&;

  /** Glean { "field": "enumMapDFset" } */
  template <typename T_defaultStruct_enumMapDFset_struct_setter = ::std::map<::std::string, ::std::map<::std::int32_t, ::cpp2::MyEnum>>>
  [[deprecated("Use `FOO.enumMapDFset() = BAR;` instead of `FOO.set_enumMapDFset(BAR);`")]]
  ::std::map<::std::string, ::std::map<::std::int32_t, ::cpp2::MyEnum>>& set_enumMapDFset(T_defaultStruct_enumMapDFset_struct_setter&& enumMapDFset_) {
    enumMapDFset_ref() = std::forward<T_defaultStruct_enumMapDFset_struct_setter>(enumMapDFset_);
    return __fbthrift_field_enumMapDFset;
  }

  template <class Protocol_>
  unsigned long read(Protocol_* iprot);
  template <class Protocol_>
  uint32_t serializedSize(Protocol_ const* prot_) const;
  template <class Protocol_>
  uint32_t serializedSizeZC(Protocol_ const* prot_) const;
  template <class Protocol_>
  uint32_t write(Protocol_* prot_) const;

 private:
  template <class Protocol_>
  void readNoXfer(Protocol_* iprot);

  friend class ::apache::thrift::Cpp2Ops<defaultStruct>;
  friend void swap(defaultStruct& a, defaultStruct& b);
};

template <class Protocol_>
unsigned long defaultStruct::read(Protocol_* iprot) {
  auto _xferStart = iprot->getCursorPosition();
  readNoXfer(iprot);
  return iprot->getCursorPosition() - _xferStart;
}


/** Glean {"file": "thrift/compiler/test/fixtures/complex-struct/src/module.thrift", "name": "MyStructTypeDef", "kind": "struct" } */
class MyStructTypeDef final  {
 private:
  friend struct ::apache::thrift::detail::st::struct_private_access;
  template<class> friend struct ::apache::thrift::detail::invoke_reffer;

  //  used by a static_assert in the corresponding source
  static constexpr bool __fbthrift_cpp2_gen_json = false;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  static std::string_view __fbthrift_get_field_name(::apache::thrift::FieldOrdinal ord);
  static std::string_view __fbthrift_get_class_name();
  using __fbthrift_reflection_ident_list = folly::tag_t<
    ::apache::thrift::ident::myLongField,
    ::apache::thrift::ident::myLongTypeDef,
    ::apache::thrift::ident::myStringField,
    ::apache::thrift::ident::myStringTypedef,
    ::apache::thrift::ident::myMapField,
    ::apache::thrift::ident::myMapTypedef,
    ::apache::thrift::ident::myListField,
    ::apache::thrift::ident::myListTypedef,
    ::apache::thrift::ident::myMapListOfTypeDef
  >;

  static constexpr std::int16_t __fbthrift_reflection_field_id_list[] = {0,1,2,3,4,5,6,7,8,9};
  using __fbthrift_reflection_type_tags = folly::tag_t<
    ::apache::thrift::type::i64_t,
    ::apache::thrift::type::i64_t,
    ::apache::thrift::type::string_t,
    ::apache::thrift::type::string_t,
    ::apache::thrift::type::map<::apache::thrift::type::i16_t, ::apache::thrift::type::string_t>,
    ::apache::thrift::type::map<::apache::thrift::type::i16_t, ::apache::thrift::type::string_t>,
    ::apache::thrift::type::list<::apache::thrift::type::double_t>,
    ::apache::thrift::type::list<::apache::thrift::type::double_t>,
    ::apache::thrift::type::map<::apache::thrift::type::i16_t, ::apache::thrift::type::list<::apache::thrift::type::list<::apache::thrift::type::double_t>>>
  >;

  static constexpr std::size_t __fbthrift_field_size_v = 9;

  template<class T>
  using __fbthrift_id = ::apache::thrift::type::field_id<__fbthrift_reflection_field_id_list[folly::to_underlying(T::value)]>;

  template<class T>
  using __fbthrift_type_tag = ::apache::thrift::detail::at<__fbthrift_reflection_type_tags, T::value>;

  template<class T>
  using __fbthrift_ident = ::apache::thrift::detail::at<__fbthrift_reflection_ident_list, T::value>;

  template<class T> using __fbthrift_ordinal = ::apache::thrift::type::ordinal_tag<
    ::apache::thrift::detail::getFieldOrdinal<T,
                                              __fbthrift_reflection_ident_list,
                                              __fbthrift_reflection_type_tags>(
      __fbthrift_reflection_field_id_list
    )
  >;
  void __fbthrift_clear();
  void __fbthrift_clear_terse_fields();
  bool __fbthrift_is_empty() const;

 public:
  using __fbthrift_cpp2_type = MyStructTypeDef;
  static constexpr bool __fbthrift_cpp2_is_union =
    false;
  static constexpr bool __fbthrift_cpp2_uses_op_encode =
    false;


 public:

  MyStructTypeDef();

  // FragileConstructor for use in initialization lists only.
  [[deprecated("This constructor is deprecated")]]
  MyStructTypeDef(apache::thrift::FragileConstructor, ::std::int64_t myLongField__arg, ::cpp2::longTypeDef myLongTypeDef__arg, ::std::string myStringField__arg, ::cpp2::stringTypedef myStringTypedef__arg, ::std::map<::std::int16_t, ::std::string> myMapField__arg, ::cpp2::mapTypedef myMapTypedef__arg, ::std::vector<double> myListField__arg, ::cpp2::listTypedef myListTypedef__arg, ::std::map<::std::int16_t, ::std::vector<::cpp2::listTypedef>> myMapListOfTypeDef__arg);

  MyStructTypeDef(MyStructTypeDef&&) noexcept;

  MyStructTypeDef(const MyStructTypeDef& src);


  MyStructTypeDef& operator=(MyStructTypeDef&&) noexcept;
  MyStructTypeDef& operator=(const MyStructTypeDef& src);

  ~MyStructTypeDef();

 private:
  ::std::int64_t __fbthrift_field_myLongField;
 private:
  ::cpp2::longTypeDef __fbthrift_field_myLongTypeDef;
 private:
  ::std::string __fbthrift_field_myStringField;
 private:
  ::cpp2::stringTypedef __fbthrift_field_myStringTypedef;
 private:
  ::std::map<::std::int16_t, ::std::string> __fbthrift_field_myMapField;
 private:
  ::cpp2::mapTypedef __fbthrift_field_myMapTypedef;
 private:
  ::std::vector<double> __fbthrift_field_myListField;
 private:
  ::cpp2::listTypedef __fbthrift_field_myListTypedef;
 private:
  ::std::map<::std::int16_t, ::std::vector<::cpp2::listTypedef>> __fbthrift_field_myMapListOfTypeDef;
 private:
  apache::thrift::detail::isset_bitset<9, apache::thrift::detail::IssetBitsetOption::Unpacked> __isset;

 public:

  bool operator==(const MyStructTypeDef&) const;
  bool operator<(const MyStructTypeDef&) const;

  /** Glean { "field": "myLongField" } */
  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> myLongField_ref() const& {
    return {this->__fbthrift_field_myLongField, __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "myLongField" } */
  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> myLongField_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_myLongField), __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "myLongField" } */
  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> myLongField_ref() & {
    return {this->__fbthrift_field_myLongField, __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "myLongField" } */
  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> myLongField_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_myLongField), __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "myLongField" } */
  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> myLongField() const& {
    return {this->__fbthrift_field_myLongField, __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "myLongField" } */
  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> myLongField() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_myLongField), __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "myLongField" } */
  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> myLongField() & {
    return {this->__fbthrift_field_myLongField, __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "myLongField" } */
  template <typename..., typename T = ::std::int64_t>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> myLongField() && {
    return {static_cast<T&&>(this->__fbthrift_field_myLongField), __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "myLongTypeDef" } */
  template <typename..., typename T = ::cpp2::longTypeDef>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> myLongTypeDef_ref() const& {
    return {this->__fbthrift_field_myLongTypeDef, __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "myLongTypeDef" } */
  template <typename..., typename T = ::cpp2::longTypeDef>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> myLongTypeDef_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_myLongTypeDef), __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "myLongTypeDef" } */
  template <typename..., typename T = ::cpp2::longTypeDef>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> myLongTypeDef_ref() & {
    return {this->__fbthrift_field_myLongTypeDef, __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "myLongTypeDef" } */
  template <typename..., typename T = ::cpp2::longTypeDef>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> myLongTypeDef_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_myLongTypeDef), __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "myLongTypeDef" } */
  template <typename..., typename T = ::cpp2::longTypeDef>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> myLongTypeDef() const& {
    return {this->__fbthrift_field_myLongTypeDef, __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "myLongTypeDef" } */
  template <typename..., typename T = ::cpp2::longTypeDef>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> myLongTypeDef() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_myLongTypeDef), __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "myLongTypeDef" } */
  template <typename..., typename T = ::cpp2::longTypeDef>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> myLongTypeDef() & {
    return {this->__fbthrift_field_myLongTypeDef, __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "myLongTypeDef" } */
  template <typename..., typename T = ::cpp2::longTypeDef>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> myLongTypeDef() && {
    return {static_cast<T&&>(this->__fbthrift_field_myLongTypeDef), __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "myStringField" } */
  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> myStringField_ref() const& {
    return {this->__fbthrift_field_myStringField, __isset.at(2), __isset.bit(2)};
  }

  /** Glean { "field": "myStringField" } */
  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> myStringField_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_myStringField), __isset.at(2), __isset.bit(2)};
  }

  /** Glean { "field": "myStringField" } */
  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> myStringField_ref() & {
    return {this->__fbthrift_field_myStringField, __isset.at(2), __isset.bit(2)};
  }

  /** Glean { "field": "myStringField" } */
  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> myStringField_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_myStringField), __isset.at(2), __isset.bit(2)};
  }

  /** Glean { "field": "myStringField" } */
  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> myStringField() const& {
    return {this->__fbthrift_field_myStringField, __isset.at(2), __isset.bit(2)};
  }

  /** Glean { "field": "myStringField" } */
  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> myStringField() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_myStringField), __isset.at(2), __isset.bit(2)};
  }

  /** Glean { "field": "myStringField" } */
  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> myStringField() & {
    return {this->__fbthrift_field_myStringField, __isset.at(2), __isset.bit(2)};
  }

  /** Glean { "field": "myStringField" } */
  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> myStringField() && {
    return {static_cast<T&&>(this->__fbthrift_field_myStringField), __isset.at(2), __isset.bit(2)};
  }

  /** Glean { "field": "myStringTypedef" } */
  template <typename..., typename T = ::cpp2::stringTypedef>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> myStringTypedef_ref() const& {
    return {this->__fbthrift_field_myStringTypedef, __isset.at(3), __isset.bit(3)};
  }

  /** Glean { "field": "myStringTypedef" } */
  template <typename..., typename T = ::cpp2::stringTypedef>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> myStringTypedef_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_myStringTypedef), __isset.at(3), __isset.bit(3)};
  }

  /** Glean { "field": "myStringTypedef" } */
  template <typename..., typename T = ::cpp2::stringTypedef>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> myStringTypedef_ref() & {
    return {this->__fbthrift_field_myStringTypedef, __isset.at(3), __isset.bit(3)};
  }

  /** Glean { "field": "myStringTypedef" } */
  template <typename..., typename T = ::cpp2::stringTypedef>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> myStringTypedef_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_myStringTypedef), __isset.at(3), __isset.bit(3)};
  }

  /** Glean { "field": "myStringTypedef" } */
  template <typename..., typename T = ::cpp2::stringTypedef>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> myStringTypedef() const& {
    return {this->__fbthrift_field_myStringTypedef, __isset.at(3), __isset.bit(3)};
  }

  /** Glean { "field": "myStringTypedef" } */
  template <typename..., typename T = ::cpp2::stringTypedef>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> myStringTypedef() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_myStringTypedef), __isset.at(3), __isset.bit(3)};
  }

  /** Glean { "field": "myStringTypedef" } */
  template <typename..., typename T = ::cpp2::stringTypedef>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> myStringTypedef() & {
    return {this->__fbthrift_field_myStringTypedef, __isset.at(3), __isset.bit(3)};
  }

  /** Glean { "field": "myStringTypedef" } */
  template <typename..., typename T = ::cpp2::stringTypedef>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> myStringTypedef() && {
    return {static_cast<T&&>(this->__fbthrift_field_myStringTypedef), __isset.at(3), __isset.bit(3)};
  }

  /** Glean { "field": "myMapField" } */
  template <typename..., typename T = ::std::map<::std::int16_t, ::std::string>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> myMapField_ref() const& {
    return {this->__fbthrift_field_myMapField, __isset.at(4), __isset.bit(4)};
  }

  /** Glean { "field": "myMapField" } */
  template <typename..., typename T = ::std::map<::std::int16_t, ::std::string>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> myMapField_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_myMapField), __isset.at(4), __isset.bit(4)};
  }

  /** Glean { "field": "myMapField" } */
  template <typename..., typename T = ::std::map<::std::int16_t, ::std::string>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> myMapField_ref() & {
    return {this->__fbthrift_field_myMapField, __isset.at(4), __isset.bit(4)};
  }

  /** Glean { "field": "myMapField" } */
  template <typename..., typename T = ::std::map<::std::int16_t, ::std::string>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> myMapField_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_myMapField), __isset.at(4), __isset.bit(4)};
  }

  /** Glean { "field": "myMapField" } */
  template <typename..., typename T = ::std::map<::std::int16_t, ::std::string>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> myMapField() const& {
    return {this->__fbthrift_field_myMapField, __isset.at(4), __isset.bit(4)};
  }

  /** Glean { "field": "myMapField" } */
  template <typename..., typename T = ::std::map<::std::int16_t, ::std::string>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> myMapField() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_myMapField), __isset.at(4), __isset.bit(4)};
  }

  /** Glean { "field": "myMapField" } */
  template <typename..., typename T = ::std::map<::std::int16_t, ::std::string>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> myMapField() & {
    return {this->__fbthrift_field_myMapField, __isset.at(4), __isset.bit(4)};
  }

  /** Glean { "field": "myMapField" } */
  template <typename..., typename T = ::std::map<::std::int16_t, ::std::string>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> myMapField() && {
    return {static_cast<T&&>(this->__fbthrift_field_myMapField), __isset.at(4), __isset.bit(4)};
  }

  /** Glean { "field": "myMapTypedef" } */
  template <typename..., typename T = ::cpp2::mapTypedef>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> myMapTypedef_ref() const& {
    return {this->__fbthrift_field_myMapTypedef, __isset.at(5), __isset.bit(5)};
  }

  /** Glean { "field": "myMapTypedef" } */
  template <typename..., typename T = ::cpp2::mapTypedef>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> myMapTypedef_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_myMapTypedef), __isset.at(5), __isset.bit(5)};
  }

  /** Glean { "field": "myMapTypedef" } */
  template <typename..., typename T = ::cpp2::mapTypedef>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> myMapTypedef_ref() & {
    return {this->__fbthrift_field_myMapTypedef, __isset.at(5), __isset.bit(5)};
  }

  /** Glean { "field": "myMapTypedef" } */
  template <typename..., typename T = ::cpp2::mapTypedef>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> myMapTypedef_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_myMapTypedef), __isset.at(5), __isset.bit(5)};
  }

  /** Glean { "field": "myMapTypedef" } */
  template <typename..., typename T = ::cpp2::mapTypedef>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> myMapTypedef() const& {
    return {this->__fbthrift_field_myMapTypedef, __isset.at(5), __isset.bit(5)};
  }

  /** Glean { "field": "myMapTypedef" } */
  template <typename..., typename T = ::cpp2::mapTypedef>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> myMapTypedef() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_myMapTypedef), __isset.at(5), __isset.bit(5)};
  }

  /** Glean { "field": "myMapTypedef" } */
  template <typename..., typename T = ::cpp2::mapTypedef>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> myMapTypedef() & {
    return {this->__fbthrift_field_myMapTypedef, __isset.at(5), __isset.bit(5)};
  }

  /** Glean { "field": "myMapTypedef" } */
  template <typename..., typename T = ::cpp2::mapTypedef>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> myMapTypedef() && {
    return {static_cast<T&&>(this->__fbthrift_field_myMapTypedef), __isset.at(5), __isset.bit(5)};
  }

  /** Glean { "field": "myListField" } */
  template <typename..., typename T = ::std::vector<double>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> myListField_ref() const& {
    return {this->__fbthrift_field_myListField, __isset.at(6), __isset.bit(6)};
  }

  /** Glean { "field": "myListField" } */
  template <typename..., typename T = ::std::vector<double>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> myListField_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_myListField), __isset.at(6), __isset.bit(6)};
  }

  /** Glean { "field": "myListField" } */
  template <typename..., typename T = ::std::vector<double>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> myListField_ref() & {
    return {this->__fbthrift_field_myListField, __isset.at(6), __isset.bit(6)};
  }

  /** Glean { "field": "myListField" } */
  template <typename..., typename T = ::std::vector<double>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> myListField_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_myListField), __isset.at(6), __isset.bit(6)};
  }

  /** Glean { "field": "myListField" } */
  template <typename..., typename T = ::std::vector<double>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> myListField() const& {
    return {this->__fbthrift_field_myListField, __isset.at(6), __isset.bit(6)};
  }

  /** Glean { "field": "myListField" } */
  template <typename..., typename T = ::std::vector<double>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> myListField() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_myListField), __isset.at(6), __isset.bit(6)};
  }

  /** Glean { "field": "myListField" } */
  template <typename..., typename T = ::std::vector<double>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> myListField() & {
    return {this->__fbthrift_field_myListField, __isset.at(6), __isset.bit(6)};
  }

  /** Glean { "field": "myListField" } */
  template <typename..., typename T = ::std::vector<double>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> myListField() && {
    return {static_cast<T&&>(this->__fbthrift_field_myListField), __isset.at(6), __isset.bit(6)};
  }

  /** Glean { "field": "myListTypedef" } */
  template <typename..., typename T = ::cpp2::listTypedef>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> myListTypedef_ref() const& {
    return {this->__fbthrift_field_myListTypedef, __isset.at(7), __isset.bit(7)};
  }

  /** Glean { "field": "myListTypedef" } */
  template <typename..., typename T = ::cpp2::listTypedef>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> myListTypedef_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_myListTypedef), __isset.at(7), __isset.bit(7)};
  }

  /** Glean { "field": "myListTypedef" } */
  template <typename..., typename T = ::cpp2::listTypedef>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> myListTypedef_ref() & {
    return {this->__fbthrift_field_myListTypedef, __isset.at(7), __isset.bit(7)};
  }

  /** Glean { "field": "myListTypedef" } */
  template <typename..., typename T = ::cpp2::listTypedef>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> myListTypedef_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_myListTypedef), __isset.at(7), __isset.bit(7)};
  }

  /** Glean { "field": "myListTypedef" } */
  template <typename..., typename T = ::cpp2::listTypedef>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> myListTypedef() const& {
    return {this->__fbthrift_field_myListTypedef, __isset.at(7), __isset.bit(7)};
  }

  /** Glean { "field": "myListTypedef" } */
  template <typename..., typename T = ::cpp2::listTypedef>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> myListTypedef() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_myListTypedef), __isset.at(7), __isset.bit(7)};
  }

  /** Glean { "field": "myListTypedef" } */
  template <typename..., typename T = ::cpp2::listTypedef>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> myListTypedef() & {
    return {this->__fbthrift_field_myListTypedef, __isset.at(7), __isset.bit(7)};
  }

  /** Glean { "field": "myListTypedef" } */
  template <typename..., typename T = ::cpp2::listTypedef>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> myListTypedef() && {
    return {static_cast<T&&>(this->__fbthrift_field_myListTypedef), __isset.at(7), __isset.bit(7)};
  }

  /** Glean { "field": "myMapListOfTypeDef" } */
  template <typename..., typename T = ::std::map<::std::int16_t, ::std::vector<::cpp2::listTypedef>>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> myMapListOfTypeDef_ref() const& {
    return {this->__fbthrift_field_myMapListOfTypeDef, __isset.at(8), __isset.bit(8)};
  }

  /** Glean { "field": "myMapListOfTypeDef" } */
  template <typename..., typename T = ::std::map<::std::int16_t, ::std::vector<::cpp2::listTypedef>>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> myMapListOfTypeDef_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_myMapListOfTypeDef), __isset.at(8), __isset.bit(8)};
  }

  /** Glean { "field": "myMapListOfTypeDef" } */
  template <typename..., typename T = ::std::map<::std::int16_t, ::std::vector<::cpp2::listTypedef>>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> myMapListOfTypeDef_ref() & {
    return {this->__fbthrift_field_myMapListOfTypeDef, __isset.at(8), __isset.bit(8)};
  }

  /** Glean { "field": "myMapListOfTypeDef" } */
  template <typename..., typename T = ::std::map<::std::int16_t, ::std::vector<::cpp2::listTypedef>>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> myMapListOfTypeDef_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_myMapListOfTypeDef), __isset.at(8), __isset.bit(8)};
  }

  /** Glean { "field": "myMapListOfTypeDef" } */
  template <typename..., typename T = ::std::map<::std::int16_t, ::std::vector<::cpp2::listTypedef>>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> myMapListOfTypeDef() const& {
    return {this->__fbthrift_field_myMapListOfTypeDef, __isset.at(8), __isset.bit(8)};
  }

  /** Glean { "field": "myMapListOfTypeDef" } */
  template <typename..., typename T = ::std::map<::std::int16_t, ::std::vector<::cpp2::listTypedef>>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> myMapListOfTypeDef() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_myMapListOfTypeDef), __isset.at(8), __isset.bit(8)};
  }

  /** Glean { "field": "myMapListOfTypeDef" } */
  template <typename..., typename T = ::std::map<::std::int16_t, ::std::vector<::cpp2::listTypedef>>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> myMapListOfTypeDef() & {
    return {this->__fbthrift_field_myMapListOfTypeDef, __isset.at(8), __isset.bit(8)};
  }

  /** Glean { "field": "myMapListOfTypeDef" } */
  template <typename..., typename T = ::std::map<::std::int16_t, ::std::vector<::cpp2::listTypedef>>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> myMapListOfTypeDef() && {
    return {static_cast<T&&>(this->__fbthrift_field_myMapListOfTypeDef), __isset.at(8), __isset.bit(8)};
  }

  /** Glean { "field": "myLongField" } */
  ::std::int64_t get_myLongField() const {
    return __fbthrift_field_myLongField;
  }

  /** Glean { "field": "myLongField" } */
  [[deprecated("Use `FOO.myLongField() = BAR;` instead of `FOO.set_myLongField(BAR);`")]]
  ::std::int64_t& set_myLongField(::std::int64_t myLongField_) {
    myLongField_ref() = myLongField_;
    return __fbthrift_field_myLongField;
  }

  /** Glean { "field": "myLongTypeDef" } */
  ::cpp2::longTypeDef get_myLongTypeDef() const {
    return __fbthrift_field_myLongTypeDef;
  }

  /** Glean { "field": "myLongTypeDef" } */
  [[deprecated("Use `FOO.myLongTypeDef() = BAR;` instead of `FOO.set_myLongTypeDef(BAR);`")]]
  ::cpp2::longTypeDef& set_myLongTypeDef(::cpp2::longTypeDef myLongTypeDef_) {
    myLongTypeDef_ref() = myLongTypeDef_;
    return __fbthrift_field_myLongTypeDef;
  }

  /** Glean { "field": "myStringField" } */
  const ::std::string& get_myStringField() const& {
    return __fbthrift_field_myStringField;
  }

  /** Glean { "field": "myStringField" } */
  ::std::string get_myStringField() && {
    return std::move(__fbthrift_field_myStringField);
  }

  /** Glean { "field": "myStringField" } */
  template <typename T_MyStructTypeDef_myStringField_struct_setter = ::std::string>
  [[deprecated("Use `FOO.myStringField() = BAR;` instead of `FOO.set_myStringField(BAR);`")]]
  ::std::string& set_myStringField(T_MyStructTypeDef_myStringField_struct_setter&& myStringField_) {
    myStringField_ref() = std::forward<T_MyStructTypeDef_myStringField_struct_setter>(myStringField_);
    return __fbthrift_field_myStringField;
  }

  /** Glean { "field": "myStringTypedef" } */
  const ::cpp2::stringTypedef& get_myStringTypedef() const& {
    return __fbthrift_field_myStringTypedef;
  }

  /** Glean { "field": "myStringTypedef" } */
  ::cpp2::stringTypedef get_myStringTypedef() && {
    return std::move(__fbthrift_field_myStringTypedef);
  }

  /** Glean { "field": "myStringTypedef" } */
  template <typename T_MyStructTypeDef_myStringTypedef_struct_setter = ::cpp2::stringTypedef>
  [[deprecated("Use `FOO.myStringTypedef() = BAR;` instead of `FOO.set_myStringTypedef(BAR);`")]]
  ::cpp2::stringTypedef& set_myStringTypedef(T_MyStructTypeDef_myStringTypedef_struct_setter&& myStringTypedef_) {
    myStringTypedef_ref() = std::forward<T_MyStructTypeDef_myStringTypedef_struct_setter>(myStringTypedef_);
    return __fbthrift_field_myStringTypedef;
  }
  /** Glean { "field": "myMapField" } */
  const ::std::map<::std::int16_t, ::std::string>& get_myMapField() const&;
  /** Glean { "field": "myMapField" } */
  ::std::map<::std::int16_t, ::std::string> get_myMapField() &&;

  /** Glean { "field": "myMapField" } */
  template <typename T_MyStructTypeDef_myMapField_struct_setter = ::std::map<::std::int16_t, ::std::string>>
  [[deprecated("Use `FOO.myMapField() = BAR;` instead of `FOO.set_myMapField(BAR);`")]]
  ::std::map<::std::int16_t, ::std::string>& set_myMapField(T_MyStructTypeDef_myMapField_struct_setter&& myMapField_) {
    myMapField_ref() = std::forward<T_MyStructTypeDef_myMapField_struct_setter>(myMapField_);
    return __fbthrift_field_myMapField;
  }
  /** Glean { "field": "myMapTypedef" } */
  const ::cpp2::mapTypedef& get_myMapTypedef() const&;
  /** Glean { "field": "myMapTypedef" } */
  ::cpp2::mapTypedef get_myMapTypedef() &&;

  /** Glean { "field": "myMapTypedef" } */
  template <typename T_MyStructTypeDef_myMapTypedef_struct_setter = ::cpp2::mapTypedef>
  [[deprecated("Use `FOO.myMapTypedef() = BAR;` instead of `FOO.set_myMapTypedef(BAR);`")]]
  ::cpp2::mapTypedef& set_myMapTypedef(T_MyStructTypeDef_myMapTypedef_struct_setter&& myMapTypedef_) {
    myMapTypedef_ref() = std::forward<T_MyStructTypeDef_myMapTypedef_struct_setter>(myMapTypedef_);
    return __fbthrift_field_myMapTypedef;
  }
  /** Glean { "field": "myListField" } */
  const ::std::vector<double>& get_myListField() const&;
  /** Glean { "field": "myListField" } */
  ::std::vector<double> get_myListField() &&;

  /** Glean { "field": "myListField" } */
  template <typename T_MyStructTypeDef_myListField_struct_setter = ::std::vector<double>>
  [[deprecated("Use `FOO.myListField() = BAR;` instead of `FOO.set_myListField(BAR);`")]]
  ::std::vector<double>& set_myListField(T_MyStructTypeDef_myListField_struct_setter&& myListField_) {
    myListField_ref() = std::forward<T_MyStructTypeDef_myListField_struct_setter>(myListField_);
    return __fbthrift_field_myListField;
  }
  /** Glean { "field": "myListTypedef" } */
  const ::cpp2::listTypedef& get_myListTypedef() const&;
  /** Glean { "field": "myListTypedef" } */
  ::cpp2::listTypedef get_myListTypedef() &&;

  /** Glean { "field": "myListTypedef" } */
  template <typename T_MyStructTypeDef_myListTypedef_struct_setter = ::cpp2::listTypedef>
  [[deprecated("Use `FOO.myListTypedef() = BAR;` instead of `FOO.set_myListTypedef(BAR);`")]]
  ::cpp2::listTypedef& set_myListTypedef(T_MyStructTypeDef_myListTypedef_struct_setter&& myListTypedef_) {
    myListTypedef_ref() = std::forward<T_MyStructTypeDef_myListTypedef_struct_setter>(myListTypedef_);
    return __fbthrift_field_myListTypedef;
  }
  /** Glean { "field": "myMapListOfTypeDef" } */
  const ::std::map<::std::int16_t, ::std::vector<::cpp2::listTypedef>>& get_myMapListOfTypeDef() const&;
  /** Glean { "field": "myMapListOfTypeDef" } */
  ::std::map<::std::int16_t, ::std::vector<::cpp2::listTypedef>> get_myMapListOfTypeDef() &&;

  /** Glean { "field": "myMapListOfTypeDef" } */
  template <typename T_MyStructTypeDef_myMapListOfTypeDef_struct_setter = ::std::map<::std::int16_t, ::std::vector<::cpp2::listTypedef>>>
  [[deprecated("Use `FOO.myMapListOfTypeDef() = BAR;` instead of `FOO.set_myMapListOfTypeDef(BAR);`")]]
  ::std::map<::std::int16_t, ::std::vector<::cpp2::listTypedef>>& set_myMapListOfTypeDef(T_MyStructTypeDef_myMapListOfTypeDef_struct_setter&& myMapListOfTypeDef_) {
    myMapListOfTypeDef_ref() = std::forward<T_MyStructTypeDef_myMapListOfTypeDef_struct_setter>(myMapListOfTypeDef_);
    return __fbthrift_field_myMapListOfTypeDef;
  }

  template <class Protocol_>
  unsigned long read(Protocol_* iprot);
  template <class Protocol_>
  uint32_t serializedSize(Protocol_ const* prot_) const;
  template <class Protocol_>
  uint32_t serializedSizeZC(Protocol_ const* prot_) const;
  template <class Protocol_>
  uint32_t write(Protocol_* prot_) const;

 private:
  template <class Protocol_>
  void readNoXfer(Protocol_* iprot);

  friend class ::apache::thrift::Cpp2Ops<MyStructTypeDef>;
  friend void swap(MyStructTypeDef& a, MyStructTypeDef& b);
};

template <class Protocol_>
unsigned long MyStructTypeDef::read(Protocol_* iprot) {
  auto _xferStart = iprot->getCursorPosition();
  readNoXfer(iprot);
  return iprot->getCursorPosition() - _xferStart;
}


/** Glean {"file": "thrift/compiler/test/fixtures/complex-struct/src/module.thrift", "name": "MyUnionFloatFieldThrowExp", "kind": "union" } */
class MyUnionFloatFieldThrowExp final  {
 private:
  friend struct ::apache::thrift::detail::st::struct_private_access;
  template<class> friend struct ::apache::thrift::detail::invoke_reffer;

  //  used by a static_assert in the corresponding source
  static constexpr bool __fbthrift_cpp2_gen_json = false;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  static std::string_view __fbthrift_get_field_name(::apache::thrift::FieldOrdinal ord);
  static std::string_view __fbthrift_get_class_name();
  using __fbthrift_reflection_ident_list = folly::tag_t<
    ::apache::thrift::ident::myEnum,
    ::apache::thrift::ident::setFloat,
    ::apache::thrift::ident::myDataItem,
    ::apache::thrift::ident::complexNestedStruct
  >;

  static constexpr std::int16_t __fbthrift_reflection_field_id_list[] = {0,1,2,3,4};
  using __fbthrift_reflection_type_tags = folly::tag_t<
    ::apache::thrift::type::enum_t<::cpp2::MyEnum>,
    ::apache::thrift::type::list<::apache::thrift::type::list<::apache::thrift::type::float_t>>,
    ::apache::thrift::type::struct_t<::cpp2::MyDataItem>,
    ::apache::thrift::type::struct_t<::cpp2::ComplexNestedStruct>
  >;

  static constexpr std::size_t __fbthrift_field_size_v = 4;

  template<class T>
  using __fbthrift_id = ::apache::thrift::type::field_id<__fbthrift_reflection_field_id_list[folly::to_underlying(T::value)]>;

  template<class T>
  using __fbthrift_type_tag = ::apache::thrift::detail::at<__fbthrift_reflection_type_tags, T::value>;

  template<class T>
  using __fbthrift_ident = ::apache::thrift::detail::at<__fbthrift_reflection_ident_list, T::value>;

  template<class T> using __fbthrift_ordinal = ::apache::thrift::type::ordinal_tag<
    ::apache::thrift::detail::getFieldOrdinal<T,
                                              __fbthrift_reflection_ident_list,
                                              __fbthrift_reflection_type_tags>(
      __fbthrift_reflection_field_id_list
    )
  >;
  void __fbthrift_clear();
  void __fbthrift_destruct();
  bool __fbthrift_is_empty() const;

 public:
  using __fbthrift_cpp2_type = MyUnionFloatFieldThrowExp;
  static constexpr bool __fbthrift_cpp2_is_union =
    true;
  static constexpr bool __fbthrift_cpp2_uses_op_encode =
    false;


 public:
  enum Type : int {
    __EMPTY__ = 0,
    myEnum = 1,
    setFloat = 2,
    myDataItem = 3,
    complexNestedStruct = 4,
  } ;

  MyUnionFloatFieldThrowExp()
      : type_(folly::to_underlying(Type::__EMPTY__)) {}

  MyUnionFloatFieldThrowExp(MyUnionFloatFieldThrowExp&& rhs) noexcept
      : type_(folly::to_underlying(Type::__EMPTY__)) {
    if (this == &rhs) { return; }
    switch (rhs.getType()) {
      case Type::__EMPTY__:
      {
        return;
      }
      case Type::myEnum:
      {
        set_myEnum(std::move(rhs.value_.myEnum));
        break;
      }
      case Type::setFloat:
      {
        set_setFloat(std::move(rhs.value_.setFloat));
        break;
      }
      case Type::myDataItem:
      {
        set_myDataItem(std::move(rhs.value_.myDataItem));
        break;
      }
      case Type::complexNestedStruct:
      {
        set_complexNestedStruct(std::move(rhs.value_.complexNestedStruct));
        break;
      }
      default:
      {
        assert(false);
        break;
      }
    }
    apache::thrift::clear(rhs);
  }

  MyUnionFloatFieldThrowExp(const MyUnionFloatFieldThrowExp& rhs);

  MyUnionFloatFieldThrowExp& operator=(MyUnionFloatFieldThrowExp&& rhs) noexcept {
    if (this == &rhs) { return *this; }
    switch (rhs.getType()) {
      case Type::__EMPTY__:
      {
        __fbthrift_clear();
        return *this;
      }
      case Type::myEnum:
      {
        set_myEnum(std::move(rhs.value_.myEnum));
        break;
      }
      case Type::setFloat:
      {
        set_setFloat(std::move(rhs.value_.setFloat));
        break;
      }
      case Type::myDataItem:
      {
        set_myDataItem(std::move(rhs.value_.myDataItem));
        break;
      }
      case Type::complexNestedStruct:
      {
        set_complexNestedStruct(std::move(rhs.value_.complexNestedStruct));
        break;
      }
      default:
      {
        assert(false);
        __fbthrift_clear();
      }
    }
    apache::thrift::clear(rhs);
    return *this;
  }

  MyUnionFloatFieldThrowExp& operator=(const MyUnionFloatFieldThrowExp& rhs);

  ~MyUnionFloatFieldThrowExp();

  union storage_type {
    ::cpp2::MyEnum myEnum;
    ::std::vector<::std::vector<float>> setFloat;
    ::cpp2::MyDataItem myDataItem;
    ::cpp2::ComplexNestedStruct complexNestedStruct;

    storage_type() {}
    ~storage_type() {}
  } ;

  bool operator==(const MyUnionFloatFieldThrowExp&) const;
  bool operator<(const MyUnionFloatFieldThrowExp&) const;

  /** Glean { "field": "myEnum" } */
  template <typename... A, std::enable_if_t<!sizeof...(A), int> = 0>
  ::cpp2::MyEnum& set_myEnum(::cpp2::MyEnum t = ::cpp2::MyEnum()) {
    using T0 = ::cpp2::MyEnum;
    using T = folly::type_t<T0, A...>;
    __fbthrift_clear();
    type_ = folly::to_underlying(Type::myEnum);
    ::new (std::addressof(value_.myEnum)) T(t);
    return value_.myEnum;
  }


  /** Glean { "field": "setFloat" } */
  template <typename... A, std::enable_if_t<!sizeof...(A), int> = 0>
  ::std::vector<::std::vector<float>>& set_setFloat(::std::vector<::std::vector<float>> const &t) {
    using T0 = ::std::vector<::std::vector<float>>;
    using T = folly::type_t<T0, A...>;
    __fbthrift_clear();
    type_ = folly::to_underlying(Type::setFloat);
    ::new (std::addressof(value_.setFloat)) T(t);
    return value_.setFloat;
  }

  /** Glean { "field": "setFloat" } */
  template <typename... A, std::enable_if_t<!sizeof...(A), int> = 0>
  ::std::vector<::std::vector<float>>& set_setFloat(::std::vector<::std::vector<float>>&& t) {
    using T0 = ::std::vector<::std::vector<float>>;
    using T = folly::type_t<T0, A...>;
    __fbthrift_clear();
    type_ = folly::to_underlying(Type::setFloat);
    ::new (std::addressof(value_.setFloat)) T(std::move(t));
    return value_.setFloat;
  }

  /** Glean { "field": "setFloat" } */
  template<typename... T, typename = ::apache::thrift::safe_overload_t<::std::vector<::std::vector<float>>, T...>> ::std::vector<::std::vector<float>>& set_setFloat(T&&... t) {
    __fbthrift_clear();
    type_ = folly::to_underlying(Type::setFloat);
    ::new (std::addressof(value_.setFloat)) ::std::vector<::std::vector<float>>(std::forward<T>(t)...);
    return value_.setFloat;
  }

  /** Glean { "field": "myDataItem" } */
  template <typename... A, std::enable_if_t<!sizeof...(A), int> = 0>
  ::cpp2::MyDataItem& set_myDataItem(::cpp2::MyDataItem const &t) {
    using T0 = ::cpp2::MyDataItem;
    using T = folly::type_t<T0, A...>;
    __fbthrift_clear();
    type_ = folly::to_underlying(Type::myDataItem);
    ::new (std::addressof(value_.myDataItem)) T(t);
    return value_.myDataItem;
  }

  /** Glean { "field": "myDataItem" } */
  template <typename... A, std::enable_if_t<!sizeof...(A), int> = 0>
  ::cpp2::MyDataItem& set_myDataItem(::cpp2::MyDataItem&& t) {
    using T0 = ::cpp2::MyDataItem;
    using T = folly::type_t<T0, A...>;
    __fbthrift_clear();
    type_ = folly::to_underlying(Type::myDataItem);
    ::new (std::addressof(value_.myDataItem)) T(std::move(t));
    return value_.myDataItem;
  }

  /** Glean { "field": "myDataItem" } */
  template<typename... T, typename = ::apache::thrift::safe_overload_t<::cpp2::MyDataItem, T...>> ::cpp2::MyDataItem& set_myDataItem(T&&... t) {
    __fbthrift_clear();
    type_ = folly::to_underlying(Type::myDataItem);
    ::new (std::addressof(value_.myDataItem)) ::cpp2::MyDataItem(std::forward<T>(t)...);
    return value_.myDataItem;
  }

  /** Glean { "field": "complexNestedStruct" } */
  template <typename... A, std::enable_if_t<!sizeof...(A), int> = 0>
  ::cpp2::ComplexNestedStruct& set_complexNestedStruct(::cpp2::ComplexNestedStruct const &t) {
    using T0 = ::cpp2::ComplexNestedStruct;
    using T = folly::type_t<T0, A...>;
    __fbthrift_clear();
    type_ = folly::to_underlying(Type::complexNestedStruct);
    ::new (std::addressof(value_.complexNestedStruct)) T(t);
    return value_.complexNestedStruct;
  }

  /** Glean { "field": "complexNestedStruct" } */
  template <typename... A, std::enable_if_t<!sizeof...(A), int> = 0>
  ::cpp2::ComplexNestedStruct& set_complexNestedStruct(::cpp2::ComplexNestedStruct&& t) {
    using T0 = ::cpp2::ComplexNestedStruct;
    using T = folly::type_t<T0, A...>;
    __fbthrift_clear();
    type_ = folly::to_underlying(Type::complexNestedStruct);
    ::new (std::addressof(value_.complexNestedStruct)) T(std::move(t));
    return value_.complexNestedStruct;
  }

  /** Glean { "field": "complexNestedStruct" } */
  template<typename... T, typename = ::apache::thrift::safe_overload_t<::cpp2::ComplexNestedStruct, T...>> ::cpp2::ComplexNestedStruct& set_complexNestedStruct(T&&... t) {
    __fbthrift_clear();
    type_ = folly::to_underlying(Type::complexNestedStruct);
    ::new (std::addressof(value_.complexNestedStruct)) ::cpp2::ComplexNestedStruct(std::forward<T>(t)...);
    return value_.complexNestedStruct;
  }

  ::cpp2::MyEnum const& get_myEnum() const {
    if (getType() != Type::myEnum) {
      ::apache::thrift::detail::throw_on_bad_union_field_access();
    }
    return value_.myEnum;
  }

  ::std::vector<::std::vector<float>> const& get_setFloat() const {
    if (getType() != Type::setFloat) {
      ::apache::thrift::detail::throw_on_bad_union_field_access();
    }
    return value_.setFloat;
  }

  ::cpp2::MyDataItem const& get_myDataItem() const {
    if (getType() != Type::myDataItem) {
      ::apache::thrift::detail::throw_on_bad_union_field_access();
    }
    return value_.myDataItem;
  }

  ::cpp2::ComplexNestedStruct const& get_complexNestedStruct() const {
    if (getType() != Type::complexNestedStruct) {
      ::apache::thrift::detail::throw_on_bad_union_field_access();
    }
    return value_.complexNestedStruct;
  }

  ::cpp2::MyEnum& mutable_myEnum() {
    assert(getType() == Type::myEnum);
    return value_.myEnum;
  }

  ::std::vector<::std::vector<float>>& mutable_setFloat() {
    assert(getType() == Type::setFloat);
    return value_.setFloat;
  }

  ::cpp2::MyDataItem& mutable_myDataItem() {
    assert(getType() == Type::myDataItem);
    return value_.myDataItem;
  }

  ::cpp2::ComplexNestedStruct& mutable_complexNestedStruct() {
    assert(getType() == Type::complexNestedStruct);
    return value_.complexNestedStruct;
  }

  template <typename..., typename T = ::cpp2::MyEnum>
  T move_myEnum() {
    assert(getType() == Type::myEnum);
    return std::move(value_.myEnum);
  }

  template <typename..., typename T = ::std::vector<::std::vector<float>>>
  T move_setFloat() {
    assert(getType() == Type::setFloat);
    return std::move(value_.setFloat);
  }

  template <typename..., typename T = ::cpp2::MyDataItem>
  T move_myDataItem() {
    assert(getType() == Type::myDataItem);
    return std::move(value_.myDataItem);
  }

  template <typename..., typename T = ::cpp2::ComplexNestedStruct>
  T move_complexNestedStruct() {
    assert(getType() == Type::complexNestedStruct);
    return std::move(value_.complexNestedStruct);
  }

  /** Glean { "field": "myEnum" } */
  template <typename..., typename T = ::cpp2::MyEnum>
  FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> myEnum_ref() const& {
    return {value_.myEnum, type_, folly::to_underlying(Type::myEnum), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  /** Glean { "field": "myEnum" } */
  template <typename..., typename T = ::cpp2::MyEnum>
  FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> myEnum_ref() const&& {
    return {std::move(value_.myEnum), type_, folly::to_underlying(Type::myEnum), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  /** Glean { "field": "myEnum" } */
  template <typename..., typename T = ::cpp2::MyEnum>
  FOLLY_ERASE ::apache::thrift::union_field_ref<T&> myEnum_ref() & {
    return {value_.myEnum, type_, folly::to_underlying(Type::myEnum), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  /** Glean { "field": "myEnum" } */
  template <typename..., typename T = ::cpp2::MyEnum>
  FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> myEnum_ref() && {
    return {std::move(value_.myEnum), type_, folly::to_underlying(Type::myEnum), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }
  /** Glean { "field": "setFloat" } */
  template <typename..., typename T = ::std::vector<::std::vector<float>>>
  FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> setFloat_ref() const& {
    return {value_.setFloat, type_, folly::to_underlying(Type::setFloat), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  /** Glean { "field": "setFloat" } */
  template <typename..., typename T = ::std::vector<::std::vector<float>>>
  FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> setFloat_ref() const&& {
    return {std::move(value_.setFloat), type_, folly::to_underlying(Type::setFloat), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  /** Glean { "field": "setFloat" } */
  template <typename..., typename T = ::std::vector<::std::vector<float>>>
  FOLLY_ERASE ::apache::thrift::union_field_ref<T&> setFloat_ref() & {
    return {value_.setFloat, type_, folly::to_underlying(Type::setFloat), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  /** Glean { "field": "setFloat" } */
  template <typename..., typename T = ::std::vector<::std::vector<float>>>
  FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> setFloat_ref() && {
    return {std::move(value_.setFloat), type_, folly::to_underlying(Type::setFloat), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }
  /** Glean { "field": "myDataItem" } */
  template <typename..., typename T = ::cpp2::MyDataItem>
  FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> myDataItem_ref() const& {
    return {value_.myDataItem, type_, folly::to_underlying(Type::myDataItem), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  /** Glean { "field": "myDataItem" } */
  template <typename..., typename T = ::cpp2::MyDataItem>
  FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> myDataItem_ref() const&& {
    return {std::move(value_.myDataItem), type_, folly::to_underlying(Type::myDataItem), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  /** Glean { "field": "myDataItem" } */
  template <typename..., typename T = ::cpp2::MyDataItem>
  FOLLY_ERASE ::apache::thrift::union_field_ref<T&> myDataItem_ref() & {
    return {value_.myDataItem, type_, folly::to_underlying(Type::myDataItem), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  /** Glean { "field": "myDataItem" } */
  template <typename..., typename T = ::cpp2::MyDataItem>
  FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> myDataItem_ref() && {
    return {std::move(value_.myDataItem), type_, folly::to_underlying(Type::myDataItem), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }
  /** Glean { "field": "complexNestedStruct" } */
  template <typename..., typename T = ::cpp2::ComplexNestedStruct>
  FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> complexNestedStruct_ref() const& {
    return {value_.complexNestedStruct, type_, folly::to_underlying(Type::complexNestedStruct), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  /** Glean { "field": "complexNestedStruct" } */
  template <typename..., typename T = ::cpp2::ComplexNestedStruct>
  FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> complexNestedStruct_ref() const&& {
    return {std::move(value_.complexNestedStruct), type_, folly::to_underlying(Type::complexNestedStruct), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  /** Glean { "field": "complexNestedStruct" } */
  template <typename..., typename T = ::cpp2::ComplexNestedStruct>
  FOLLY_ERASE ::apache::thrift::union_field_ref<T&> complexNestedStruct_ref() & {
    return {value_.complexNestedStruct, type_, folly::to_underlying(Type::complexNestedStruct), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }

  /** Glean { "field": "complexNestedStruct" } */
  template <typename..., typename T = ::cpp2::ComplexNestedStruct>
  FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> complexNestedStruct_ref() && {
    return {std::move(value_.complexNestedStruct), type_, folly::to_underlying(Type::complexNestedStruct), this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
  }
  Type getType() const { return static_cast<Type>(type_); }

  template <class Protocol_>
  unsigned long read(Protocol_* iprot);
  template <class Protocol_>
  uint32_t serializedSize(Protocol_ const* prot_) const;
  template <class Protocol_>
  uint32_t serializedSizeZC(Protocol_ const* prot_) const;
  template <class Protocol_>
  uint32_t write(Protocol_* prot_) const;
 protected:
  storage_type value_;
  std::underlying_type_t<Type> type_;

 private:
  template <class Protocol_>
  void readNoXfer(Protocol_* iprot);

  friend class ::apache::thrift::Cpp2Ops<MyUnionFloatFieldThrowExp>;
  friend void swap(MyUnionFloatFieldThrowExp& a, MyUnionFloatFieldThrowExp& b);
};

template <class Protocol_>
unsigned long MyUnionFloatFieldThrowExp::read(Protocol_* iprot) {
  auto _xferStart = iprot->getCursorPosition();
  readNoXfer(iprot);
  return iprot->getCursorPosition() - _xferStart;
}


/** Glean {"file": "thrift/compiler/test/fixtures/complex-struct/src/module.thrift", "name": "TypeRemapped", "kind": "struct" } */
class TypeRemapped final  {
 private:
  friend struct ::apache::thrift::detail::st::struct_private_access;
  template<class> friend struct ::apache::thrift::detail::invoke_reffer;

  //  used by a static_assert in the corresponding source
  static constexpr bool __fbthrift_cpp2_gen_json = false;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  static std::string_view __fbthrift_get_field_name(::apache::thrift::FieldOrdinal ord);
  static std::string_view __fbthrift_get_class_name();
  using __fbthrift_reflection_ident_list = folly::tag_t<
    ::apache::thrift::ident::lsMap,
    ::apache::thrift::ident::ioMap,
    ::apache::thrift::ident::BigInteger,
    ::apache::thrift::ident::binaryTestBuffer
  >;

  static constexpr std::int16_t __fbthrift_reflection_field_id_list[] = {0,1,2,3,4};
  using __fbthrift_reflection_type_tags = folly::tag_t<
    ::apache::thrift::type::map<::apache::thrift::type::i64_t, ::apache::thrift::type::string_t>,
    ::apache::thrift::type::map<::apache::thrift::type::i32_t, ::apache::thrift::type::map<::apache::thrift::type::i32_t, ::apache::thrift::type::i64_t>>,
    ::apache::thrift::type::i32_t,
    ::apache::thrift::type::binary_t
  >;

  static constexpr std::size_t __fbthrift_field_size_v = 4;

  template<class T>
  using __fbthrift_id = ::apache::thrift::type::field_id<__fbthrift_reflection_field_id_list[folly::to_underlying(T::value)]>;

  template<class T>
  using __fbthrift_type_tag = ::apache::thrift::detail::at<__fbthrift_reflection_type_tags, T::value>;

  template<class T>
  using __fbthrift_ident = ::apache::thrift::detail::at<__fbthrift_reflection_ident_list, T::value>;

  template<class T> using __fbthrift_ordinal = ::apache::thrift::type::ordinal_tag<
    ::apache::thrift::detail::getFieldOrdinal<T,
                                              __fbthrift_reflection_ident_list,
                                              __fbthrift_reflection_type_tags>(
      __fbthrift_reflection_field_id_list
    )
  >;
  void __fbthrift_clear();
  void __fbthrift_clear_terse_fields();
  bool __fbthrift_is_empty() const;

 public:
  using __fbthrift_cpp2_type = TypeRemapped;
  static constexpr bool __fbthrift_cpp2_is_union =
    false;
  static constexpr bool __fbthrift_cpp2_uses_op_encode =
    false;


 public:

  TypeRemapped();

  // FragileConstructor for use in initialization lists only.
  [[deprecated("This constructor is deprecated")]]
  TypeRemapped(apache::thrift::FragileConstructor, ::cpp2::map_i64_string_5732 lsMap__arg, ::cpp2::map_i32_FMap_6797 ioMap__arg, ::cpp2::i32_1194 BigInteger__arg, ::cpp2::binary_4918 binaryTestBuffer__arg);

  TypeRemapped(TypeRemapped&&) noexcept;

  TypeRemapped(const TypeRemapped& src);


  TypeRemapped& operator=(TypeRemapped&&) noexcept;
  TypeRemapped& operator=(const TypeRemapped& src);

  ~TypeRemapped();

 private:
  ::cpp2::map_i64_string_5732 __fbthrift_field_lsMap;
 private:
  ::cpp2::map_i32_FMap_6797 __fbthrift_field_ioMap;
 private:
  ::cpp2::i32_1194 __fbthrift_field_BigInteger;
 private:
  ::cpp2::binary_4918 __fbthrift_field_binaryTestBuffer;
 private:
  apache::thrift::detail::isset_bitset<4, apache::thrift::detail::IssetBitsetOption::Unpacked> __isset;

 public:

  bool operator==(const TypeRemapped&) const;
  bool operator<(const TypeRemapped&) const;

  /** Glean { "field": "lsMap" } */
  template <typename..., typename T = ::cpp2::map_i64_string_5732>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> lsMap_ref() const& {
    return {this->__fbthrift_field_lsMap, __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "lsMap" } */
  template <typename..., typename T = ::cpp2::map_i64_string_5732>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> lsMap_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_lsMap), __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "lsMap" } */
  template <typename..., typename T = ::cpp2::map_i64_string_5732>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> lsMap_ref() & {
    return {this->__fbthrift_field_lsMap, __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "lsMap" } */
  template <typename..., typename T = ::cpp2::map_i64_string_5732>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> lsMap_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_lsMap), __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "lsMap" } */
  template <typename..., typename T = ::cpp2::map_i64_string_5732>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> lsMap() const& {
    return {this->__fbthrift_field_lsMap, __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "lsMap" } */
  template <typename..., typename T = ::cpp2::map_i64_string_5732>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> lsMap() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_lsMap), __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "lsMap" } */
  template <typename..., typename T = ::cpp2::map_i64_string_5732>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> lsMap() & {
    return {this->__fbthrift_field_lsMap, __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "lsMap" } */
  template <typename..., typename T = ::cpp2::map_i64_string_5732>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> lsMap() && {
    return {static_cast<T&&>(this->__fbthrift_field_lsMap), __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "ioMap" } */
  template <typename..., typename T = ::cpp2::map_i32_FMap_6797>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> ioMap_ref() const& {
    return {this->__fbthrift_field_ioMap, __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "ioMap" } */
  template <typename..., typename T = ::cpp2::map_i32_FMap_6797>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> ioMap_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_ioMap), __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "ioMap" } */
  template <typename..., typename T = ::cpp2::map_i32_FMap_6797>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> ioMap_ref() & {
    return {this->__fbthrift_field_ioMap, __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "ioMap" } */
  template <typename..., typename T = ::cpp2::map_i32_FMap_6797>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> ioMap_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_ioMap), __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "ioMap" } */
  template <typename..., typename T = ::cpp2::map_i32_FMap_6797>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> ioMap() const& {
    return {this->__fbthrift_field_ioMap, __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "ioMap" } */
  template <typename..., typename T = ::cpp2::map_i32_FMap_6797>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> ioMap() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_ioMap), __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "ioMap" } */
  template <typename..., typename T = ::cpp2::map_i32_FMap_6797>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> ioMap() & {
    return {this->__fbthrift_field_ioMap, __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "ioMap" } */
  template <typename..., typename T = ::cpp2::map_i32_FMap_6797>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> ioMap() && {
    return {static_cast<T&&>(this->__fbthrift_field_ioMap), __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "BigInteger" } */
  template <typename..., typename T = ::cpp2::i32_1194>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> BigInteger_ref() const& {
    return {this->__fbthrift_field_BigInteger, __isset.at(2), __isset.bit(2)};
  }

  /** Glean { "field": "BigInteger" } */
  template <typename..., typename T = ::cpp2::i32_1194>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> BigInteger_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_BigInteger), __isset.at(2), __isset.bit(2)};
  }

  /** Glean { "field": "BigInteger" } */
  template <typename..., typename T = ::cpp2::i32_1194>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> BigInteger_ref() & {
    return {this->__fbthrift_field_BigInteger, __isset.at(2), __isset.bit(2)};
  }

  /** Glean { "field": "BigInteger" } */
  template <typename..., typename T = ::cpp2::i32_1194>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> BigInteger_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_BigInteger), __isset.at(2), __isset.bit(2)};
  }

  /** Glean { "field": "BigInteger" } */
  template <typename..., typename T = ::cpp2::i32_1194>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> BigInteger() const& {
    return {this->__fbthrift_field_BigInteger, __isset.at(2), __isset.bit(2)};
  }

  /** Glean { "field": "BigInteger" } */
  template <typename..., typename T = ::cpp2::i32_1194>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> BigInteger() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_BigInteger), __isset.at(2), __isset.bit(2)};
  }

  /** Glean { "field": "BigInteger" } */
  template <typename..., typename T = ::cpp2::i32_1194>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> BigInteger() & {
    return {this->__fbthrift_field_BigInteger, __isset.at(2), __isset.bit(2)};
  }

  /** Glean { "field": "BigInteger" } */
  template <typename..., typename T = ::cpp2::i32_1194>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> BigInteger() && {
    return {static_cast<T&&>(this->__fbthrift_field_BigInteger), __isset.at(2), __isset.bit(2)};
  }

  /** Glean { "field": "binaryTestBuffer" } */
  template <typename..., typename T = ::cpp2::binary_4918>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> binaryTestBuffer_ref() const& {
    return {this->__fbthrift_field_binaryTestBuffer, __isset.at(3), __isset.bit(3)};
  }

  /** Glean { "field": "binaryTestBuffer" } */
  template <typename..., typename T = ::cpp2::binary_4918>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> binaryTestBuffer_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_binaryTestBuffer), __isset.at(3), __isset.bit(3)};
  }

  /** Glean { "field": "binaryTestBuffer" } */
  template <typename..., typename T = ::cpp2::binary_4918>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> binaryTestBuffer_ref() & {
    return {this->__fbthrift_field_binaryTestBuffer, __isset.at(3), __isset.bit(3)};
  }

  /** Glean { "field": "binaryTestBuffer" } */
  template <typename..., typename T = ::cpp2::binary_4918>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> binaryTestBuffer_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_binaryTestBuffer), __isset.at(3), __isset.bit(3)};
  }

  /** Glean { "field": "binaryTestBuffer" } */
  template <typename..., typename T = ::cpp2::binary_4918>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> binaryTestBuffer() const& {
    return {this->__fbthrift_field_binaryTestBuffer, __isset.at(3), __isset.bit(3)};
  }

  /** Glean { "field": "binaryTestBuffer" } */
  template <typename..., typename T = ::cpp2::binary_4918>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> binaryTestBuffer() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_binaryTestBuffer), __isset.at(3), __isset.bit(3)};
  }

  /** Glean { "field": "binaryTestBuffer" } */
  template <typename..., typename T = ::cpp2::binary_4918>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> binaryTestBuffer() & {
    return {this->__fbthrift_field_binaryTestBuffer, __isset.at(3), __isset.bit(3)};
  }

  /** Glean { "field": "binaryTestBuffer" } */
  template <typename..., typename T = ::cpp2::binary_4918>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> binaryTestBuffer() && {
    return {static_cast<T&&>(this->__fbthrift_field_binaryTestBuffer), __isset.at(3), __isset.bit(3)};
  }
  /** Glean { "field": "lsMap" } */
  const ::cpp2::map_i64_string_5732& get_lsMap() const&;
  /** Glean { "field": "lsMap" } */
  ::cpp2::map_i64_string_5732 get_lsMap() &&;

  /** Glean { "field": "lsMap" } */
  template <typename T_TypeRemapped_lsMap_struct_setter = ::cpp2::map_i64_string_5732>
  [[deprecated("Use `FOO.lsMap() = BAR;` instead of `FOO.set_lsMap(BAR);`")]]
  ::cpp2::map_i64_string_5732& set_lsMap(T_TypeRemapped_lsMap_struct_setter&& lsMap_) {
    lsMap_ref() = std::forward<T_TypeRemapped_lsMap_struct_setter>(lsMap_);
    return __fbthrift_field_lsMap;
  }
  /** Glean { "field": "ioMap" } */
  const ::cpp2::map_i32_FMap_6797& get_ioMap() const&;
  /** Glean { "field": "ioMap" } */
  ::cpp2::map_i32_FMap_6797 get_ioMap() &&;

  /** Glean { "field": "ioMap" } */
  template <typename T_TypeRemapped_ioMap_struct_setter = ::cpp2::map_i32_FMap_6797>
  [[deprecated("Use `FOO.ioMap() = BAR;` instead of `FOO.set_ioMap(BAR);`")]]
  ::cpp2::map_i32_FMap_6797& set_ioMap(T_TypeRemapped_ioMap_struct_setter&& ioMap_) {
    ioMap_ref() = std::forward<T_TypeRemapped_ioMap_struct_setter>(ioMap_);
    return __fbthrift_field_ioMap;
  }

  /** Glean { "field": "BigInteger" } */
  ::cpp2::i32_1194 get_BigInteger() const {
    return __fbthrift_field_BigInteger;
  }

  /** Glean { "field": "BigInteger" } */
  [[deprecated("Use `FOO.BigInteger() = BAR;` instead of `FOO.set_BigInteger(BAR);`")]]
  ::cpp2::i32_1194& set_BigInteger(::cpp2::i32_1194 BigInteger_) {
    BigInteger_ref() = BigInteger_;
    return __fbthrift_field_BigInteger;
  }

  /** Glean { "field": "binaryTestBuffer" } */
  const ::cpp2::binary_4918& get_binaryTestBuffer() const& {
    return __fbthrift_field_binaryTestBuffer;
  }

  /** Glean { "field": "binaryTestBuffer" } */
  ::cpp2::binary_4918 get_binaryTestBuffer() && {
    return std::move(__fbthrift_field_binaryTestBuffer);
  }

  /** Glean { "field": "binaryTestBuffer" } */
  template <typename T_TypeRemapped_binaryTestBuffer_struct_setter = ::cpp2::binary_4918>
  [[deprecated("Use `FOO.binaryTestBuffer() = BAR;` instead of `FOO.set_binaryTestBuffer(BAR);`")]]
  ::cpp2::binary_4918& set_binaryTestBuffer(T_TypeRemapped_binaryTestBuffer_struct_setter&& binaryTestBuffer_) {
    binaryTestBuffer_ref() = std::forward<T_TypeRemapped_binaryTestBuffer_struct_setter>(binaryTestBuffer_);
    return __fbthrift_field_binaryTestBuffer;
  }

  template <class Protocol_>
  unsigned long read(Protocol_* iprot);
  template <class Protocol_>
  uint32_t serializedSize(Protocol_ const* prot_) const;
  template <class Protocol_>
  uint32_t serializedSizeZC(Protocol_ const* prot_) const;
  template <class Protocol_>
  uint32_t write(Protocol_* prot_) const;

 private:
  template <class Protocol_>
  void readNoXfer(Protocol_* iprot);

  friend class ::apache::thrift::Cpp2Ops<TypeRemapped>;
  friend void swap(TypeRemapped& a, TypeRemapped& b);
};

template <class Protocol_>
unsigned long TypeRemapped::read(Protocol_* iprot) {
  auto _xferStart = iprot->getCursorPosition();
  readNoXfer(iprot);
  return iprot->getCursorPosition() - _xferStart;
}


/** Glean {"file": "thrift/compiler/test/fixtures/complex-struct/src/module.thrift", "name": "emptyXcep", "kind": "exception" } */
class FOLLY_EXPORT emptyXcep : public virtual apache::thrift::TException {
 private:
  friend struct ::apache::thrift::detail::st::struct_private_access;
  template<class> friend struct ::apache::thrift::detail::invoke_reffer;

  //  used by a static_assert in the corresponding source
  static constexpr bool __fbthrift_cpp2_gen_json = false;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  static std::string_view __fbthrift_get_field_name(::apache::thrift::FieldOrdinal ord);
  static std::string_view __fbthrift_get_class_name();
  using __fbthrift_reflection_ident_list = folly::tag_t<
  >;

  static constexpr std::int16_t __fbthrift_reflection_field_id_list[] = {0};
  using __fbthrift_reflection_type_tags = folly::tag_t<
  >;

  static constexpr std::size_t __fbthrift_field_size_v = 0;

  template<class T>
  using __fbthrift_id = ::apache::thrift::type::field_id<__fbthrift_reflection_field_id_list[folly::to_underlying(T::value)]>;

  template<class T>
  using __fbthrift_type_tag = ::apache::thrift::detail::at<__fbthrift_reflection_type_tags, T::value>;

  template<class T>
  using __fbthrift_ident = ::apache::thrift::detail::at<__fbthrift_reflection_ident_list, T::value>;

  template<class T> using __fbthrift_ordinal = ::apache::thrift::type::ordinal_tag<
    ::apache::thrift::detail::getFieldOrdinal<T,
                                              __fbthrift_reflection_ident_list,
                                              __fbthrift_reflection_type_tags>(
      __fbthrift_reflection_field_id_list
    )
  >;
  void __fbthrift_clear();
  void __fbthrift_clear_terse_fields();
  bool __fbthrift_is_empty() const;
  static constexpr ::apache::thrift::ExceptionKind __fbthrift_cpp2_gen_exception_kind =
         ::apache::thrift::ExceptionKind::UNSPECIFIED;
  static constexpr ::apache::thrift::ExceptionSafety __fbthrift_cpp2_gen_exception_safety =
         ::apache::thrift::ExceptionSafety::UNSPECIFIED;
  static constexpr ::apache::thrift::ExceptionBlame __fbthrift_cpp2_gen_exception_blame =
         ::apache::thrift::ExceptionBlame::UNSPECIFIED;

 public:
  using __fbthrift_cpp2_type = emptyXcep;
  static constexpr bool __fbthrift_cpp2_is_union =
    false;
  static constexpr bool __fbthrift_cpp2_uses_op_encode =
    false;


 public:

  emptyXcep();

  // FragileConstructor for use in initialization lists only.
  [[deprecated("This constructor is deprecated")]]
  emptyXcep(apache::thrift::FragileConstructor);

  emptyXcep(emptyXcep&&) noexcept;

  emptyXcep(const emptyXcep& src);


  emptyXcep& operator=(emptyXcep&&) noexcept;
  emptyXcep& operator=(const emptyXcep& src);

  ~emptyXcep() override;


 public:

  bool operator==(const emptyXcep&) const;
  bool operator<(const emptyXcep&) const;

  template <class Protocol_>
  unsigned long read(Protocol_* iprot);
  template <class Protocol_>
  uint32_t serializedSize(Protocol_ const* prot_) const;
  template <class Protocol_>
  uint32_t serializedSizeZC(Protocol_ const* prot_) const;
  template <class Protocol_>
  uint32_t write(Protocol_* prot_) const;

  const char* what() const noexcept override {
    return "::cpp2::emptyXcep";
  }

 private:
  template <class Protocol_>
  void readNoXfer(Protocol_* iprot);

  friend class ::apache::thrift::Cpp2Ops<emptyXcep>;
  friend void swap(emptyXcep& a, emptyXcep& b);
};

template <class Protocol_>
unsigned long emptyXcep::read(Protocol_* iprot) {
  auto _xferStart = iprot->getCursorPosition();
  readNoXfer(iprot);
  return iprot->getCursorPosition() - _xferStart;
}


/** Glean {"file": "thrift/compiler/test/fixtures/complex-struct/src/module.thrift", "name": "reqXcep", "kind": "exception" } */
class FOLLY_EXPORT reqXcep : public virtual apache::thrift::TException {
 private:
  friend struct ::apache::thrift::detail::st::struct_private_access;
  template<class> friend struct ::apache::thrift::detail::invoke_reffer;

  //  used by a static_assert in the corresponding source
  static constexpr bool __fbthrift_cpp2_gen_json = false;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  static std::string_view __fbthrift_get_field_name(::apache::thrift::FieldOrdinal ord);
  static std::string_view __fbthrift_get_class_name();
  using __fbthrift_reflection_ident_list = folly::tag_t<
    ::apache::thrift::ident::message,
    ::apache::thrift::ident::errorCode
  >;

  static constexpr std::int16_t __fbthrift_reflection_field_id_list[] = {0,1,2};
  using __fbthrift_reflection_type_tags = folly::tag_t<
    ::apache::thrift::type::string_t,
    ::apache::thrift::type::i32_t
  >;

  static constexpr std::size_t __fbthrift_field_size_v = 2;

  template<class T>
  using __fbthrift_id = ::apache::thrift::type::field_id<__fbthrift_reflection_field_id_list[folly::to_underlying(T::value)]>;

  template<class T>
  using __fbthrift_type_tag = ::apache::thrift::detail::at<__fbthrift_reflection_type_tags, T::value>;

  template<class T>
  using __fbthrift_ident = ::apache::thrift::detail::at<__fbthrift_reflection_ident_list, T::value>;

  template<class T> using __fbthrift_ordinal = ::apache::thrift::type::ordinal_tag<
    ::apache::thrift::detail::getFieldOrdinal<T,
                                              __fbthrift_reflection_ident_list,
                                              __fbthrift_reflection_type_tags>(
      __fbthrift_reflection_field_id_list
    )
  >;
  void __fbthrift_clear();
  void __fbthrift_clear_terse_fields();
  bool __fbthrift_is_empty() const;
  static constexpr ::apache::thrift::ExceptionKind __fbthrift_cpp2_gen_exception_kind =
         ::apache::thrift::ExceptionKind::UNSPECIFIED;
  static constexpr ::apache::thrift::ExceptionSafety __fbthrift_cpp2_gen_exception_safety =
         ::apache::thrift::ExceptionSafety::UNSPECIFIED;
  static constexpr ::apache::thrift::ExceptionBlame __fbthrift_cpp2_gen_exception_blame =
         ::apache::thrift::ExceptionBlame::UNSPECIFIED;

 public:
  using __fbthrift_cpp2_type = reqXcep;
  static constexpr bool __fbthrift_cpp2_is_union =
    false;
  static constexpr bool __fbthrift_cpp2_uses_op_encode =
    false;


 public:

  reqXcep();

  // FragileConstructor for use in initialization lists only.
  [[deprecated("This constructor is deprecated")]]
  reqXcep(apache::thrift::FragileConstructor, ::std::string message__arg, ::std::int32_t errorCode__arg);

  reqXcep(reqXcep&&) noexcept;

  reqXcep(const reqXcep& src);


  reqXcep& operator=(reqXcep&&) noexcept;
  reqXcep& operator=(const reqXcep& src);

  ~reqXcep() override;

 private:
  ::std::string __fbthrift_field_message;
 private:
  ::std::int32_t __fbthrift_field_errorCode;

 public:

  bool operator==(const reqXcep&) const;
  bool operator<(const reqXcep&) const;

  /** Glean { "field": "message" } */
  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::required_field_ref<const T&> message_ref() const& {
    return ::apache::thrift::required_field_ref<const T&>{this->__fbthrift_field_message};
  }

  /** Glean { "field": "message" } */
  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::required_field_ref<const T&&> message_ref() const&& {
    return ::apache::thrift::required_field_ref<const T&&>{static_cast<const T&&>(this->__fbthrift_field_message)};
  }

  /** Glean { "field": "message" } */
  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::required_field_ref<T&> message_ref() & {
    return ::apache::thrift::required_field_ref<T&>{this->__fbthrift_field_message};
  }

  /** Glean { "field": "message" } */
  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::required_field_ref<T&&> message_ref() && {
    return ::apache::thrift::required_field_ref<T&&>{static_cast<T&&>(this->__fbthrift_field_message)};
  }

  /** Glean { "field": "message" } */
  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::required_field_ref<const T&> message() const& {
    return ::apache::thrift::required_field_ref<const T&>{this->__fbthrift_field_message};
  }

  /** Glean { "field": "message" } */
  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::required_field_ref<const T&&> message() const&& {
    return ::apache::thrift::required_field_ref<const T&&>{static_cast<const T&&>(this->__fbthrift_field_message)};
  }

  /** Glean { "field": "message" } */
  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::required_field_ref<T&> message() & {
    return ::apache::thrift::required_field_ref<T&>{this->__fbthrift_field_message};
  }

  /** Glean { "field": "message" } */
  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::required_field_ref<T&&> message() && {
    return ::apache::thrift::required_field_ref<T&&>{static_cast<T&&>(this->__fbthrift_field_message)};
  }

  /** Glean { "field": "errorCode" } */
  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::required_field_ref<const T&> errorCode_ref() const& {
    return ::apache::thrift::required_field_ref<const T&>{this->__fbthrift_field_errorCode};
  }

  /** Glean { "field": "errorCode" } */
  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::required_field_ref<const T&&> errorCode_ref() const&& {
    return ::apache::thrift::required_field_ref<const T&&>{static_cast<const T&&>(this->__fbthrift_field_errorCode)};
  }

  /** Glean { "field": "errorCode" } */
  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::required_field_ref<T&> errorCode_ref() & {
    return ::apache::thrift::required_field_ref<T&>{this->__fbthrift_field_errorCode};
  }

  /** Glean { "field": "errorCode" } */
  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::required_field_ref<T&&> errorCode_ref() && {
    return ::apache::thrift::required_field_ref<T&&>{static_cast<T&&>(this->__fbthrift_field_errorCode)};
  }

  /** Glean { "field": "errorCode" } */
  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::required_field_ref<const T&> errorCode() const& {
    return ::apache::thrift::required_field_ref<const T&>{this->__fbthrift_field_errorCode};
  }

  /** Glean { "field": "errorCode" } */
  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::required_field_ref<const T&&> errorCode() const&& {
    return ::apache::thrift::required_field_ref<const T&&>{static_cast<const T&&>(this->__fbthrift_field_errorCode)};
  }

  /** Glean { "field": "errorCode" } */
  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::required_field_ref<T&> errorCode() & {
    return ::apache::thrift::required_field_ref<T&>{this->__fbthrift_field_errorCode};
  }

  /** Glean { "field": "errorCode" } */
  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::required_field_ref<T&&> errorCode() && {
    return ::apache::thrift::required_field_ref<T&&>{static_cast<T&&>(this->__fbthrift_field_errorCode)};
  }

  /** Glean { "field": "message" } */
  const ::std::string& get_message() const& {
    return __fbthrift_field_message;
  }

  /** Glean { "field": "message" } */
  ::std::string get_message() && {
    return std::move(__fbthrift_field_message);
  }

  /** Glean { "field": "message" } */
  template <typename T_reqXcep_message_struct_setter = ::std::string>
  [[deprecated("Use `FOO.message() = BAR;` instead of `FOO.set_message(BAR);`")]]
  ::std::string& set_message(T_reqXcep_message_struct_setter&& message_) {
    message_ref() = std::forward<T_reqXcep_message_struct_setter>(message_);
    return __fbthrift_field_message;
  }

  /** Glean { "field": "errorCode" } */
  ::std::int32_t get_errorCode() const {
    return __fbthrift_field_errorCode;
  }

  /** Glean { "field": "errorCode" } */
  [[deprecated("Use `FOO.errorCode() = BAR;` instead of `FOO.set_errorCode(BAR);`")]]
  ::std::int32_t& set_errorCode(::std::int32_t errorCode_) {
    errorCode_ref() = errorCode_;
    return __fbthrift_field_errorCode;
  }

  template <class Protocol_>
  unsigned long read(Protocol_* iprot);
  template <class Protocol_>
  uint32_t serializedSize(Protocol_ const* prot_) const;
  template <class Protocol_>
  uint32_t serializedSizeZC(Protocol_ const* prot_) const;
  template <class Protocol_>
  uint32_t write(Protocol_* prot_) const;

  const char* what() const noexcept override {
    return "::cpp2::reqXcep";
  }

 private:
  template <class Protocol_>
  void readNoXfer(Protocol_* iprot);

  friend class ::apache::thrift::Cpp2Ops<reqXcep>;
  friend void swap(reqXcep& a, reqXcep& b);
};

template <class Protocol_>
unsigned long reqXcep::read(Protocol_* iprot) {
  auto _xferStart = iprot->getCursorPosition();
  readNoXfer(iprot);
  return iprot->getCursorPosition() - _xferStart;
}


/** Glean {"file": "thrift/compiler/test/fixtures/complex-struct/src/module.thrift", "name": "optXcep", "kind": "exception" } */
class FOLLY_EXPORT optXcep : public virtual apache::thrift::TException {
 private:
  friend struct ::apache::thrift::detail::st::struct_private_access;
  template<class> friend struct ::apache::thrift::detail::invoke_reffer;

  //  used by a static_assert in the corresponding source
  static constexpr bool __fbthrift_cpp2_gen_json = false;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  static std::string_view __fbthrift_get_field_name(::apache::thrift::FieldOrdinal ord);
  static std::string_view __fbthrift_get_class_name();
  using __fbthrift_reflection_ident_list = folly::tag_t<
    ::apache::thrift::ident::message,
    ::apache::thrift::ident::errorCode
  >;

  static constexpr std::int16_t __fbthrift_reflection_field_id_list[] = {0,1,2};
  using __fbthrift_reflection_type_tags = folly::tag_t<
    ::apache::thrift::type::string_t,
    ::apache::thrift::type::i32_t
  >;

  static constexpr std::size_t __fbthrift_field_size_v = 2;

  template<class T>
  using __fbthrift_id = ::apache::thrift::type::field_id<__fbthrift_reflection_field_id_list[folly::to_underlying(T::value)]>;

  template<class T>
  using __fbthrift_type_tag = ::apache::thrift::detail::at<__fbthrift_reflection_type_tags, T::value>;

  template<class T>
  using __fbthrift_ident = ::apache::thrift::detail::at<__fbthrift_reflection_ident_list, T::value>;

  template<class T> using __fbthrift_ordinal = ::apache::thrift::type::ordinal_tag<
    ::apache::thrift::detail::getFieldOrdinal<T,
                                              __fbthrift_reflection_ident_list,
                                              __fbthrift_reflection_type_tags>(
      __fbthrift_reflection_field_id_list
    )
  >;
  void __fbthrift_clear();
  void __fbthrift_clear_terse_fields();
  bool __fbthrift_is_empty() const;
  static constexpr ::apache::thrift::ExceptionKind __fbthrift_cpp2_gen_exception_kind =
         ::apache::thrift::ExceptionKind::UNSPECIFIED;
  static constexpr ::apache::thrift::ExceptionSafety __fbthrift_cpp2_gen_exception_safety =
         ::apache::thrift::ExceptionSafety::UNSPECIFIED;
  static constexpr ::apache::thrift::ExceptionBlame __fbthrift_cpp2_gen_exception_blame =
         ::apache::thrift::ExceptionBlame::UNSPECIFIED;

 public:
  using __fbthrift_cpp2_type = optXcep;
  static constexpr bool __fbthrift_cpp2_is_union =
    false;
  static constexpr bool __fbthrift_cpp2_uses_op_encode =
    false;


 public:

  optXcep();

  // FragileConstructor for use in initialization lists only.
  [[deprecated("This constructor is deprecated")]]
  optXcep(apache::thrift::FragileConstructor, ::std::string message__arg, ::std::int32_t errorCode__arg);

  optXcep(optXcep&&) noexcept;

  optXcep(const optXcep& src);


  optXcep& operator=(optXcep&&) noexcept;
  optXcep& operator=(const optXcep& src);

  ~optXcep() override;

 private:
  ::std::string __fbthrift_field_message;
 private:
  ::std::int32_t __fbthrift_field_errorCode;
 private:
  apache::thrift::detail::isset_bitset<2, apache::thrift::detail::IssetBitsetOption::Unpacked> __isset;

 public:

  bool operator==(const optXcep&) const;
  bool operator<(const optXcep&) const;

  /** Glean { "field": "message" } */
  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> message_ref() const& {
    return {this->__fbthrift_field_message, __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "message" } */
  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> message_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_message), __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "message" } */
  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> message_ref() & {
    return {this->__fbthrift_field_message, __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "message" } */
  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> message_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_message), __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "message" } */
  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> message() const& {
    return {this->__fbthrift_field_message, __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "message" } */
  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> message() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_message), __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "message" } */
  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> message() & {
    return {this->__fbthrift_field_message, __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "message" } */
  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> message() && {
    return {static_cast<T&&>(this->__fbthrift_field_message), __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "errorCode" } */
  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> errorCode_ref() const& {
    return {this->__fbthrift_field_errorCode, __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "errorCode" } */
  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> errorCode_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_errorCode), __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "errorCode" } */
  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> errorCode_ref() & {
    return {this->__fbthrift_field_errorCode, __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "errorCode" } */
  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> errorCode_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_errorCode), __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "errorCode" } */
  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> errorCode() const& {
    return {this->__fbthrift_field_errorCode, __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "errorCode" } */
  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> errorCode() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_errorCode), __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "errorCode" } */
  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> errorCode() & {
    return {this->__fbthrift_field_errorCode, __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "errorCode" } */
  template <typename..., typename T = ::std::int32_t>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> errorCode() && {
    return {static_cast<T&&>(this->__fbthrift_field_errorCode), __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "message" } */
  const ::std::string* get_message() const& {
    return message_ref() ? std::addressof(__fbthrift_field_message) : nullptr;
  }

  /** Glean { "field": "message" } */
  ::std::string* get_message() & {
    return message_ref() ? std::addressof(__fbthrift_field_message) : nullptr;
  }
  /** Glean { "field": "message" } */
  ::std::string* get_message() && = delete;

  /** Glean { "field": "message" } */
  template <typename T_optXcep_message_struct_setter = ::std::string>
  [[deprecated("Use `FOO.message() = BAR;` instead of `FOO.set_message(BAR);`")]]
  ::std::string& set_message(T_optXcep_message_struct_setter&& message_) {
    message_ref() = std::forward<T_optXcep_message_struct_setter>(message_);
    return __fbthrift_field_message;
  }

  /** Glean { "field": "errorCode" } */
  const ::std::int32_t* get_errorCode() const& {
    return errorCode_ref() ? std::addressof(__fbthrift_field_errorCode) : nullptr;
  }

  /** Glean { "field": "errorCode" } */
  ::std::int32_t* get_errorCode() & {
    return errorCode_ref() ? std::addressof(__fbthrift_field_errorCode) : nullptr;
  }
  /** Glean { "field": "errorCode" } */
  ::std::int32_t* get_errorCode() && = delete;

  /** Glean { "field": "errorCode" } */
  [[deprecated("Use `FOO.errorCode() = BAR;` instead of `FOO.set_errorCode(BAR);`")]]
  ::std::int32_t& set_errorCode(::std::int32_t errorCode_) {
    errorCode_ref() = errorCode_;
    return __fbthrift_field_errorCode;
  }

  template <class Protocol_>
  unsigned long read(Protocol_* iprot);
  template <class Protocol_>
  uint32_t serializedSize(Protocol_ const* prot_) const;
  template <class Protocol_>
  uint32_t serializedSizeZC(Protocol_ const* prot_) const;
  template <class Protocol_>
  uint32_t write(Protocol_* prot_) const;

  const char* what() const noexcept override {
    return "::cpp2::optXcep";
  }

 private:
  template <class Protocol_>
  void readNoXfer(Protocol_* iprot);

  friend class ::apache::thrift::Cpp2Ops<optXcep>;
  friend void swap(optXcep& a, optXcep& b);
};

template <class Protocol_>
unsigned long optXcep::read(Protocol_* iprot) {
  auto _xferStart = iprot->getCursorPosition();
  readNoXfer(iprot);
  return iprot->getCursorPosition() - _xferStart;
}


/** Glean {"file": "thrift/compiler/test/fixtures/complex-struct/src/module.thrift", "name": "complexException", "kind": "exception" } */
class FOLLY_EXPORT complexException : public virtual apache::thrift::TException {
 private:
  friend struct ::apache::thrift::detail::st::struct_private_access;
  template<class> friend struct ::apache::thrift::detail::invoke_reffer;

  //  used by a static_assert in the corresponding source
  static constexpr bool __fbthrift_cpp2_gen_json = false;
  static constexpr bool __fbthrift_cpp2_is_runtime_annotation = false;
  static std::string_view __fbthrift_get_field_name(::apache::thrift::FieldOrdinal ord);
  static std::string_view __fbthrift_get_class_name();
  using __fbthrift_reflection_ident_list = folly::tag_t<
    ::apache::thrift::ident::message,
    ::apache::thrift::ident::listStrings,
    ::apache::thrift::ident::errorEnum,
    ::apache::thrift::ident::unionError,
    ::apache::thrift::ident::structError,
    ::apache::thrift::ident::lsMap
  >;

  static constexpr std::int16_t __fbthrift_reflection_field_id_list[] = {0,1,2,3,4,5,6};
  using __fbthrift_reflection_type_tags = folly::tag_t<
    ::apache::thrift::type::string_t,
    ::apache::thrift::type::list<::apache::thrift::type::string_t>,
    ::apache::thrift::type::enum_t<::cpp2::MyEnum>,
    ::apache::thrift::type::union_t<::cpp2::MyUnion>,
    ::apache::thrift::type::struct_t<::cpp2::MyStruct>,
    ::apache::thrift::type::map<::apache::thrift::type::i64_t, ::apache::thrift::type::string_t>
  >;

  static constexpr std::size_t __fbthrift_field_size_v = 6;

  template<class T>
  using __fbthrift_id = ::apache::thrift::type::field_id<__fbthrift_reflection_field_id_list[folly::to_underlying(T::value)]>;

  template<class T>
  using __fbthrift_type_tag = ::apache::thrift::detail::at<__fbthrift_reflection_type_tags, T::value>;

  template<class T>
  using __fbthrift_ident = ::apache::thrift::detail::at<__fbthrift_reflection_ident_list, T::value>;

  template<class T> using __fbthrift_ordinal = ::apache::thrift::type::ordinal_tag<
    ::apache::thrift::detail::getFieldOrdinal<T,
                                              __fbthrift_reflection_ident_list,
                                              __fbthrift_reflection_type_tags>(
      __fbthrift_reflection_field_id_list
    )
  >;
  void __fbthrift_clear();
  void __fbthrift_clear_terse_fields();
  bool __fbthrift_is_empty() const;
  static constexpr ::apache::thrift::ExceptionKind __fbthrift_cpp2_gen_exception_kind =
         ::apache::thrift::ExceptionKind::UNSPECIFIED;
  static constexpr ::apache::thrift::ExceptionSafety __fbthrift_cpp2_gen_exception_safety =
         ::apache::thrift::ExceptionSafety::UNSPECIFIED;
  static constexpr ::apache::thrift::ExceptionBlame __fbthrift_cpp2_gen_exception_blame =
         ::apache::thrift::ExceptionBlame::UNSPECIFIED;

 public:
  using __fbthrift_cpp2_type = complexException;
  static constexpr bool __fbthrift_cpp2_is_union =
    false;
  static constexpr bool __fbthrift_cpp2_uses_op_encode =
    false;


 public:

  complexException();

  // FragileConstructor for use in initialization lists only.
  [[deprecated("This constructor is deprecated")]]
  complexException(apache::thrift::FragileConstructor, ::std::string message__arg, ::std::vector<::std::string> listStrings__arg, ::cpp2::MyEnum errorEnum__arg, ::cpp2::MyUnion unionError__arg, ::cpp2::MyStruct structError__arg, ::cpp2::map_i64_string_5732 lsMap__arg);

  complexException(complexException&&) noexcept;

  complexException(const complexException& src);


  complexException& operator=(complexException&&) noexcept;
  complexException& operator=(const complexException& src);

  ~complexException() override;

 private:
  ::std::string __fbthrift_field_message;
 private:
  ::std::vector<::std::string> __fbthrift_field_listStrings;
 private:
  ::cpp2::MyEnum __fbthrift_field_errorEnum;
 private:
  ::cpp2::MyUnion __fbthrift_field_unionError;
 private:
  ::cpp2::MyStruct __fbthrift_field_structError;
 private:
  ::cpp2::map_i64_string_5732 __fbthrift_field_lsMap;
 private:
  apache::thrift::detail::isset_bitset<6, apache::thrift::detail::IssetBitsetOption::Unpacked> __isset;

 public:

  bool operator==(const complexException&) const;
  bool operator<(const complexException&) const;

  /** Glean { "field": "message" } */
  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> message_ref() const& {
    return {this->__fbthrift_field_message, __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "message" } */
  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> message_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_message), __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "message" } */
  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> message_ref() & {
    return {this->__fbthrift_field_message, __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "message" } */
  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> message_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_message), __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "message" } */
  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> message() const& {
    return {this->__fbthrift_field_message, __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "message" } */
  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> message() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_message), __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "message" } */
  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> message() & {
    return {this->__fbthrift_field_message, __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "message" } */
  template <typename..., typename T = ::std::string>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> message() && {
    return {static_cast<T&&>(this->__fbthrift_field_message), __isset.at(0), __isset.bit(0)};
  }

  /** Glean { "field": "listStrings" } */
  template <typename..., typename T = ::std::vector<::std::string>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> listStrings_ref() const& {
    return {this->__fbthrift_field_listStrings, __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "listStrings" } */
  template <typename..., typename T = ::std::vector<::std::string>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> listStrings_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_listStrings), __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "listStrings" } */
  template <typename..., typename T = ::std::vector<::std::string>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> listStrings_ref() & {
    return {this->__fbthrift_field_listStrings, __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "listStrings" } */
  template <typename..., typename T = ::std::vector<::std::string>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> listStrings_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_listStrings), __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "listStrings" } */
  template <typename..., typename T = ::std::vector<::std::string>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> listStrings() const& {
    return {this->__fbthrift_field_listStrings, __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "listStrings" } */
  template <typename..., typename T = ::std::vector<::std::string>>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> listStrings() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_listStrings), __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "listStrings" } */
  template <typename..., typename T = ::std::vector<::std::string>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> listStrings() & {
    return {this->__fbthrift_field_listStrings, __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "listStrings" } */
  template <typename..., typename T = ::std::vector<::std::string>>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> listStrings() && {
    return {static_cast<T&&>(this->__fbthrift_field_listStrings), __isset.at(1), __isset.bit(1)};
  }

  /** Glean { "field": "errorEnum" } */
  template <typename..., typename T = ::cpp2::MyEnum>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> errorEnum_ref() const& {
    return {this->__fbthrift_field_errorEnum, __isset.at(2), __isset.bit(2)};
  }

  /** Glean { "field": "errorEnum" } */
  template <typename..., typename T = ::cpp2::MyEnum>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> errorEnum_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_errorEnum), __isset.at(2), __isset.bit(2)};
  }

  /** Glean { "field": "errorEnum" } */
  template <typename..., typename T = ::cpp2::MyEnum>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> errorEnum_ref() & {
    return {this->__fbthrift_field_errorEnum, __isset.at(2), __isset.bit(2)};
  }

  /** Glean { "field": "errorEnum" } */
  template <typename..., typename T = ::cpp2::MyEnum>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> errorEnum_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_errorEnum), __isset.at(2), __isset.bit(2)};
  }

  /** Glean { "field": "errorEnum" } */
  template <typename..., typename T = ::cpp2::MyEnum>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> errorEnum() const& {
    return {this->__fbthrift_field_errorEnum, __isset.at(2), __isset.bit(2)};
  }

  /** Glean { "field": "errorEnum" } */
  template <typename..., typename T = ::cpp2::MyEnum>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> errorEnum() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_errorEnum), __isset.at(2), __isset.bit(2)};
  }

  /** Glean { "field": "errorEnum" } */
  template <typename..., typename T = ::cpp2::MyEnum>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> errorEnum() & {
    return {this->__fbthrift_field_errorEnum, __isset.at(2), __isset.bit(2)};
  }

  /** Glean { "field": "errorEnum" } */
  template <typename..., typename T = ::cpp2::MyEnum>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> errorEnum() && {
    return {static_cast<T&&>(this->__fbthrift_field_errorEnum), __isset.at(2), __isset.bit(2)};
  }

  /** Glean { "field": "unionError" } */
  template <typename..., typename T = ::cpp2::MyUnion>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> unionError_ref() const& {
    return {this->__fbthrift_field_unionError, __isset.at(3), __isset.bit(3)};
  }

  /** Glean { "field": "unionError" } */
  template <typename..., typename T = ::cpp2::MyUnion>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> unionError_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_unionError), __isset.at(3), __isset.bit(3)};
  }

  /** Glean { "field": "unionError" } */
  template <typename..., typename T = ::cpp2::MyUnion>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> unionError_ref() & {
    return {this->__fbthrift_field_unionError, __isset.at(3), __isset.bit(3)};
  }

  /** Glean { "field": "unionError" } */
  template <typename..., typename T = ::cpp2::MyUnion>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> unionError_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_unionError), __isset.at(3), __isset.bit(3)};
  }

  /** Glean { "field": "unionError" } */
  template <typename..., typename T = ::cpp2::MyUnion>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> unionError() const& {
    return {this->__fbthrift_field_unionError, __isset.at(3), __isset.bit(3)};
  }

  /** Glean { "field": "unionError" } */
  template <typename..., typename T = ::cpp2::MyUnion>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> unionError() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_unionError), __isset.at(3), __isset.bit(3)};
  }

  /** Glean { "field": "unionError" } */
  template <typename..., typename T = ::cpp2::MyUnion>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> unionError() & {
    return {this->__fbthrift_field_unionError, __isset.at(3), __isset.bit(3)};
  }

  /** Glean { "field": "unionError" } */
  template <typename..., typename T = ::cpp2::MyUnion>
  FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> unionError() && {
    return {static_cast<T&&>(this->__fbthrift_field_unionError), __isset.at(3), __isset.bit(3)};
  }

  /** Glean { "field": "structError" } */
  template <typename..., typename T = ::cpp2::MyStruct>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> structError_ref() const& {
    return {this->__fbthrift_field_structError, __isset.at(4), __isset.bit(4)};
  }

  /** Glean { "field": "structError" } */
  template <typename..., typename T = ::cpp2::MyStruct>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> structError_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_structError), __isset.at(4), __isset.bit(4)};
  }

  /** Glean { "field": "structError" } */
  template <typename..., typename T = ::cpp2::MyStruct>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> structError_ref() & {
    return {this->__fbthrift_field_structError, __isset.at(4), __isset.bit(4)};
  }

  /** Glean { "field": "structError" } */
  template <typename..., typename T = ::cpp2::MyStruct>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> structError_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_structError), __isset.at(4), __isset.bit(4)};
  }

  /** Glean { "field": "structError" } */
  template <typename..., typename T = ::cpp2::MyStruct>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> structError() const& {
    return {this->__fbthrift_field_structError, __isset.at(4), __isset.bit(4)};
  }

  /** Glean { "field": "structError" } */
  template <typename..., typename T = ::cpp2::MyStruct>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> structError() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_structError), __isset.at(4), __isset.bit(4)};
  }

  /** Glean { "field": "structError" } */
  template <typename..., typename T = ::cpp2::MyStruct>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> structError() & {
    return {this->__fbthrift_field_structError, __isset.at(4), __isset.bit(4)};
  }

  /** Glean { "field": "structError" } */
  template <typename..., typename T = ::cpp2::MyStruct>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> structError() && {
    return {static_cast<T&&>(this->__fbthrift_field_structError), __isset.at(4), __isset.bit(4)};
  }

  /** Glean { "field": "lsMap" } */
  template <typename..., typename T = ::cpp2::map_i64_string_5732>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> lsMap_ref() const& {
    return {this->__fbthrift_field_lsMap, __isset.at(5), __isset.bit(5)};
  }

  /** Glean { "field": "lsMap" } */
  template <typename..., typename T = ::cpp2::map_i64_string_5732>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> lsMap_ref() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_lsMap), __isset.at(5), __isset.bit(5)};
  }

  /** Glean { "field": "lsMap" } */
  template <typename..., typename T = ::cpp2::map_i64_string_5732>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> lsMap_ref() & {
    return {this->__fbthrift_field_lsMap, __isset.at(5), __isset.bit(5)};
  }

  /** Glean { "field": "lsMap" } */
  template <typename..., typename T = ::cpp2::map_i64_string_5732>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> lsMap_ref() && {
    return {static_cast<T&&>(this->__fbthrift_field_lsMap), __isset.at(5), __isset.bit(5)};
  }

  /** Glean { "field": "lsMap" } */
  template <typename..., typename T = ::cpp2::map_i64_string_5732>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&> lsMap() const& {
    return {this->__fbthrift_field_lsMap, __isset.at(5), __isset.bit(5)};
  }

  /** Glean { "field": "lsMap" } */
  template <typename..., typename T = ::cpp2::map_i64_string_5732>
  FOLLY_ERASE ::apache::thrift::field_ref<const T&&> lsMap() const&& {
    return {static_cast<const T&&>(this->__fbthrift_field_lsMap), __isset.at(5), __isset.bit(5)};
  }

  /** Glean { "field": "lsMap" } */
  template <typename..., typename T = ::cpp2::map_i64_string_5732>
  FOLLY_ERASE ::apache::thrift::field_ref<T&> lsMap() & {
    return {this->__fbthrift_field_lsMap, __isset.at(5), __isset.bit(5)};
  }

  /** Glean { "field": "lsMap" } */
  template <typename..., typename T = ::cpp2::map_i64_string_5732>
  FOLLY_ERASE ::apache::thrift::field_ref<T&&> lsMap() && {
    return {static_cast<T&&>(this->__fbthrift_field_lsMap), __isset.at(5), __isset.bit(5)};
  }

  /** Glean { "field": "message" } */
  const ::std::string& get_message() const& {
    return __fbthrift_field_message;
  }

  /** Glean { "field": "message" } */
  ::std::string get_message() && {
    return std::move(__fbthrift_field_message);
  }

  /** Glean { "field": "message" } */
  template <typename T_complexException_message_struct_setter = ::std::string>
  [[deprecated("Use `FOO.message() = BAR;` instead of `FOO.set_message(BAR);`")]]
  ::std::string& set_message(T_complexException_message_struct_setter&& message_) {
    message_ref() = std::forward<T_complexException_message_struct_setter>(message_);
    return __fbthrift_field_message;
  }
  /** Glean { "field": "listStrings" } */
  const ::std::vector<::std::string>& get_listStrings() const&;
  /** Glean { "field": "listStrings" } */
  ::std::vector<::std::string> get_listStrings() &&;

  /** Glean { "field": "listStrings" } */
  template <typename T_complexException_listStrings_struct_setter = ::std::vector<::std::string>>
  [[deprecated("Use `FOO.listStrings() = BAR;` instead of `FOO.set_listStrings(BAR);`")]]
  ::std::vector<::std::string>& set_listStrings(T_complexException_listStrings_struct_setter&& listStrings_) {
    listStrings_ref() = std::forward<T_complexException_listStrings_struct_setter>(listStrings_);
    return __fbthrift_field_listStrings;
  }

  /** Glean { "field": "errorEnum" } */
  ::cpp2::MyEnum get_errorEnum() const {
    return __fbthrift_field_errorEnum;
  }

  /** Glean { "field": "errorEnum" } */
  [[deprecated("Use `FOO.errorEnum() = BAR;` instead of `FOO.set_errorEnum(BAR);`")]]
  ::cpp2::MyEnum& set_errorEnum(::cpp2::MyEnum errorEnum_) {
    errorEnum_ref() = errorEnum_;
    return __fbthrift_field_errorEnum;
  }
  /** Glean { "field": "unionError" } */
  const ::cpp2::MyUnion* get_unionError() const&;
  /** Glean { "field": "unionError" } */
  ::cpp2::MyUnion* get_unionError() &;
  /** Glean { "field": "unionError" } */
  ::cpp2::MyUnion* get_unionError() && = delete;

  /** Glean { "field": "unionError" } */
  template <typename T_complexException_unionError_struct_setter = ::cpp2::MyUnion>
  [[deprecated("Use `FOO.unionError() = BAR;` instead of `FOO.set_unionError(BAR);`")]]
  ::cpp2::MyUnion& set_unionError(T_complexException_unionError_struct_setter&& unionError_) {
    unionError_ref() = std::forward<T_complexException_unionError_struct_setter>(unionError_);
    return __fbthrift_field_unionError;
  }
  /** Glean { "field": "structError" } */
  const ::cpp2::MyStruct& get_structError() const&;
  /** Glean { "field": "structError" } */
  ::cpp2::MyStruct get_structError() &&;

  /** Glean { "field": "structError" } */
  template <typename T_complexException_structError_struct_setter = ::cpp2::MyStruct>
  [[deprecated("Use `FOO.structError() = BAR;` instead of `FOO.set_structError(BAR);`")]]
  ::cpp2::MyStruct& set_structError(T_complexException_structError_struct_setter&& structError_) {
    structError_ref() = std::forward<T_complexException_structError_struct_setter>(structError_);
    return __fbthrift_field_structError;
  }
  /** Glean { "field": "lsMap" } */
  const ::cpp2::map_i64_string_5732& get_lsMap() const&;
  /** Glean { "field": "lsMap" } */
  ::cpp2::map_i64_string_5732 get_lsMap() &&;

  /** Glean { "field": "lsMap" } */
  template <typename T_complexException_lsMap_struct_setter = ::cpp2::map_i64_string_5732>
  [[deprecated("Use `FOO.lsMap() = BAR;` instead of `FOO.set_lsMap(BAR);`")]]
  ::cpp2::map_i64_string_5732& set_lsMap(T_complexException_lsMap_struct_setter&& lsMap_) {
    lsMap_ref() = std::forward<T_complexException_lsMap_struct_setter>(lsMap_);
    return __fbthrift_field_lsMap;
  }

  template <class Protocol_>
  unsigned long read(Protocol_* iprot);
  template <class Protocol_>
  uint32_t serializedSize(Protocol_ const* prot_) const;
  template <class Protocol_>
  uint32_t serializedSizeZC(Protocol_ const* prot_) const;
  template <class Protocol_>
  uint32_t write(Protocol_* prot_) const;

  const char* what() const noexcept override {
    return "::cpp2::complexException";
  }

 private:
  template <class Protocol_>
  void readNoXfer(Protocol_* iprot);

  friend class ::apache::thrift::Cpp2Ops<complexException>;
  friend void swap(complexException& a, complexException& b);
};

template <class Protocol_>
unsigned long complexException::read(Protocol_* iprot) {
  auto _xferStart = iprot->getCursorPosition();
  readNoXfer(iprot);
  return iprot->getCursorPosition() - _xferStart;
}


} // namespace cpp2

namespace apache { namespace thrift {

template <> struct TEnumDataStorage<::cpp2::MyUnion::Type>;

template <> struct TEnumTraits<::cpp2::MyUnion::Type> {
  using type = ::cpp2::MyUnion::Type;

  static constexpr std::size_t const size = 6;
  static folly::Range<type const*> const values;
  static folly::Range<std::string_view const*> const names;

  static bool findName(type value, std::string_view* out) noexcept;
  static bool findValue(std::string_view name, type* out) noexcept;

  static char const* findName(type value) noexcept {
    std::string_view ret;
    (void)findName(value, &ret);
    return ret.data();
  }
};

template <> struct TEnumDataStorage<::cpp2::MyUnionFloatFieldThrowExp::Type>;

template <> struct TEnumTraits<::cpp2::MyUnionFloatFieldThrowExp::Type> {
  using type = ::cpp2::MyUnionFloatFieldThrowExp::Type;

  static constexpr std::size_t const size = 4;
  static folly::Range<type const*> const values;
  static folly::Range<std::string_view const*> const names;

  static bool findName(type value, std::string_view* out) noexcept;
  static bool findValue(std::string_view name, type* out) noexcept;

  static char const* findName(type value) noexcept {
    std::string_view ret;
    (void)findName(value, &ret);
    return ret.data();
  }
};
}} // apache::thrift
