text: /**
   * Autogenerated by Thrift
   *
   * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
   *  @generated
   */
  #pragma once
  
  #include <thrift/lib/cpp2/Thrift.h>
  #include <thrift/lib/cpp2/protocol/Protocol.h>
  #include <thrift/lib/cpp/TApplicationException.h>
  #include <folly/io/IOBuf.h>
  #include <folly/io/Cursor.h>
  
  #include <thrift/lib/cpp2/GeneratedHeaderHelper.h>
  
  
  
  namespace example { namespace thrift32 {
  
  class Struct0;
  class Struct1;
  class Struct2;
  class Struct3;
  class Struct4;
  class Struct5;
  class Struct6;
  class Struct7;
  class Struct8;
  class Struct9;
  class Struct10;
  class Struct11;
  class Struct12;
  class Struct13;
  class Struct14;
  class Struct15;
  class Struct16;
  class Struct17;
  class Struct18;
  class Struct19;
  class Struct20;
  class Struct21;
  class Struct22;
  class Struct23;
  class Struct24;
  class Struct25;
  class Struct26;
  class Struct27;
  class Struct28;
  class Struct29;
  
  class Struct0 : private apache::thrift::detail::st::ComparisonOperators<Struct0> {
   public:
  
    Struct0() :
        field4(0),
        field5(0) {}
    // FragileConstructor for use in initialization lists only
  
    Struct0(apache::thrift::FragileConstructor, std::string field1__arg, std::string field2__arg, std::set<std::string> field3__arg, bool field4__arg, bool field5__arg, std::set<std::set<std::string>> field6__arg, std::map<int16_t, int8_t> field7__arg) :
        field1(std::move(field1__arg)),
        field2(std::move(field2__arg)),
        field3(std::move(field3__arg)),
        field4(std::move(field4__arg)),
        field5(std::move(field5__arg)),
        field6(std::move(field6__arg)),
        field7(std::move(field7__arg)) {
      __isset.field1 = true;
      __isset.field2 = true;
      __isset.field3 = true;
      __isset.field4 = true;
      __isset.field5 = true;
      __isset.field6 = true;
      __isset.field7 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct0(::apache::thrift::detail::argument_wrapper<1, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct0(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field1 = arg.move();
      __isset.field1 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct0(::apache::thrift::detail::argument_wrapper<2, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct0(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field2 = arg.move();
      __isset.field2 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct0(::apache::thrift::detail::argument_wrapper<3, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct0(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field3 = arg.move();
      __isset.field3 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct0(::apache::thrift::detail::argument_wrapper<4, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct0(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field4 = arg.move();
      __isset.field4 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct0(::apache::thrift::detail::argument_wrapper<5, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct0(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field5 = arg.move();
      __isset.field5 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct0(::apache::thrift::detail::argument_wrapper<6, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct0(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field6 = arg.move();
      __isset.field6 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct0(::apache::thrift::detail::argument_wrapper<7, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct0(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field7 = arg.move();
      __isset.field7 = true;
    }
  
    Struct0(Struct0&&) = default;
  
    Struct0(const Struct0&) = default;
  
    Struct0& operator=(Struct0&&) = default;
  
    Struct0& operator=(const Struct0&) = default;
    void __clear();
  
    virtual ~Struct0() {}
  
    std::string field1;
    std::string field2;
    std::set<std::string> field3;
    bool field4;
    bool field5;
    std::set<std::set<std::string>> field6;
    std::map<int16_t, int8_t> field7;
  
    struct __isset {
      void __clear() {
        field1 = false;
        field2 = false;
        field3 = false;
        field4 = false;
        field5 = false;
        field6 = false;
        field7 = false;
      }
  
      bool field1 = false;
      bool field2 = false;
      bool field3 = false;
      bool field4 = false;
      bool field5 = false;
      bool field6 = false;
      bool field7 = false;
    } __isset;
    bool operator==(const Struct0& rhs) const;
  
    bool operator < (const Struct0& rhs) const {
      if (!(field1 == rhs.field1)) {
        return field1 < rhs.field1;
      }
      if (!(field2 == rhs.field2)) {
        return field2 < rhs.field2;
      }
      if (!(field3 == rhs.field3)) {
        return field3 < rhs.field3;
      }
      if (!(field4 == rhs.field4)) {
        return field4 < rhs.field4;
      }
      if (!(field5 == rhs.field5)) {
        return field5 < rhs.field5;
      }
      if (!(field6 == rhs.field6)) {
        return field6 < rhs.field6;
      }
      if (!(field7 == rhs.field7)) {
        return field7 < rhs.field7;
      }
      (void)rhs;
      return false;
    }
  
    const std::string& get_field1() const& {
      return field1;
    }
  
    std::string get_field1() && {
      return std::move(field1);
    }
  
    template <typename T_Struct0_field1_struct_setter>
    std::string& set_field1(T_Struct0_field1_struct_setter&& field1_) {
      field1 = std::forward<T_Struct0_field1_struct_setter>(field1_);
      __isset.field1 = true;
      return field1;
    }
  
    const std::string& get_field2() const& {
      return field2;
    }
  
    std::string get_field2() && {
      return std::move(field2);
    }
  
    template <typename T_Struct0_field2_struct_setter>
    std::string& set_field2(T_Struct0_field2_struct_setter&& field2_) {
      field2 = std::forward<T_Struct0_field2_struct_setter>(field2_);
      __isset.field2 = true;
      return field2;
    }
    const std::set<std::string>& get_field3() const&;
    std::set<std::string> get_field3() &&;
  
    template <typename T_Struct0_field3_struct_setter>
    std::set<std::string>& set_field3(T_Struct0_field3_struct_setter&& field3_) {
      field3 = std::forward<T_Struct0_field3_struct_setter>(field3_);
      __isset.field3 = true;
      return field3;
    }
  
    bool get_field4() const {
      return field4;
    }
  
    bool& set_field4(bool field4_) {
      field4 = field4_;
      __isset.field4 = true;
      return field4;
    }
  
    bool get_field5() const {
      return field5;
    }
  
    bool& set_field5(bool field5_) {
      field5 = field5_;
      __isset.field5 = true;
      return field5;
    }
    const std::set<std::set<std::string>>& get_field6() const&;
    std::set<std::set<std::string>> get_field6() &&;
  
    template <typename T_Struct0_field6_struct_setter>
    std::set<std::set<std::string>>& set_field6(T_Struct0_field6_struct_setter&& field6_) {
      field6 = std::forward<T_Struct0_field6_struct_setter>(field6_);
      __isset.field6 = true;
      return field6;
    }
    const std::map<int16_t, int8_t>& get_field7() const&;
    std::map<int16_t, int8_t> get_field7() &&;
  
    template <typename T_Struct0_field7_struct_setter>
    std::map<int16_t, int8_t>& set_field7(T_Struct0_field7_struct_setter&& field7_) {
      field7 = std::forward<T_Struct0_field7_struct_setter>(field7_);
      __isset.field7 = true;
      return field7;
    }
  
    template <class Protocol_>
    uint32_t 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:
    static void translateFieldName(FOLLY_MAYBE_UNUSED folly::StringPiece _fname, FOLLY_MAYBE_UNUSED int16_t& fid, FOLLY_MAYBE_UNUSED apache::thrift::protocol::TType& _ftype);
  };
  
  void swap(Struct0& a, Struct0& b);
  extern template uint32_t Struct0::read<>(apache::thrift::BinaryProtocolReader*);
  extern template uint32_t Struct0::write<>(apache::thrift::BinaryProtocolWriter*) const;
  extern template uint32_t Struct0::serializedSize<>(apache::thrift::BinaryProtocolWriter const*) const;
  extern template uint32_t Struct0::serializedSizeZC<>(apache::thrift::BinaryProtocolWriter const*) const;
  extern template uint32_t Struct0::read<>(apache::thrift::CompactProtocolReader*);
  extern template uint32_t Struct0::write<>(apache::thrift::CompactProtocolWriter*) const;
  extern template uint32_t Struct0::serializedSize<>(apache::thrift::CompactProtocolWriter const*) const;
  extern template uint32_t Struct0::serializedSizeZC<>(apache::thrift::CompactProtocolWriter const*) const;
  
  }} // example::thrift32
  namespace apache { namespace thrift {
  
  template <> inline void Cpp2Ops< ::example::thrift32::Struct0>::clear( ::example::thrift32::Struct0* obj) {
    return obj->__clear();
  }
  
  template <> inline constexpr apache::thrift::protocol::TType Cpp2Ops< ::example::thrift32::Struct0>::thriftType() {
    return apache::thrift::protocol::T_STRUCT;
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct0>::write(Protocol* proto,  ::example::thrift32::Struct0 const* obj) {
    return obj->write(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct0>::read(Protocol* proto,  ::example::thrift32::Struct0* obj) {
    return obj->read(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct0>::serializedSize(Protocol const* proto,  ::example::thrift32::Struct0 const* obj) {
    return obj->serializedSize(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct0>::serializedSizeZC(Protocol const* proto,  ::example::thrift32::Struct0 const* obj) {
    return obj->serializedSizeZC(proto);
  }
  
  }} // apache::thrift
  namespace example { namespace thrift32 {
  
  class Struct1 : private apache::thrift::detail::st::ComparisonOperators<Struct1> {
   public:
  
    Struct1() :
        field2(0),
        field3(0) {}
    // FragileConstructor for use in initialization lists only
  
    Struct1(apache::thrift::FragileConstructor, std::map<int16_t, int16_t> field1__arg, int32_t field2__arg, double field3__arg, std::vector<int16_t> field4__arg,  ::example::thrift32::Struct0 field5__arg, std::vector<bool> field6__arg, std::set<std::map<int8_t, int32_t>> field7__arg) :
        field1(std::move(field1__arg)),
        field2(std::move(field2__arg)),
        field3(std::move(field3__arg)),
        field4(std::move(field4__arg)),
        field5(std::move(field5__arg)),
        field6(std::move(field6__arg)),
        field7(std::move(field7__arg)) {
      __isset.field1 = true;
      __isset.field2 = true;
      __isset.field3 = true;
      __isset.field4 = true;
      __isset.field5 = true;
      __isset.field6 = true;
      __isset.field7 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct1(::apache::thrift::detail::argument_wrapper<1, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct1(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field1 = arg.move();
      __isset.field1 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct1(::apache::thrift::detail::argument_wrapper<2, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct1(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field2 = arg.move();
      __isset.field2 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct1(::apache::thrift::detail::argument_wrapper<3, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct1(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field3 = arg.move();
      __isset.field3 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct1(::apache::thrift::detail::argument_wrapper<4, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct1(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field4 = arg.move();
      __isset.field4 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct1(::apache::thrift::detail::argument_wrapper<5, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct1(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field5 = arg.move();
      __isset.field5 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct1(::apache::thrift::detail::argument_wrapper<6, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct1(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field6 = arg.move();
      __isset.field6 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct1(::apache::thrift::detail::argument_wrapper<7, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct1(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field7 = arg.move();
      __isset.field7 = true;
    }
  
    Struct1(Struct1&&) = default;
  
    Struct1(const Struct1&) = default;
  
    Struct1& operator=(Struct1&&) = default;
  
    Struct1& operator=(const Struct1&) = default;
    void __clear();
  
    virtual ~Struct1() {}
  
    std::map<int16_t, int16_t> field1;
    int32_t field2;
    double field3;
    std::vector<int16_t> field4;
     ::example::thrift32::Struct0 field5;
    std::vector<bool> field6;
    std::set<std::map<int8_t, int32_t>> field7;
  
    struct __isset {
      void __clear() {
        field1 = false;
        field2 = false;
        field3 = false;
        field4 = false;
        field5 = false;
        field6 = false;
        field7 = false;
      }
  
      bool field1 = false;
      bool field2 = false;
      bool field3 = false;
      bool field4 = false;
      bool field5 = false;
      bool field6 = false;
      bool field7 = false;
    } __isset;
    bool operator==(const Struct1& rhs) const;
  
    bool operator < (const Struct1& rhs) const {
      if (!(field1 == rhs.field1)) {
        return field1 < rhs.field1;
      }
      if (!(field2 == rhs.field2)) {
        return field2 < rhs.field2;
      }
      if (!(field3 == rhs.field3)) {
        return field3 < rhs.field3;
      }
      if (!(field4 == rhs.field4)) {
        return field4 < rhs.field4;
      }
      if (!(field5 == rhs.field5)) {
        return field5 < rhs.field5;
      }
      if (!(field6 == rhs.field6)) {
        return field6 < rhs.field6;
      }
      if (!(field7 == rhs.field7)) {
        return field7 < rhs.field7;
      }
      (void)rhs;
      return false;
    }
    const std::map<int16_t, int16_t>& get_field1() const&;
    std::map<int16_t, int16_t> get_field1() &&;
  
    template <typename T_Struct1_field1_struct_setter>
    std::map<int16_t, int16_t>& set_field1(T_Struct1_field1_struct_setter&& field1_) {
      field1 = std::forward<T_Struct1_field1_struct_setter>(field1_);
      __isset.field1 = true;
      return field1;
    }
  
    int32_t get_field2() const {
      return field2;
    }
  
    int32_t& set_field2(int32_t field2_) {
      field2 = field2_;
      __isset.field2 = true;
      return field2;
    }
  
    double get_field3() const {
      return field3;
    }
  
    double& set_field3(double field3_) {
      field3 = field3_;
      __isset.field3 = true;
      return field3;
    }
    const std::vector<int16_t>& get_field4() const&;
    std::vector<int16_t> get_field4() &&;
  
    template <typename T_Struct1_field4_struct_setter>
    std::vector<int16_t>& set_field4(T_Struct1_field4_struct_setter&& field4_) {
      field4 = std::forward<T_Struct1_field4_struct_setter>(field4_);
      __isset.field4 = true;
      return field4;
    }
    const  ::example::thrift32::Struct0& get_field5() const&;
     ::example::thrift32::Struct0 get_field5() &&;
  
    template <typename T_Struct1_field5_struct_setter>
     ::example::thrift32::Struct0& set_field5(T_Struct1_field5_struct_setter&& field5_) {
      field5 = std::forward<T_Struct1_field5_struct_setter>(field5_);
      __isset.field5 = true;
      return field5;
    }
    const std::vector<bool>& get_field6() const&;
    std::vector<bool> get_field6() &&;
  
    template <typename T_Struct1_field6_struct_setter>
    std::vector<bool>& set_field6(T_Struct1_field6_struct_setter&& field6_) {
      field6 = std::forward<T_Struct1_field6_struct_setter>(field6_);
      __isset.field6 = true;
      return field6;
    }
    const std::set<std::map<int8_t, int32_t>>& get_field7() const&;
    std::set<std::map<int8_t, int32_t>> get_field7() &&;
  
    template <typename T_Struct1_field7_struct_setter>
    std::set<std::map<int8_t, int32_t>>& set_field7(T_Struct1_field7_struct_setter&& field7_) {
      field7 = std::forward<T_Struct1_field7_struct_setter>(field7_);
      __isset.field7 = true;
      return field7;
    }
  
    template <class Protocol_>
    uint32_t 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:
    static void translateFieldName(FOLLY_MAYBE_UNUSED folly::StringPiece _fname, FOLLY_MAYBE_UNUSED int16_t& fid, FOLLY_MAYBE_UNUSED apache::thrift::protocol::TType& _ftype);
  };
  
  void swap(Struct1& a, Struct1& b);
  extern template uint32_t Struct1::read<>(apache::thrift::BinaryProtocolReader*);
  extern template uint32_t Struct1::write<>(apache::thrift::BinaryProtocolWriter*) const;
  extern template uint32_t Struct1::serializedSize<>(apache::thrift::BinaryProtocolWriter const*) const;
  extern template uint32_t Struct1::serializedSizeZC<>(apache::thrift::BinaryProtocolWriter const*) const;
  extern template uint32_t Struct1::read<>(apache::thrift::CompactProtocolReader*);
  extern template uint32_t Struct1::write<>(apache::thrift::CompactProtocolWriter*) const;
  extern template uint32_t Struct1::serializedSize<>(apache::thrift::CompactProtocolWriter const*) const;
  extern template uint32_t Struct1::serializedSizeZC<>(apache::thrift::CompactProtocolWriter const*) const;
  
  }} // example::thrift32
  namespace apache { namespace thrift {
  
  template <> inline void Cpp2Ops< ::example::thrift32::Struct1>::clear( ::example::thrift32::Struct1* obj) {
    return obj->__clear();
  }
  
  template <> inline constexpr apache::thrift::protocol::TType Cpp2Ops< ::example::thrift32::Struct1>::thriftType() {
    return apache::thrift::protocol::T_STRUCT;
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct1>::write(Protocol* proto,  ::example::thrift32::Struct1 const* obj) {
    return obj->write(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct1>::read(Protocol* proto,  ::example::thrift32::Struct1* obj) {
    return obj->read(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct1>::serializedSize(Protocol const* proto,  ::example::thrift32::Struct1 const* obj) {
    return obj->serializedSize(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct1>::serializedSizeZC(Protocol const* proto,  ::example::thrift32::Struct1 const* obj) {
    return obj->serializedSizeZC(proto);
  }
  
  }} // apache::thrift
  namespace example { namespace thrift32 {
  
  class Struct2 : private apache::thrift::detail::st::ComparisonOperators<Struct2> {
   public:
  
    Struct2() :
        field3(0),
        field4(0),
        field6(0),
        field8(0),
        field10(0),
        field12(0),
        field14(0),
        field16(0),
        field17(0),
        field20(0),
        field22(0) {}
    // FragileConstructor for use in initialization lists only
  
    Struct2(apache::thrift::FragileConstructor, std::map<double, int8_t> field1__arg, std::vector<int32_t> field2__arg, int32_t field3__arg, int32_t field4__arg, std::set<int64_t> field5__arg, int32_t field6__arg, std::set<float> field7__arg, float field8__arg, std::vector<int8_t> field9__arg, int32_t field10__arg, std::set<float> field11__arg, double field12__arg, std::vector<float> field13__arg, int16_t field14__arg,  ::example::thrift32::Struct0 field15__arg, int32_t field16__arg, double field17__arg, std::string field18__arg, std::map<float, std::string> field19__arg, bool field20__arg,  ::example::thrift32::Struct0 field21__arg, int64_t field22__arg,  ::example::thrift32::Struct0 field23__arg) :
        field1(std::move(field1__arg)),
        field2(std::move(field2__arg)),
        field3(std::move(field3__arg)),
        field4(std::move(field4__arg)),
        field5(std::move(field5__arg)),
        field6(std::move(field6__arg)),
        field7(std::move(field7__arg)),
        field8(std::move(field8__arg)),
        field9(std::move(field9__arg)),
        field10(std::move(field10__arg)),
        field11(std::move(field11__arg)),
        field12(std::move(field12__arg)),
        field13(std::move(field13__arg)),
        field14(std::move(field14__arg)),
        field15(std::move(field15__arg)),
        field16(std::move(field16__arg)),
        field17(std::move(field17__arg)),
        field18(std::move(field18__arg)),
        field19(std::move(field19__arg)),
        field20(std::move(field20__arg)),
        field21(std::move(field21__arg)),
        field22(std::move(field22__arg)),
        field23(std::move(field23__arg)) {
      __isset.field1 = true;
      __isset.field2 = true;
      __isset.field3 = true;
      __isset.field4 = true;
      __isset.field5 = true;
      __isset.field6 = true;
      __isset.field7 = true;
      __isset.field8 = true;
      __isset.field9 = true;
      __isset.field10 = true;
      __isset.field11 = true;
      __isset.field12 = true;
      __isset.field13 = true;
      __isset.field14 = true;
      __isset.field15 = true;
      __isset.field16 = true;
      __isset.field17 = true;
      __isset.field18 = true;
      __isset.field19 = true;
      __isset.field20 = true;
      __isset.field21 = true;
      __isset.field22 = true;
      __isset.field23 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct2(::apache::thrift::detail::argument_wrapper<1, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct2(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field1 = arg.move();
      __isset.field1 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct2(::apache::thrift::detail::argument_wrapper<2, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct2(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field2 = arg.move();
      __isset.field2 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct2(::apache::thrift::detail::argument_wrapper<3, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct2(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field3 = arg.move();
      __isset.field3 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct2(::apache::thrift::detail::argument_wrapper<4, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct2(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field4 = arg.move();
      __isset.field4 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct2(::apache::thrift::detail::argument_wrapper<5, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct2(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field5 = arg.move();
      __isset.field5 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct2(::apache::thrift::detail::argument_wrapper<6, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct2(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field6 = arg.move();
      __isset.field6 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct2(::apache::thrift::detail::argument_wrapper<7, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct2(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field7 = arg.move();
      __isset.field7 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct2(::apache::thrift::detail::argument_wrapper<8, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct2(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field8 = arg.move();
      __isset.field8 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct2(::apache::thrift::detail::argument_wrapper<9, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct2(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field9 = arg.move();
      __isset.field9 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct2(::apache::thrift::detail::argument_wrapper<10, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct2(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field10 = arg.move();
      __isset.field10 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct2(::apache::thrift::detail::argument_wrapper<11, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct2(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field11 = arg.move();
      __isset.field11 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct2(::apache::thrift::detail::argument_wrapper<12, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct2(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field12 = arg.move();
      __isset.field12 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct2(::apache::thrift::detail::argument_wrapper<13, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct2(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field13 = arg.move();
      __isset.field13 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct2(::apache::thrift::detail::argument_wrapper<14, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct2(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field14 = arg.move();
      __isset.field14 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct2(::apache::thrift::detail::argument_wrapper<15, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct2(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field15 = arg.move();
      __isset.field15 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct2(::apache::thrift::detail::argument_wrapper<16, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct2(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field16 = arg.move();
      __isset.field16 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct2(::apache::thrift::detail::argument_wrapper<17, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct2(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field17 = arg.move();
      __isset.field17 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct2(::apache::thrift::detail::argument_wrapper<18, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct2(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field18 = arg.move();
      __isset.field18 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct2(::apache::thrift::detail::argument_wrapper<19, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct2(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field19 = arg.move();
      __isset.field19 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct2(::apache::thrift::detail::argument_wrapper<20, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct2(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field20 = arg.move();
      __isset.field20 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct2(::apache::thrift::detail::argument_wrapper<21, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct2(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field21 = arg.move();
      __isset.field21 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct2(::apache::thrift::detail::argument_wrapper<22, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct2(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field22 = arg.move();
      __isset.field22 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct2(::apache::thrift::detail::argument_wrapper<23, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct2(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field23 = arg.move();
      __isset.field23 = true;
    }
  
    Struct2(Struct2&&) = default;
  
    Struct2(const Struct2&) = default;
  
    Struct2& operator=(Struct2&&) = default;
  
    Struct2& operator=(const Struct2&) = default;
    void __clear();
  
    virtual ~Struct2() {}
  
    std::map<double, int8_t> field1;
    std::vector<int32_t> field2;
    int32_t field3;
    int32_t field4;
    std::set<int64_t> field5;
    int32_t field6;
    std::set<float> field7;
    float field8;
    std::vector<int8_t> field9;
    int32_t field10;
    std::set<float> field11;
    double field12;
    std::vector<float> field13;
    int16_t field14;
     ::example::thrift32::Struct0 field15;
    int32_t field16;
    double field17;
    std::string field18;
    std::map<float, std::string> field19;
    bool field20;
     ::example::thrift32::Struct0 field21;
    int64_t field22;
     ::example::thrift32::Struct0 field23;
  
    struct __isset {
      void __clear() {
        field1 = false;
        field2 = false;
        field3 = false;
        field4 = false;
        field5 = false;
        field6 = false;
        field7 = false;
        field8 = false;
        field9 = false;
        field10 = false;
        field11 = false;
        field12 = false;
        field13 = false;
        field14 = false;
        field15 = false;
        field16 = false;
        field17 = false;
        field18 = false;
        field19 = false;
        field20 = false;
        field21 = false;
        field22 = false;
        field23 = false;
      }
  
      bool field1 = false;
      bool field2 = false;
      bool field3 = false;
      bool field4 = false;
      bool field5 = false;
      bool field6 = false;
      bool field7 = false;
      bool field8 = false;
      bool field9 = false;
      bool field10 = false;
      bool field11 = false;
      bool field12 = false;
      bool field13 = false;
      bool field14 = false;
      bool field15 = false;
      bool field16 = false;
      bool field17 = false;
      bool field18 = false;
      bool field19 = false;
      bool field20 = false;
      bool field21 = false;
      bool field22 = false;
      bool field23 = false;
    } __isset;
    bool operator==(const Struct2& rhs) const;
  
    bool operator < (const Struct2& rhs) const {
      if (!(field1 == rhs.field1)) {
        return field1 < rhs.field1;
      }
      if (!(field2 == rhs.field2)) {
        return field2 < rhs.field2;
      }
      if (!(field3 == rhs.field3)) {
        return field3 < rhs.field3;
      }
      if (!(field4 == rhs.field4)) {
        return field4 < rhs.field4;
      }
      if (!(field5 == rhs.field5)) {
        return field5 < rhs.field5;
      }
      if (!(field6 == rhs.field6)) {
        return field6 < rhs.field6;
      }
      if (!(field7 == rhs.field7)) {
        return field7 < rhs.field7;
      }
      if (!(field8 == rhs.field8)) {
        return field8 < rhs.field8;
      }
      if (!(field9 == rhs.field9)) {
        return field9 < rhs.field9;
      }
      if (!(field10 == rhs.field10)) {
        return field10 < rhs.field10;
      }
      if (!(field11 == rhs.field11)) {
        return field11 < rhs.field11;
      }
      if (!(field12 == rhs.field12)) {
        return field12 < rhs.field12;
      }
      if (!(field13 == rhs.field13)) {
        return field13 < rhs.field13;
      }
      if (!(field14 == rhs.field14)) {
        return field14 < rhs.field14;
      }
      if (!(field15 == rhs.field15)) {
        return field15 < rhs.field15;
      }
      if (!(field16 == rhs.field16)) {
        return field16 < rhs.field16;
      }
      if (!(field17 == rhs.field17)) {
        return field17 < rhs.field17;
      }
      if (!(field18 == rhs.field18)) {
        return field18 < rhs.field18;
      }
      if (!(field19 == rhs.field19)) {
        return field19 < rhs.field19;
      }
      if (!(field20 == rhs.field20)) {
        return field20 < rhs.field20;
      }
      if (!(field21 == rhs.field21)) {
        return field21 < rhs.field21;
      }
      if (!(field22 == rhs.field22)) {
        return field22 < rhs.field22;
      }
      if (!(field23 == rhs.field23)) {
        return field23 < rhs.field23;
      }
      (void)rhs;
      return false;
    }
    const std::map<double, int8_t>& get_field1() const&;
    std::map<double, int8_t> get_field1() &&;
  
    template <typename T_Struct2_field1_struct_setter>
    std::map<double, int8_t>& set_field1(T_Struct2_field1_struct_setter&& field1_) {
      field1 = std::forward<T_Struct2_field1_struct_setter>(field1_);
      __isset.field1 = true;
      return field1;
    }
    const std::vector<int32_t>& get_field2() const&;
    std::vector<int32_t> get_field2() &&;
  
    template <typename T_Struct2_field2_struct_setter>
    std::vector<int32_t>& set_field2(T_Struct2_field2_struct_setter&& field2_) {
      field2 = std::forward<T_Struct2_field2_struct_setter>(field2_);
      __isset.field2 = true;
      return field2;
    }
  
    int32_t get_field3() const {
      return field3;
    }
  
    int32_t& set_field3(int32_t field3_) {
      field3 = field3_;
      __isset.field3 = true;
      return field3;
    }
  
    int32_t get_field4() const {
      return field4;
    }
  
    int32_t& set_field4(int32_t field4_) {
      field4 = field4_;
      __isset.field4 = true;
      return field4;
    }
    const std::set<int64_t>& get_field5() const&;
    std::set<int64_t> get_field5() &&;
  
    template <typename T_Struct2_field5_struct_setter>
    std::set<int64_t>& set_field5(T_Struct2_field5_struct_setter&& field5_) {
      field5 = std::forward<T_Struct2_field5_struct_setter>(field5_);
      __isset.field5 = true;
      return field5;
    }
  
    int32_t get_field6() const {
      return field6;
    }
  
    int32_t& set_field6(int32_t field6_) {
      field6 = field6_;
      __isset.field6 = true;
      return field6;
    }
    const std::set<float>& get_field7() const&;
    std::set<float> get_field7() &&;
  
    template <typename T_Struct2_field7_struct_setter>
    std::set<float>& set_field7(T_Struct2_field7_struct_setter&& field7_) {
      field7 = std::forward<T_Struct2_field7_struct_setter>(field7_);
      __isset.field7 = true;
      return field7;
    }
  
    float get_field8() const {
      return field8;
    }
  
    float& set_field8(float field8_) {
      field8 = field8_;
      __isset.field8 = true;
      return field8;
    }
    const std::vector<int8_t>& get_field9() const&;
    std::vector<int8_t> get_field9() &&;
  
    template <typename T_Struct2_field9_struct_setter>
    std::vector<int8_t>& set_field9(T_Struct2_field9_struct_setter&& field9_) {
      field9 = std::forward<T_Struct2_field9_struct_setter>(field9_);
      __isset.field9 = true;
      return field9;
    }
  
    int32_t get_field10() const {
      return field10;
    }
  
    int32_t& set_field10(int32_t field10_) {
      field10 = field10_;
      __isset.field10 = true;
      return field10;
    }
    const std::set<float>& get_field11() const&;
    std::set<float> get_field11() &&;
  
    template <typename T_Struct2_field11_struct_setter>
    std::set<float>& set_field11(T_Struct2_field11_struct_setter&& field11_) {
      field11 = std::forward<T_Struct2_field11_struct_setter>(field11_);
      __isset.field11 = true;
      return field11;
    }
  
    double get_field12() const {
      return field12;
    }
  
    double& set_field12(double field12_) {
      field12 = field12_;
      __isset.field12 = true;
      return field12;
    }
    const std::vector<float>& get_field13() const&;
    std::vector<float> get_field13() &&;
  
    template <typename T_Struct2_field13_struct_setter>
    std::vector<float>& set_field13(T_Struct2_field13_struct_setter&& field13_) {
      field13 = std::forward<T_Struct2_field13_struct_setter>(field13_);
      __isset.field13 = true;
      return field13;
    }
  
    int16_t get_field14() const {
      return field14;
    }
  
    int16_t& set_field14(int16_t field14_) {
      field14 = field14_;
      __isset.field14 = true;
      return field14;
    }
    const  ::example::thrift32::Struct0& get_field15() const&;
     ::example::thrift32::Struct0 get_field15() &&;
  
    template <typename T_Struct2_field15_struct_setter>
     ::example::thrift32::Struct0& set_field15(T_Struct2_field15_struct_setter&& field15_) {
      field15 = std::forward<T_Struct2_field15_struct_setter>(field15_);
      __isset.field15 = true;
      return field15;
    }
  
    int32_t get_field16() const {
      return field16;
    }
  
    int32_t& set_field16(int32_t field16_) {
      field16 = field16_;
      __isset.field16 = true;
      return field16;
    }
  
    double get_field17() const {
      return field17;
    }
  
    double& set_field17(double field17_) {
      field17 = field17_;
      __isset.field17 = true;
      return field17;
    }
  
    const std::string& get_field18() const& {
      return field18;
    }
  
    std::string get_field18() && {
      return std::move(field18);
    }
  
    template <typename T_Struct2_field18_struct_setter>
    std::string& set_field18(T_Struct2_field18_struct_setter&& field18_) {
      field18 = std::forward<T_Struct2_field18_struct_setter>(field18_);
      __isset.field18 = true;
      return field18;
    }
    const std::map<float, std::string>& get_field19() const&;
    std::map<float, std::string> get_field19() &&;
  
    template <typename T_Struct2_field19_struct_setter>
    std::map<float, std::string>& set_field19(T_Struct2_field19_struct_setter&& field19_) {
      field19 = std::forward<T_Struct2_field19_struct_setter>(field19_);
      __isset.field19 = true;
      return field19;
    }
  
    bool get_field20() const {
      return field20;
    }
  
    bool& set_field20(bool field20_) {
      field20 = field20_;
      __isset.field20 = true;
      return field20;
    }
    const  ::example::thrift32::Struct0& get_field21() const&;
     ::example::thrift32::Struct0 get_field21() &&;
  
    template <typename T_Struct2_field21_struct_setter>
     ::example::thrift32::Struct0& set_field21(T_Struct2_field21_struct_setter&& field21_) {
      field21 = std::forward<T_Struct2_field21_struct_setter>(field21_);
      __isset.field21 = true;
      return field21;
    }
  
    int64_t get_field22() const {
      return field22;
    }
  
    int64_t& set_field22(int64_t field22_) {
      field22 = field22_;
      __isset.field22 = true;
      return field22;
    }
    const  ::example::thrift32::Struct0& get_field23() const&;
     ::example::thrift32::Struct0 get_field23() &&;
  
    template <typename T_Struct2_field23_struct_setter>
     ::example::thrift32::Struct0& set_field23(T_Struct2_field23_struct_setter&& field23_) {
      field23 = std::forward<T_Struct2_field23_struct_setter>(field23_);
      __isset.field23 = true;
      return field23;
    }
  
    template <class Protocol_>
    uint32_t 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:
    static void translateFieldName(FOLLY_MAYBE_UNUSED folly::StringPiece _fname, FOLLY_MAYBE_UNUSED int16_t& fid, FOLLY_MAYBE_UNUSED apache::thrift::protocol::TType& _ftype);
  };
  
  void swap(Struct2& a, Struct2& b);
  extern template uint32_t Struct2::read<>(apache::thrift::BinaryProtocolReader*);
  extern template uint32_t Struct2::write<>(apache::thrift::BinaryProtocolWriter*) const;
  extern template uint32_t Struct2::serializedSize<>(apache::thrift::BinaryProtocolWriter const*) const;
  extern template uint32_t Struct2::serializedSizeZC<>(apache::thrift::BinaryProtocolWriter const*) const;
  extern template uint32_t Struct2::read<>(apache::thrift::CompactProtocolReader*);
  extern template uint32_t Struct2::write<>(apache::thrift::CompactProtocolWriter*) const;
  extern template uint32_t Struct2::serializedSize<>(apache::thrift::CompactProtocolWriter const*) const;
  extern template uint32_t Struct2::serializedSizeZC<>(apache::thrift::CompactProtocolWriter const*) const;
  
  }} // example::thrift32
  namespace apache { namespace thrift {
  
  template <> inline void Cpp2Ops< ::example::thrift32::Struct2>::clear( ::example::thrift32::Struct2* obj) {
    return obj->__clear();
  }
  
  template <> inline constexpr apache::thrift::protocol::TType Cpp2Ops< ::example::thrift32::Struct2>::thriftType() {
    return apache::thrift::protocol::T_STRUCT;
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct2>::write(Protocol* proto,  ::example::thrift32::Struct2 const* obj) {
    return obj->write(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct2>::read(Protocol* proto,  ::example::thrift32::Struct2* obj) {
    return obj->read(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct2>::serializedSize(Protocol const* proto,  ::example::thrift32::Struct2 const* obj) {
    return obj->serializedSize(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct2>::serializedSizeZC(Protocol const* proto,  ::example::thrift32::Struct2 const* obj) {
    return obj->serializedSizeZC(proto);
  }
  
  }} // apache::thrift
  namespace example { namespace thrift32 {
  
  class Struct3 : private apache::thrift::detail::st::ComparisonOperators<Struct3> {
   public:
  
    Struct3() :
        field1(0),
        field3(0),
        field4(0),
        field6(0),
        field7(0) {}
    // FragileConstructor for use in initialization lists only
  
    Struct3(apache::thrift::FragileConstructor, int32_t field1__arg,  ::example::thrift32::Struct1 field2__arg, int8_t field3__arg, int32_t field4__arg, std::set< ::example::thrift32::Struct2> field5__arg, int8_t field6__arg, int8_t field7__arg,  ::example::thrift32::Struct1 field8__arg,  ::example::thrift32::Struct0 field9__arg, std::vector<float> field10__arg) :
        field1(std::move(field1__arg)),
        field2(std::move(field2__arg)),
        field3(std::move(field3__arg)),
        field4(std::move(field4__arg)),
        field5(std::move(field5__arg)),
        field6(std::move(field6__arg)),
        field7(std::move(field7__arg)),
        field8(std::move(field8__arg)),
        field9(std::move(field9__arg)),
        field10(std::move(field10__arg)) {
      __isset.field1 = true;
      __isset.field2 = true;
      __isset.field3 = true;
      __isset.field4 = true;
      __isset.field5 = true;
      __isset.field6 = true;
      __isset.field7 = true;
      __isset.field8 = true;
      __isset.field9 = true;
      __isset.field10 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct3(::apache::thrift::detail::argument_wrapper<1, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct3(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field1 = arg.move();
      __isset.field1 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct3(::apache::thrift::detail::argument_wrapper<2, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct3(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field2 = arg.move();
      __isset.field2 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct3(::apache::thrift::detail::argument_wrapper<3, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct3(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field3 = arg.move();
      __isset.field3 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct3(::apache::thrift::detail::argument_wrapper<4, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct3(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field4 = arg.move();
      __isset.field4 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct3(::apache::thrift::detail::argument_wrapper<5, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct3(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field5 = arg.move();
      __isset.field5 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct3(::apache::thrift::detail::argument_wrapper<6, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct3(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field6 = arg.move();
      __isset.field6 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct3(::apache::thrift::detail::argument_wrapper<7, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct3(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field7 = arg.move();
      __isset.field7 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct3(::apache::thrift::detail::argument_wrapper<8, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct3(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field8 = arg.move();
      __isset.field8 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct3(::apache::thrift::detail::argument_wrapper<9, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct3(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field9 = arg.move();
      __isset.field9 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct3(::apache::thrift::detail::argument_wrapper<10, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct3(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field10 = arg.move();
      __isset.field10 = true;
    }
  
    Struct3(Struct3&&) = default;
  
    Struct3(const Struct3&) = default;
  
    Struct3& operator=(Struct3&&) = default;
  
    Struct3& operator=(const Struct3&) = default;
    void __clear();
  
    virtual ~Struct3() {}
  
    int32_t field1;
     ::example::thrift32::Struct1 field2;
    int8_t field3;
    int32_t field4;
    std::set< ::example::thrift32::Struct2> field5;
    int8_t field6;
    int8_t field7;
     ::example::thrift32::Struct1 field8;
     ::example::thrift32::Struct0 field9;
    std::vector<float> field10;
  
    struct __isset {
      void __clear() {
        field1 = false;
        field2 = false;
        field3 = false;
        field4 = false;
        field5 = false;
        field6 = false;
        field7 = false;
        field8 = false;
        field9 = false;
        field10 = false;
      }
  
      bool field1 = false;
      bool field2 = false;
      bool field3 = false;
      bool field4 = false;
      bool field5 = false;
      bool field6 = false;
      bool field7 = false;
      bool field8 = false;
      bool field9 = false;
      bool field10 = false;
    } __isset;
    bool operator==(const Struct3& rhs) const;
  
    bool operator < (const Struct3& rhs) const {
      if (!(field1 == rhs.field1)) {
        return field1 < rhs.field1;
      }
      if (!(field2 == rhs.field2)) {
        return field2 < rhs.field2;
      }
      if (!(field3 == rhs.field3)) {
        return field3 < rhs.field3;
      }
      if (!(field4 == rhs.field4)) {
        return field4 < rhs.field4;
      }
      if (!(field5 == rhs.field5)) {
        return field5 < rhs.field5;
      }
      if (!(field6 == rhs.field6)) {
        return field6 < rhs.field6;
      }
      if (!(field7 == rhs.field7)) {
        return field7 < rhs.field7;
      }
      if (!(field8 == rhs.field8)) {
        return field8 < rhs.field8;
      }
      if (!(field9 == rhs.field9)) {
        return field9 < rhs.field9;
      }
      if (!(field10 == rhs.field10)) {
        return field10 < rhs.field10;
      }
      (void)rhs;
      return false;
    }
  
    int32_t get_field1() const {
      return field1;
    }
  
    int32_t& set_field1(int32_t field1_) {
      field1 = field1_;
      __isset.field1 = true;
      return field1;
    }
    const  ::example::thrift32::Struct1& get_field2() const&;
     ::example::thrift32::Struct1 get_field2() &&;
  
    template <typename T_Struct3_field2_struct_setter>
     ::example::thrift32::Struct1& set_field2(T_Struct3_field2_struct_setter&& field2_) {
      field2 = std::forward<T_Struct3_field2_struct_setter>(field2_);
      __isset.field2 = true;
      return field2;
    }
  
    int8_t get_field3() const {
      return field3;
    }
  
    int8_t& set_field3(int8_t field3_) {
      field3 = field3_;
      __isset.field3 = true;
      return field3;
    }
  
    int32_t get_field4() const {
      return field4;
    }
  
    int32_t& set_field4(int32_t field4_) {
      field4 = field4_;
      __isset.field4 = true;
      return field4;
    }
    const std::set< ::example::thrift32::Struct2>& get_field5() const&;
    std::set< ::example::thrift32::Struct2> get_field5() &&;
  
    template <typename T_Struct3_field5_struct_setter>
    std::set< ::example::thrift32::Struct2>& set_field5(T_Struct3_field5_struct_setter&& field5_) {
      field5 = std::forward<T_Struct3_field5_struct_setter>(field5_);
      __isset.field5 = true;
      return field5;
    }
  
    int8_t get_field6() const {
      return field6;
    }
  
    int8_t& set_field6(int8_t field6_) {
      field6 = field6_;
      __isset.field6 = true;
      return field6;
    }
  
    int8_t get_field7() const {
      return field7;
    }
  
    int8_t& set_field7(int8_t field7_) {
      field7 = field7_;
      __isset.field7 = true;
      return field7;
    }
    const  ::example::thrift32::Struct1& get_field8() const&;
     ::example::thrift32::Struct1 get_field8() &&;
  
    template <typename T_Struct3_field8_struct_setter>
     ::example::thrift32::Struct1& set_field8(T_Struct3_field8_struct_setter&& field8_) {
      field8 = std::forward<T_Struct3_field8_struct_setter>(field8_);
      __isset.field8 = true;
      return field8;
    }
    const  ::example::thrift32::Struct0& get_field9() const&;
     ::example::thrift32::Struct0 get_field9() &&;
  
    template <typename T_Struct3_field9_struct_setter>
     ::example::thrift32::Struct0& set_field9(T_Struct3_field9_struct_setter&& field9_) {
      field9 = std::forward<T_Struct3_field9_struct_setter>(field9_);
      __isset.field9 = true;
      return field9;
    }
    const std::vector<float>& get_field10() const&;
    std::vector<float> get_field10() &&;
  
    template <typename T_Struct3_field10_struct_setter>
    std::vector<float>& set_field10(T_Struct3_field10_struct_setter&& field10_) {
      field10 = std::forward<T_Struct3_field10_struct_setter>(field10_);
      __isset.field10 = true;
      return field10;
    }
  
    template <class Protocol_>
    uint32_t 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:
    static void translateFieldName(FOLLY_MAYBE_UNUSED folly::StringPiece _fname, FOLLY_MAYBE_UNUSED int16_t& fid, FOLLY_MAYBE_UNUSED apache::thrift::protocol::TType& _ftype);
  };
  
  void swap(Struct3& a, Struct3& b);
  extern template uint32_t Struct3::read<>(apache::thrift::BinaryProtocolReader*);
  extern template uint32_t Struct3::write<>(apache::thrift::BinaryProtocolWriter*) const;
  extern template uint32_t Struct3::serializedSize<>(apache::thrift::BinaryProtocolWriter const*) const;
  extern template uint32_t Struct3::serializedSizeZC<>(apache::thrift::BinaryProtocolWriter const*) const;
  extern template uint32_t Struct3::read<>(apache::thrift::CompactProtocolReader*);
  extern template uint32_t Struct3::write<>(apache::thrift::CompactProtocolWriter*) const;
  extern template uint32_t Struct3::serializedSize<>(apache::thrift::CompactProtocolWriter const*) const;
  extern template uint32_t Struct3::serializedSizeZC<>(apache::thrift::CompactProtocolWriter const*) const;
  
  }} // example::thrift32
  namespace apache { namespace thrift {
  
  template <> inline void Cpp2Ops< ::example::thrift32::Struct3>::clear( ::example::thrift32::Struct3* obj) {
    return obj->__clear();
  }
  
  template <> inline constexpr apache::thrift::protocol::TType Cpp2Ops< ::example::thrift32::Struct3>::thriftType() {
    return apache::thrift::protocol::T_STRUCT;
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct3>::write(Protocol* proto,  ::example::thrift32::Struct3 const* obj) {
    return obj->write(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct3>::read(Protocol* proto,  ::example::thrift32::Struct3* obj) {
    return obj->read(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct3>::serializedSize(Protocol const* proto,  ::example::thrift32::Struct3 const* obj) {
    return obj->serializedSize(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct3>::serializedSizeZC(Protocol const* proto,  ::example::thrift32::Struct3 const* obj) {
    return obj->serializedSizeZC(proto);
  }
  
  }} // apache::thrift
  namespace example { namespace thrift32 {
  
  class Struct4 : private apache::thrift::detail::st::ComparisonOperators<Struct4> {
   public:
  
    Struct4() :
        field2(0),
        field3(0),
        field4(0),
        field5(0) {}
    // FragileConstructor for use in initialization lists only
  
    Struct4(apache::thrift::FragileConstructor,  ::example::thrift32::Struct2 field1__arg, bool field2__arg, float field3__arg, float field4__arg, int32_t field5__arg) :
        field1(std::move(field1__arg)),
        field2(std::move(field2__arg)),
        field3(std::move(field3__arg)),
        field4(std::move(field4__arg)),
        field5(std::move(field5__arg)) {
      __isset.field1 = true;
      __isset.field2 = true;
      __isset.field3 = true;
      __isset.field4 = true;
      __isset.field5 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct4(::apache::thrift::detail::argument_wrapper<1, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct4(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field1 = arg.move();
      __isset.field1 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct4(::apache::thrift::detail::argument_wrapper<2, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct4(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field2 = arg.move();
      __isset.field2 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct4(::apache::thrift::detail::argument_wrapper<3, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct4(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field3 = arg.move();
      __isset.field3 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct4(::apache::thrift::detail::argument_wrapper<4, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct4(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field4 = arg.move();
      __isset.field4 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct4(::apache::thrift::detail::argument_wrapper<5, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct4(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field5 = arg.move();
      __isset.field5 = true;
    }
  
    Struct4(Struct4&&) = default;
  
    Struct4(const Struct4&) = default;
  
    Struct4& operator=(Struct4&&) = default;
  
    Struct4& operator=(const Struct4&) = default;
    void __clear();
  
    virtual ~Struct4() {}
  
     ::example::thrift32::Struct2 field1;
    bool field2;
    float field3;
    float field4;
    int32_t field5;
  
    struct __isset {
      void __clear() {
        field1 = false;
        field2 = false;
        field3 = false;
        field4 = false;
        field5 = false;
      }
  
      bool field1 = false;
      bool field2 = false;
      bool field3 = false;
      bool field4 = false;
      bool field5 = false;
    } __isset;
    bool operator==(const Struct4& rhs) const;
  
    bool operator < (const Struct4& rhs) const {
      if (!(field1 == rhs.field1)) {
        return field1 < rhs.field1;
      }
      if (!(field2 == rhs.field2)) {
        return field2 < rhs.field2;
      }
      if (!(field3 == rhs.field3)) {
        return field3 < rhs.field3;
      }
      if (!(field4 == rhs.field4)) {
        return field4 < rhs.field4;
      }
      if (!(field5 == rhs.field5)) {
        return field5 < rhs.field5;
      }
      (void)rhs;
      return false;
    }
    const  ::example::thrift32::Struct2& get_field1() const&;
     ::example::thrift32::Struct2 get_field1() &&;
  
    template <typename T_Struct4_field1_struct_setter>
     ::example::thrift32::Struct2& set_field1(T_Struct4_field1_struct_setter&& field1_) {
      field1 = std::forward<T_Struct4_field1_struct_setter>(field1_);
      __isset.field1 = true;
      return field1;
    }
  
    bool get_field2() const {
      return field2;
    }
  
    bool& set_field2(bool field2_) {
      field2 = field2_;
      __isset.field2 = true;
      return field2;
    }
  
    float get_field3() const {
      return field3;
    }
  
    float& set_field3(float field3_) {
      field3 = field3_;
      __isset.field3 = true;
      return field3;
    }
  
    float get_field4() const {
      return field4;
    }
  
    float& set_field4(float field4_) {
      field4 = field4_;
      __isset.field4 = true;
      return field4;
    }
  
    int32_t get_field5() const {
      return field5;
    }
  
    int32_t& set_field5(int32_t field5_) {
      field5 = field5_;
      __isset.field5 = true;
      return field5;
    }
  
    template <class Protocol_>
    uint32_t 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:
    static void translateFieldName(FOLLY_MAYBE_UNUSED folly::StringPiece _fname, FOLLY_MAYBE_UNUSED int16_t& fid, FOLLY_MAYBE_UNUSED apache::thrift::protocol::TType& _ftype);
  };
  
  void swap(Struct4& a, Struct4& b);
  extern template uint32_t Struct4::read<>(apache::thrift::BinaryProtocolReader*);
  extern template uint32_t Struct4::write<>(apache::thrift::BinaryProtocolWriter*) const;
  extern template uint32_t Struct4::serializedSize<>(apache::thrift::BinaryProtocolWriter const*) const;
  extern template uint32_t Struct4::serializedSizeZC<>(apache::thrift::BinaryProtocolWriter const*) const;
  extern template uint32_t Struct4::read<>(apache::thrift::CompactProtocolReader*);
  extern template uint32_t Struct4::write<>(apache::thrift::CompactProtocolWriter*) const;
  extern template uint32_t Struct4::serializedSize<>(apache::thrift::CompactProtocolWriter const*) const;
  extern template uint32_t Struct4::serializedSizeZC<>(apache::thrift::CompactProtocolWriter const*) const;
  
  }} // example::thrift32
  namespace apache { namespace thrift {
  
  template <> inline void Cpp2Ops< ::example::thrift32::Struct4>::clear( ::example::thrift32::Struct4* obj) {
    return obj->__clear();
  }
  
  template <> inline constexpr apache::thrift::protocol::TType Cpp2Ops< ::example::thrift32::Struct4>::thriftType() {
    return apache::thrift::protocol::T_STRUCT;
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct4>::write(Protocol* proto,  ::example::thrift32::Struct4 const* obj) {
    return obj->write(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct4>::read(Protocol* proto,  ::example::thrift32::Struct4* obj) {
    return obj->read(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct4>::serializedSize(Protocol const* proto,  ::example::thrift32::Struct4 const* obj) {
    return obj->serializedSize(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct4>::serializedSizeZC(Protocol const* proto,  ::example::thrift32::Struct4 const* obj) {
    return obj->serializedSizeZC(proto);
  }
  
  }} // apache::thrift
  namespace example { namespace thrift32 {
  
  class Struct5 : private apache::thrift::detail::st::ComparisonOperators<Struct5> {
   public:
  
    Struct5() :
        field5(0),
        field9(0),
        field10(0),
        field12(0) {}
    // FragileConstructor for use in initialization lists only
  
    Struct5(apache::thrift::FragileConstructor, std::vector<float> field1__arg, std::set<int64_t> field2__arg, std::set<float> field3__arg, std::vector<bool> field4__arg, int32_t field5__arg, std::map<int16_t, float> field6__arg, std::string field7__arg, std::string field8__arg, int8_t field9__arg, double field10__arg, std::map<std::string, int64_t> field11__arg, float field12__arg) :
        field1(std::move(field1__arg)),
        field2(std::move(field2__arg)),
        field3(std::move(field3__arg)),
        field4(std::move(field4__arg)),
        field5(std::move(field5__arg)),
        field6(std::move(field6__arg)),
        field7(std::move(field7__arg)),
        field8(std::move(field8__arg)),
        field9(std::move(field9__arg)),
        field10(std::move(field10__arg)),
        field11(std::move(field11__arg)),
        field12(std::move(field12__arg)) {
      __isset.field1 = true;
      __isset.field2 = true;
      __isset.field3 = true;
      __isset.field4 = true;
      __isset.field5 = true;
      __isset.field6 = true;
      __isset.field7 = true;
      __isset.field8 = true;
      __isset.field9 = true;
      __isset.field10 = true;
      __isset.field11 = true;
      __isset.field12 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct5(::apache::thrift::detail::argument_wrapper<1, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct5(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field1 = arg.move();
      __isset.field1 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct5(::apache::thrift::detail::argument_wrapper<2, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct5(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field2 = arg.move();
      __isset.field2 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct5(::apache::thrift::detail::argument_wrapper<3, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct5(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field3 = arg.move();
      __isset.field3 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct5(::apache::thrift::detail::argument_wrapper<4, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct5(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field4 = arg.move();
      __isset.field4 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct5(::apache::thrift::detail::argument_wrapper<5, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct5(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field5 = arg.move();
      __isset.field5 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct5(::apache::thrift::detail::argument_wrapper<6, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct5(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field6 = arg.move();
      __isset.field6 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct5(::apache::thrift::detail::argument_wrapper<7, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct5(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field7 = arg.move();
      __isset.field7 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct5(::apache::thrift::detail::argument_wrapper<8, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct5(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field8 = arg.move();
      __isset.field8 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct5(::apache::thrift::detail::argument_wrapper<9, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct5(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field9 = arg.move();
      __isset.field9 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct5(::apache::thrift::detail::argument_wrapper<10, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct5(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field10 = arg.move();
      __isset.field10 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct5(::apache::thrift::detail::argument_wrapper<11, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct5(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field11 = arg.move();
      __isset.field11 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct5(::apache::thrift::detail::argument_wrapper<12, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct5(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field12 = arg.move();
      __isset.field12 = true;
    }
  
    Struct5(Struct5&&) = default;
  
    Struct5(const Struct5&) = default;
  
    Struct5& operator=(Struct5&&) = default;
  
    Struct5& operator=(const Struct5&) = default;
    void __clear();
  
    virtual ~Struct5() {}
  
    std::vector<float> field1;
    std::set<int64_t> field2;
    std::set<float> field3;
    std::vector<bool> field4;
    int32_t field5;
    std::map<int16_t, float> field6;
    std::string field7;
    std::string field8;
    int8_t field9;
    double field10;
    std::map<std::string, int64_t> field11;
    float field12;
  
    struct __isset {
      void __clear() {
        field1 = false;
        field2 = false;
        field3 = false;
        field4 = false;
        field5 = false;
        field6 = false;
        field7 = false;
        field8 = false;
        field9 = false;
        field10 = false;
        field11 = false;
        field12 = false;
      }
  
      bool field1 = false;
      bool field2 = false;
      bool field3 = false;
      bool field4 = false;
      bool field5 = false;
      bool field6 = false;
      bool field7 = false;
      bool field8 = false;
      bool field9 = false;
      bool field10 = false;
      bool field11 = false;
      bool field12 = false;
    } __isset;
    bool operator==(const Struct5& rhs) const;
  
    bool operator < (const Struct5& rhs) const {
      if (!(field1 == rhs.field1)) {
        return field1 < rhs.field1;
      }
      if (!(field2 == rhs.field2)) {
        return field2 < rhs.field2;
      }
      if (!(field3 == rhs.field3)) {
        return field3 < rhs.field3;
      }
      if (!(field4 == rhs.field4)) {
        return field4 < rhs.field4;
      }
      if (!(field5 == rhs.field5)) {
        return field5 < rhs.field5;
      }
      if (!(field6 == rhs.field6)) {
        return field6 < rhs.field6;
      }
      if (!(field7 == rhs.field7)) {
        return field7 < rhs.field7;
      }
      if (!(field8 == rhs.field8)) {
        return field8 < rhs.field8;
      }
      if (!(field9 == rhs.field9)) {
        return field9 < rhs.field9;
      }
      if (!(field10 == rhs.field10)) {
        return field10 < rhs.field10;
      }
      if (!(field11 == rhs.field11)) {
        return field11 < rhs.field11;
      }
      if (!(field12 == rhs.field12)) {
        return field12 < rhs.field12;
      }
      (void)rhs;
      return false;
    }
    const std::vector<float>& get_field1() const&;
    std::vector<float> get_field1() &&;
  
    template <typename T_Struct5_field1_struct_setter>
    std::vector<float>& set_field1(T_Struct5_field1_struct_setter&& field1_) {
      field1 = std::forward<T_Struct5_field1_struct_setter>(field1_);
      __isset.field1 = true;
      return field1;
    }
    const std::set<int64_t>& get_field2() const&;
    std::set<int64_t> get_field2() &&;
  
    template <typename T_Struct5_field2_struct_setter>
    std::set<int64_t>& set_field2(T_Struct5_field2_struct_setter&& field2_) {
      field2 = std::forward<T_Struct5_field2_struct_setter>(field2_);
      __isset.field2 = true;
      return field2;
    }
    const std::set<float>& get_field3() const&;
    std::set<float> get_field3() &&;
  
    template <typename T_Struct5_field3_struct_setter>
    std::set<float>& set_field3(T_Struct5_field3_struct_setter&& field3_) {
      field3 = std::forward<T_Struct5_field3_struct_setter>(field3_);
      __isset.field3 = true;
      return field3;
    }
    const std::vector<bool>& get_field4() const&;
    std::vector<bool> get_field4() &&;
  
    template <typename T_Struct5_field4_struct_setter>
    std::vector<bool>& set_field4(T_Struct5_field4_struct_setter&& field4_) {
      field4 = std::forward<T_Struct5_field4_struct_setter>(field4_);
      __isset.field4 = true;
      return field4;
    }
  
    int32_t get_field5() const {
      return field5;
    }
  
    int32_t& set_field5(int32_t field5_) {
      field5 = field5_;
      __isset.field5 = true;
      return field5;
    }
    const std::map<int16_t, float>& get_field6() const&;
    std::map<int16_t, float> get_field6() &&;
  
    template <typename T_Struct5_field6_struct_setter>
    std::map<int16_t, float>& set_field6(T_Struct5_field6_struct_setter&& field6_) {
      field6 = std::forward<T_Struct5_field6_struct_setter>(field6_);
      __isset.field6 = true;
      return field6;
    }
  
    const std::string& get_field7() const& {
      return field7;
    }
  
    std::string get_field7() && {
      return std::move(field7);
    }
  
    template <typename T_Struct5_field7_struct_setter>
    std::string& set_field7(T_Struct5_field7_struct_setter&& field7_) {
      field7 = std::forward<T_Struct5_field7_struct_setter>(field7_);
      __isset.field7 = true;
      return field7;
    }
  
    const std::string& get_field8() const& {
      return field8;
    }
  
    std::string get_field8() && {
      return std::move(field8);
    }
  
    template <typename T_Struct5_field8_struct_setter>
    std::string& set_field8(T_Struct5_field8_struct_setter&& field8_) {
      field8 = std::forward<T_Struct5_field8_struct_setter>(field8_);
      __isset.field8 = true;
      return field8;
    }
  
    int8_t get_field9() const {
      return field9;
    }
  
    int8_t& set_field9(int8_t field9_) {
      field9 = field9_;
      __isset.field9 = true;
      return field9;
    }
  
    double get_field10() const {
      return field10;
    }
  
    double& set_field10(double field10_) {
      field10 = field10_;
      __isset.field10 = true;
      return field10;
    }
    const std::map<std::string, int64_t>& get_field11() const&;
    std::map<std::string, int64_t> get_field11() &&;
  
    template <typename T_Struct5_field11_struct_setter>
    std::map<std::string, int64_t>& set_field11(T_Struct5_field11_struct_setter&& field11_) {
      field11 = std::forward<T_Struct5_field11_struct_setter>(field11_);
      __isset.field11 = true;
      return field11;
    }
  
    float get_field12() const {
      return field12;
    }
  
    float& set_field12(float field12_) {
      field12 = field12_;
      __isset.field12 = true;
      return field12;
    }
  
    template <class Protocol_>
    uint32_t 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:
    static void translateFieldName(FOLLY_MAYBE_UNUSED folly::StringPiece _fname, FOLLY_MAYBE_UNUSED int16_t& fid, FOLLY_MAYBE_UNUSED apache::thrift::protocol::TType& _ftype);
  };
  
  void swap(Struct5& a, Struct5& b);
  extern template uint32_t Struct5::read<>(apache::thrift::BinaryProtocolReader*);
  extern template uint32_t Struct5::write<>(apache::thrift::BinaryProtocolWriter*) const;
  extern template uint32_t Struct5::serializedSize<>(apache::thrift::BinaryProtocolWriter const*) const;
  extern template uint32_t Struct5::serializedSizeZC<>(apache::thrift::BinaryProtocolWriter const*) const;
  extern template uint32_t Struct5::read<>(apache::thrift::CompactProtocolReader*);
  extern template uint32_t Struct5::write<>(apache::thrift::CompactProtocolWriter*) const;
  extern template uint32_t Struct5::serializedSize<>(apache::thrift::CompactProtocolWriter const*) const;
  extern template uint32_t Struct5::serializedSizeZC<>(apache::thrift::CompactProtocolWriter const*) const;
  
  }} // example::thrift32
  namespace apache { namespace thrift {
  
  template <> inline void Cpp2Ops< ::example::thrift32::Struct5>::clear( ::example::thrift32::Struct5* obj) {
    return obj->__clear();
  }
  
  template <> inline constexpr apache::thrift::protocol::TType Cpp2Ops< ::example::thrift32::Struct5>::thriftType() {
    return apache::thrift::protocol::T_STRUCT;
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct5>::write(Protocol* proto,  ::example::thrift32::Struct5 const* obj) {
    return obj->write(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct5>::read(Protocol* proto,  ::example::thrift32::Struct5* obj) {
    return obj->read(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct5>::serializedSize(Protocol const* proto,  ::example::thrift32::Struct5 const* obj) {
    return obj->serializedSize(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct5>::serializedSizeZC(Protocol const* proto,  ::example::thrift32::Struct5 const* obj) {
    return obj->serializedSizeZC(proto);
  }
  
  }} // apache::thrift
  namespace example { namespace thrift32 {
  
  class Struct6 : private apache::thrift::detail::st::ComparisonOperators<Struct6> {
   public:
  
    Struct6() :
        field2(0),
        field3(0),
        field4(0),
        field5(0),
        field6(0) {}
    // FragileConstructor for use in initialization lists only
  
    Struct6(apache::thrift::FragileConstructor, std::vector<float> field1__arg, bool field2__arg, double field3__arg, int8_t field4__arg, int16_t field5__arg, int16_t field6__arg, std::vector<double> field7__arg, std::vector<std::string> field8__arg, std::vector<bool> field9__arg) :
        field1(std::move(field1__arg)),
        field2(std::move(field2__arg)),
        field3(std::move(field3__arg)),
        field4(std::move(field4__arg)),
        field5(std::move(field5__arg)),
        field6(std::move(field6__arg)),
        field7(std::move(field7__arg)),
        field8(std::move(field8__arg)),
        field9(std::move(field9__arg)) {
      __isset.field1 = true;
      __isset.field2 = true;
      __isset.field3 = true;
      __isset.field4 = true;
      __isset.field5 = true;
      __isset.field6 = true;
      __isset.field7 = true;
      __isset.field8 = true;
      __isset.field9 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct6(::apache::thrift::detail::argument_wrapper<1, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct6(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field1 = arg.move();
      __isset.field1 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct6(::apache::thrift::detail::argument_wrapper<2, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct6(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field2 = arg.move();
      __isset.field2 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct6(::apache::thrift::detail::argument_wrapper<3, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct6(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field3 = arg.move();
      __isset.field3 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct6(::apache::thrift::detail::argument_wrapper<4, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct6(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field4 = arg.move();
      __isset.field4 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct6(::apache::thrift::detail::argument_wrapper<5, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct6(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field5 = arg.move();
      __isset.field5 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct6(::apache::thrift::detail::argument_wrapper<6, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct6(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field6 = arg.move();
      __isset.field6 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct6(::apache::thrift::detail::argument_wrapper<7, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct6(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field7 = arg.move();
      __isset.field7 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct6(::apache::thrift::detail::argument_wrapper<8, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct6(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field8 = arg.move();
      __isset.field8 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct6(::apache::thrift::detail::argument_wrapper<9, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct6(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field9 = arg.move();
      __isset.field9 = true;
    }
  
    Struct6(Struct6&&) = default;
  
    Struct6(const Struct6&) = default;
  
    Struct6& operator=(Struct6&&) = default;
  
    Struct6& operator=(const Struct6&) = default;
    void __clear();
  
    virtual ~Struct6() {}
  
    std::vector<float> field1;
    bool field2;
    double field3;
    int8_t field4;
    int16_t field5;
    int16_t field6;
    std::vector<double> field7;
    std::vector<std::string> field8;
    std::vector<bool> field9;
  
    struct __isset {
      void __clear() {
        field1 = false;
        field2 = false;
        field3 = false;
        field4 = false;
        field5 = false;
        field6 = false;
        field7 = false;
        field8 = false;
        field9 = false;
      }
  
      bool field1 = false;
      bool field2 = false;
      bool field3 = false;
      bool field4 = false;
      bool field5 = false;
      bool field6 = false;
      bool field7 = false;
      bool field8 = false;
      bool field9 = false;
    } __isset;
    bool operator==(const Struct6& rhs) const;
  
    bool operator < (const Struct6& rhs) const {
      if (!(field1 == rhs.field1)) {
        return field1 < rhs.field1;
      }
      if (!(field2 == rhs.field2)) {
        return field2 < rhs.field2;
      }
      if (!(field3 == rhs.field3)) {
        return field3 < rhs.field3;
      }
      if (!(field4 == rhs.field4)) {
        return field4 < rhs.field4;
      }
      if (!(field5 == rhs.field5)) {
        return field5 < rhs.field5;
      }
      if (!(field6 == rhs.field6)) {
        return field6 < rhs.field6;
      }
      if (!(field7 == rhs.field7)) {
        return field7 < rhs.field7;
      }
      if (!(field8 == rhs.field8)) {
        return field8 < rhs.field8;
      }
      if (!(field9 == rhs.field9)) {
        return field9 < rhs.field9;
      }
      (void)rhs;
      return false;
    }
    const std::vector<float>& get_field1() const&;
    std::vector<float> get_field1() &&;
  
    template <typename T_Struct6_field1_struct_setter>
    std::vector<float>& set_field1(T_Struct6_field1_struct_setter&& field1_) {
      field1 = std::forward<T_Struct6_field1_struct_setter>(field1_);
      __isset.field1 = true;
      return field1;
    }
  
    bool get_field2() const {
      return field2;
    }
  
    bool& set_field2(bool field2_) {
      field2 = field2_;
      __isset.field2 = true;
      return field2;
    }
  
    double get_field3() const {
      return field3;
    }
  
    double& set_field3(double field3_) {
      field3 = field3_;
      __isset.field3 = true;
      return field3;
    }
  
    int8_t get_field4() const {
      return field4;
    }
  
    int8_t& set_field4(int8_t field4_) {
      field4 = field4_;
      __isset.field4 = true;
      return field4;
    }
  
    int16_t get_field5() const {
      return field5;
    }
  
    int16_t& set_field5(int16_t field5_) {
      field5 = field5_;
      __isset.field5 = true;
      return field5;
    }
  
    int16_t get_field6() const {
      return field6;
    }
  
    int16_t& set_field6(int16_t field6_) {
      field6 = field6_;
      __isset.field6 = true;
      return field6;
    }
    const std::vector<double>& get_field7() const&;
    std::vector<double> get_field7() &&;
  
    template <typename T_Struct6_field7_struct_setter>
    std::vector<double>& set_field7(T_Struct6_field7_struct_setter&& field7_) {
      field7 = std::forward<T_Struct6_field7_struct_setter>(field7_);
      __isset.field7 = true;
      return field7;
    }
    const std::vector<std::string>& get_field8() const&;
    std::vector<std::string> get_field8() &&;
  
    template <typename T_Struct6_field8_struct_setter>
    std::vector<std::string>& set_field8(T_Struct6_field8_struct_setter&& field8_) {
      field8 = std::forward<T_Struct6_field8_struct_setter>(field8_);
      __isset.field8 = true;
      return field8;
    }
    const std::vector<bool>& get_field9() const&;
    std::vector<bool> get_field9() &&;
  
    template <typename T_Struct6_field9_struct_setter>
    std::vector<bool>& set_field9(T_Struct6_field9_struct_setter&& field9_) {
      field9 = std::forward<T_Struct6_field9_struct_setter>(field9_);
      __isset.field9 = true;
      return field9;
    }
  
    template <class Protocol_>
    uint32_t 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:
    static void translateFieldName(FOLLY_MAYBE_UNUSED folly::StringPiece _fname, FOLLY_MAYBE_UNUSED int16_t& fid, FOLLY_MAYBE_UNUSED apache::thrift::protocol::TType& _ftype);
  };
  
  void swap(Struct6& a, Struct6& b);
  extern template uint32_t Struct6::read<>(apache::thrift::BinaryProtocolReader*);
  extern template uint32_t Struct6::write<>(apache::thrift::BinaryProtocolWriter*) const;
  extern template uint32_t Struct6::serializedSize<>(apache::thrift::BinaryProtocolWriter const*) const;
  extern template uint32_t Struct6::serializedSizeZC<>(apache::thrift::BinaryProtocolWriter const*) const;
  extern template uint32_t Struct6::read<>(apache::thrift::CompactProtocolReader*);
  extern template uint32_t Struct6::write<>(apache::thrift::CompactProtocolWriter*) const;
  extern template uint32_t Struct6::serializedSize<>(apache::thrift::CompactProtocolWriter const*) const;
  extern template uint32_t Struct6::serializedSizeZC<>(apache::thrift::CompactProtocolWriter const*) const;
  
  }} // example::thrift32
  namespace apache { namespace thrift {
  
  template <> inline void Cpp2Ops< ::example::thrift32::Struct6>::clear( ::example::thrift32::Struct6* obj) {
    return obj->__clear();
  }
  
  template <> inline constexpr apache::thrift::protocol::TType Cpp2Ops< ::example::thrift32::Struct6>::thriftType() {
    return apache::thrift::protocol::T_STRUCT;
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct6>::write(Protocol* proto,  ::example::thrift32::Struct6 const* obj) {
    return obj->write(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct6>::read(Protocol* proto,  ::example::thrift32::Struct6* obj) {
    return obj->read(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct6>::serializedSize(Protocol const* proto,  ::example::thrift32::Struct6 const* obj) {
    return obj->serializedSize(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct6>::serializedSizeZC(Protocol const* proto,  ::example::thrift32::Struct6 const* obj) {
    return obj->serializedSizeZC(proto);
  }
  
  }} // apache::thrift
  namespace example { namespace thrift32 {
  
  class Struct7 : private apache::thrift::detail::st::ComparisonOperators<Struct7> {
   public:
  
    Struct7() :
        field4(0),
        field9(0),
        field10(0),
        field11(0),
        field13(0),
        field21(0) {}
    // FragileConstructor for use in initialization lists only
  
    Struct7(apache::thrift::FragileConstructor, std::map<int32_t, std::set<double>> field1__arg, std::set<float> field2__arg, std::string field3__arg, int32_t field4__arg, std::vector<int32_t> field5__arg, std::set< ::example::thrift32::Struct1> field6__arg, std::map<int64_t, std::set<int64_t>> field7__arg,  ::example::thrift32::Struct2 field8__arg, double field9__arg, double field10__arg, int32_t field11__arg, std::string field12__arg, int8_t field13__arg, std::map<int64_t, int32_t> field14__arg, std::map<std::map<double, bool>, std::string> field15__arg, std::string field16__arg, std::map<std::map<int64_t, std::string>, bool> field17__arg, std::set<std::string> field18__arg, std::map<int32_t,  ::example::thrift32::Struct0> field19__arg, std::vector<int64_t> field20__arg, int32_t field21__arg) :
        field1(std::move(field1__arg)),
        field2(std::move(field2__arg)),
        field3(std::move(field3__arg)),
        field4(std::move(field4__arg)),
        field5(std::move(field5__arg)),
        field6(std::move(field6__arg)),
        field7(std::move(field7__arg)),
        field8(std::move(field8__arg)),
        field9(std::move(field9__arg)),
        field10(std::move(field10__arg)),
        field11(std::move(field11__arg)),
        field12(std::move(field12__arg)),
        field13(std::move(field13__arg)),
        field14(std::move(field14__arg)),
        field15(std::move(field15__arg)),
        field16(std::move(field16__arg)),
        field17(std::move(field17__arg)),
        field18(std::move(field18__arg)),
        field19(std::move(field19__arg)),
        field20(std::move(field20__arg)),
        field21(std::move(field21__arg)) {
      __isset.field1 = true;
      __isset.field2 = true;
      __isset.field3 = true;
      __isset.field4 = true;
      __isset.field5 = true;
      __isset.field6 = true;
      __isset.field7 = true;
      __isset.field8 = true;
      __isset.field9 = true;
      __isset.field10 = true;
      __isset.field11 = true;
      __isset.field12 = true;
      __isset.field13 = true;
      __isset.field14 = true;
      __isset.field15 = true;
      __isset.field16 = true;
      __isset.field17 = true;
      __isset.field18 = true;
      __isset.field19 = true;
      __isset.field20 = true;
      __isset.field21 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct7(::apache::thrift::detail::argument_wrapper<1, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct7(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field1 = arg.move();
      __isset.field1 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct7(::apache::thrift::detail::argument_wrapper<2, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct7(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field2 = arg.move();
      __isset.field2 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct7(::apache::thrift::detail::argument_wrapper<3, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct7(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field3 = arg.move();
      __isset.field3 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct7(::apache::thrift::detail::argument_wrapper<4, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct7(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field4 = arg.move();
      __isset.field4 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct7(::apache::thrift::detail::argument_wrapper<5, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct7(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field5 = arg.move();
      __isset.field5 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct7(::apache::thrift::detail::argument_wrapper<6, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct7(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field6 = arg.move();
      __isset.field6 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct7(::apache::thrift::detail::argument_wrapper<7, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct7(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field7 = arg.move();
      __isset.field7 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct7(::apache::thrift::detail::argument_wrapper<8, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct7(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field8 = arg.move();
      __isset.field8 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct7(::apache::thrift::detail::argument_wrapper<9, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct7(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field9 = arg.move();
      __isset.field9 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct7(::apache::thrift::detail::argument_wrapper<10, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct7(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field10 = arg.move();
      __isset.field10 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct7(::apache::thrift::detail::argument_wrapper<11, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct7(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field11 = arg.move();
      __isset.field11 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct7(::apache::thrift::detail::argument_wrapper<12, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct7(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field12 = arg.move();
      __isset.field12 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct7(::apache::thrift::detail::argument_wrapper<13, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct7(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field13 = arg.move();
      __isset.field13 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct7(::apache::thrift::detail::argument_wrapper<14, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct7(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field14 = arg.move();
      __isset.field14 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct7(::apache::thrift::detail::argument_wrapper<15, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct7(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field15 = arg.move();
      __isset.field15 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct7(::apache::thrift::detail::argument_wrapper<16, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct7(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field16 = arg.move();
      __isset.field16 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct7(::apache::thrift::detail::argument_wrapper<17, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct7(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field17 = arg.move();
      __isset.field17 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct7(::apache::thrift::detail::argument_wrapper<18, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct7(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field18 = arg.move();
      __isset.field18 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct7(::apache::thrift::detail::argument_wrapper<19, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct7(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field19 = arg.move();
      __isset.field19 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct7(::apache::thrift::detail::argument_wrapper<20, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct7(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field20 = arg.move();
      __isset.field20 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct7(::apache::thrift::detail::argument_wrapper<21, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct7(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field21 = arg.move();
      __isset.field21 = true;
    }
  
    Struct7(Struct7&&) = default;
  
    Struct7(const Struct7&) = default;
  
    Struct7& operator=(Struct7&&) = default;
  
    Struct7& operator=(const Struct7&) = default;
    void __clear();
  
    virtual ~Struct7() {}
  
    std::map<int32_t, std::set<double>> field1;
    std::set<float> field2;
    std::string field3;
    int32_t field4;
    std::vector<int32_t> field5;
    std::set< ::example::thrift32::Struct1> field6;
    std::map<int64_t, std::set<int64_t>> field7;
     ::example::thrift32::Struct2 field8;
    double field9;
    double field10;
    int32_t field11;
    std::string field12;
    int8_t field13;
    std::map<int64_t, int32_t> field14;
    std::map<std::map<double, bool>, std::string> field15;
    std::string field16;
    std::map<std::map<int64_t, std::string>, bool> field17;
    std::set<std::string> field18;
    std::map<int32_t,  ::example::thrift32::Struct0> field19;
    std::vector<int64_t> field20;
    int32_t field21;
  
    struct __isset {
      void __clear() {
        field1 = false;
        field2 = false;
        field3 = false;
        field4 = false;
        field5 = false;
        field6 = false;
        field7 = false;
        field8 = false;
        field9 = false;
        field10 = false;
        field11 = false;
        field12 = false;
        field13 = false;
        field14 = false;
        field15 = false;
        field16 = false;
        field17 = false;
        field18 = false;
        field19 = false;
        field20 = false;
        field21 = false;
      }
  
      bool field1 = false;
      bool field2 = false;
      bool field3 = false;
      bool field4 = false;
      bool field5 = false;
      bool field6 = false;
      bool field7 = false;
      bool field8 = false;
      bool field9 = false;
      bool field10 = false;
      bool field11 = false;
      bool field12 = false;
      bool field13 = false;
      bool field14 = false;
      bool field15 = false;
      bool field16 = false;
      bool field17 = false;
      bool field18 = false;
      bool field19 = false;
      bool field20 = false;
      bool field21 = false;
    } __isset;
    bool operator==(const Struct7& rhs) const;
  
    bool operator < (const Struct7& rhs) const {
      if (!(field1 == rhs.field1)) {
        return field1 < rhs.field1;
      }
      if (!(field2 == rhs.field2)) {
        return field2 < rhs.field2;
      }
      if (!(field3 == rhs.field3)) {
        return field3 < rhs.field3;
      }
      if (!(field4 == rhs.field4)) {
        return field4 < rhs.field4;
      }
      if (!(field5 == rhs.field5)) {
        return field5 < rhs.field5;
      }
      if (!(field6 == rhs.field6)) {
        return field6 < rhs.field6;
      }
      if (!(field7 == rhs.field7)) {
        return field7 < rhs.field7;
      }
      if (!(field8 == rhs.field8)) {
        return field8 < rhs.field8;
      }
      if (!(field9 == rhs.field9)) {
        return field9 < rhs.field9;
      }
      if (!(field10 == rhs.field10)) {
        return field10 < rhs.field10;
      }
      if (!(field11 == rhs.field11)) {
        return field11 < rhs.field11;
      }
      if (!(field12 == rhs.field12)) {
        return field12 < rhs.field12;
      }
      if (!(field13 == rhs.field13)) {
        return field13 < rhs.field13;
      }
      if (!(field14 == rhs.field14)) {
        return field14 < rhs.field14;
      }
      if (!(field15 == rhs.field15)) {
        return field15 < rhs.field15;
      }
      if (!(field16 == rhs.field16)) {
        return field16 < rhs.field16;
      }
      if (!(field17 == rhs.field17)) {
        return field17 < rhs.field17;
      }
      if (!(field18 == rhs.field18)) {
        return field18 < rhs.field18;
      }
      if (!(field19 == rhs.field19)) {
        return field19 < rhs.field19;
      }
      if (!(field20 == rhs.field20)) {
        return field20 < rhs.field20;
      }
      if (!(field21 == rhs.field21)) {
        return field21 < rhs.field21;
      }
      (void)rhs;
      return false;
    }
    const std::map<int32_t, std::set<double>>& get_field1() const&;
    std::map<int32_t, std::set<double>> get_field1() &&;
  
    template <typename T_Struct7_field1_struct_setter>
    std::map<int32_t, std::set<double>>& set_field1(T_Struct7_field1_struct_setter&& field1_) {
      field1 = std::forward<T_Struct7_field1_struct_setter>(field1_);
      __isset.field1 = true;
      return field1;
    }
    const std::set<float>& get_field2() const&;
    std::set<float> get_field2() &&;
  
    template <typename T_Struct7_field2_struct_setter>
    std::set<float>& set_field2(T_Struct7_field2_struct_setter&& field2_) {
      field2 = std::forward<T_Struct7_field2_struct_setter>(field2_);
      __isset.field2 = true;
      return field2;
    }
  
    const std::string& get_field3() const& {
      return field3;
    }
  
    std::string get_field3() && {
      return std::move(field3);
    }
  
    template <typename T_Struct7_field3_struct_setter>
    std::string& set_field3(T_Struct7_field3_struct_setter&& field3_) {
      field3 = std::forward<T_Struct7_field3_struct_setter>(field3_);
      __isset.field3 = true;
      return field3;
    }
  
    int32_t get_field4() const {
      return field4;
    }
  
    int32_t& set_field4(int32_t field4_) {
      field4 = field4_;
      __isset.field4 = true;
      return field4;
    }
    const std::vector<int32_t>& get_field5() const&;
    std::vector<int32_t> get_field5() &&;
  
    template <typename T_Struct7_field5_struct_setter>
    std::vector<int32_t>& set_field5(T_Struct7_field5_struct_setter&& field5_) {
      field5 = std::forward<T_Struct7_field5_struct_setter>(field5_);
      __isset.field5 = true;
      return field5;
    }
    const std::set< ::example::thrift32::Struct1>& get_field6() const&;
    std::set< ::example::thrift32::Struct1> get_field6() &&;
  
    template <typename T_Struct7_field6_struct_setter>
    std::set< ::example::thrift32::Struct1>& set_field6(T_Struct7_field6_struct_setter&& field6_) {
      field6 = std::forward<T_Struct7_field6_struct_setter>(field6_);
      __isset.field6 = true;
      return field6;
    }
    const std::map<int64_t, std::set<int64_t>>& get_field7() const&;
    std::map<int64_t, std::set<int64_t>> get_field7() &&;
  
    template <typename T_Struct7_field7_struct_setter>
    std::map<int64_t, std::set<int64_t>>& set_field7(T_Struct7_field7_struct_setter&& field7_) {
      field7 = std::forward<T_Struct7_field7_struct_setter>(field7_);
      __isset.field7 = true;
      return field7;
    }
    const  ::example::thrift32::Struct2& get_field8() const&;
     ::example::thrift32::Struct2 get_field8() &&;
  
    template <typename T_Struct7_field8_struct_setter>
     ::example::thrift32::Struct2& set_field8(T_Struct7_field8_struct_setter&& field8_) {
      field8 = std::forward<T_Struct7_field8_struct_setter>(field8_);
      __isset.field8 = true;
      return field8;
    }
  
    double get_field9() const {
      return field9;
    }
  
    double& set_field9(double field9_) {
      field9 = field9_;
      __isset.field9 = true;
      return field9;
    }
  
    double get_field10() const {
      return field10;
    }
  
    double& set_field10(double field10_) {
      field10 = field10_;
      __isset.field10 = true;
      return field10;
    }
  
    int32_t get_field11() const {
      return field11;
    }
  
    int32_t& set_field11(int32_t field11_) {
      field11 = field11_;
      __isset.field11 = true;
      return field11;
    }
  
    const std::string& get_field12() const& {
      return field12;
    }
  
    std::string get_field12() && {
      return std::move(field12);
    }
  
    template <typename T_Struct7_field12_struct_setter>
    std::string& set_field12(T_Struct7_field12_struct_setter&& field12_) {
      field12 = std::forward<T_Struct7_field12_struct_setter>(field12_);
      __isset.field12 = true;
      return field12;
    }
  
    int8_t get_field13() const {
      return field13;
    }
  
    int8_t& set_field13(int8_t field13_) {
      field13 = field13_;
      __isset.field13 = true;
      return field13;
    }
    const std::map<int64_t, int32_t>& get_field14() const&;
    std::map<int64_t, int32_t> get_field14() &&;
  
    template <typename T_Struct7_field14_struct_setter>
    std::map<int64_t, int32_t>& set_field14(T_Struct7_field14_struct_setter&& field14_) {
      field14 = std::forward<T_Struct7_field14_struct_setter>(field14_);
      __isset.field14 = true;
      return field14;
    }
    const std::map<std::map<double, bool>, std::string>& get_field15() const&;
    std::map<std::map<double, bool>, std::string> get_field15() &&;
  
    template <typename T_Struct7_field15_struct_setter>
    std::map<std::map<double, bool>, std::string>& set_field15(T_Struct7_field15_struct_setter&& field15_) {
      field15 = std::forward<T_Struct7_field15_struct_setter>(field15_);
      __isset.field15 = true;
      return field15;
    }
  
    const std::string& get_field16() const& {
      return field16;
    }
  
    std::string get_field16() && {
      return std::move(field16);
    }
  
    template <typename T_Struct7_field16_struct_setter>
    std::string& set_field16(T_Struct7_field16_struct_setter&& field16_) {
      field16 = std::forward<T_Struct7_field16_struct_setter>(field16_);
      __isset.field16 = true;
      return field16;
    }
    const std::map<std::map<int64_t, std::string>, bool>& get_field17() const&;
    std::map<std::map<int64_t, std::string>, bool> get_field17() &&;
  
    template <typename T_Struct7_field17_struct_setter>
    std::map<std::map<int64_t, std::string>, bool>& set_field17(T_Struct7_field17_struct_setter&& field17_) {
      field17 = std::forward<T_Struct7_field17_struct_setter>(field17_);
      __isset.field17 = true;
      return field17;
    }
    const std::set<std::string>& get_field18() const&;
    std::set<std::string> get_field18() &&;
  
    template <typename T_Struct7_field18_struct_setter>
    std::set<std::string>& set_field18(T_Struct7_field18_struct_setter&& field18_) {
      field18 = std::forward<T_Struct7_field18_struct_setter>(field18_);
      __isset.field18 = true;
      return field18;
    }
    const std::map<int32_t,  ::example::thrift32::Struct0>& get_field19() const&;
    std::map<int32_t,  ::example::thrift32::Struct0> get_field19() &&;
  
    template <typename T_Struct7_field19_struct_setter>
    std::map<int32_t,  ::example::thrift32::Struct0>& set_field19(T_Struct7_field19_struct_setter&& field19_) {
      field19 = std::forward<T_Struct7_field19_struct_setter>(field19_);
      __isset.field19 = true;
      return field19;
    }
    const std::vector<int64_t>& get_field20() const&;
    std::vector<int64_t> get_field20() &&;
  
    template <typename T_Struct7_field20_struct_setter>
    std::vector<int64_t>& set_field20(T_Struct7_field20_struct_setter&& field20_) {
      field20 = std::forward<T_Struct7_field20_struct_setter>(field20_);
      __isset.field20 = true;
      return field20;
    }
  
    int32_t get_field21() const {
      return field21;
    }
  
    int32_t& set_field21(int32_t field21_) {
      field21 = field21_;
      __isset.field21 = true;
      return field21;
    }
  
    template <class Protocol_>
    uint32_t 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:
    static void translateFieldName(FOLLY_MAYBE_UNUSED folly::StringPiece _fname, FOLLY_MAYBE_UNUSED int16_t& fid, FOLLY_MAYBE_UNUSED apache::thrift::protocol::TType& _ftype);
  };
  
  void swap(Struct7& a, Struct7& b);
  extern template uint32_t Struct7::read<>(apache::thrift::BinaryProtocolReader*);
  extern template uint32_t Struct7::write<>(apache::thrift::BinaryProtocolWriter*) const;
  extern template uint32_t Struct7::serializedSize<>(apache::thrift::BinaryProtocolWriter const*) const;
  extern template uint32_t Struct7::serializedSizeZC<>(apache::thrift::BinaryProtocolWriter const*) const;
  extern template uint32_t Struct7::read<>(apache::thrift::CompactProtocolReader*);
  extern template uint32_t Struct7::write<>(apache::thrift::CompactProtocolWriter*) const;
  extern template uint32_t Struct7::serializedSize<>(apache::thrift::CompactProtocolWriter const*) const;
  extern template uint32_t Struct7::serializedSizeZC<>(apache::thrift::CompactProtocolWriter const*) const;
  
  }} // example::thrift32
  namespace apache { namespace thrift {
  
  template <> inline void Cpp2Ops< ::example::thrift32::Struct7>::clear( ::example::thrift32::Struct7* obj) {
    return obj->__clear();
  }
  
  template <> inline constexpr apache::thrift::protocol::TType Cpp2Ops< ::example::thrift32::Struct7>::thriftType() {
    return apache::thrift::protocol::T_STRUCT;
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct7>::write(Protocol* proto,  ::example::thrift32::Struct7 const* obj) {
    return obj->write(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct7>::read(Protocol* proto,  ::example::thrift32::Struct7* obj) {
    return obj->read(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct7>::serializedSize(Protocol const* proto,  ::example::thrift32::Struct7 const* obj) {
    return obj->serializedSize(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct7>::serializedSizeZC(Protocol const* proto,  ::example::thrift32::Struct7 const* obj) {
    return obj->serializedSizeZC(proto);
  }
  
  }} // apache::thrift
  namespace example { namespace thrift32 {
  
  class Struct8 : private apache::thrift::detail::st::ComparisonOperators<Struct8> {
   public:
  
    Struct8() :
        field1(0),
        field3(0),
        field5(0),
        field7(0),
        field8(0),
        field10(0),
        field21(0),
        field25(0),
        field28(0) {}
    // FragileConstructor for use in initialization lists only
  
    Struct8(apache::thrift::FragileConstructor, bool field1__arg, std::string field2__arg, float field3__arg, std::set<std::set<double>> field4__arg, int16_t field5__arg,  ::example::thrift32::Struct0 field6__arg, int8_t field7__arg, int64_t field8__arg,  ::example::thrift32::Struct3 field9__arg, int32_t field10__arg, std::set<int16_t> field11__arg, std::string field12__arg, std::string field13__arg,  ::example::thrift32::Struct7 field14__arg, std::map<bool, int16_t> field15__arg, std::vector<std::set<int64_t>> field16__arg, std::string field17__arg, std::string field18__arg, std::vector<int64_t> field19__arg, std::string field20__arg, double field21__arg,  ::example::thrift32::Struct0 field22__arg, std::vector<int16_t> field23__arg, std::map< ::example::thrift32::Struct4, int8_t> field24__arg, int64_t field25__arg, std::vector<bool> field26__arg,  ::example::thrift32::Struct7 field27__arg, int16_t field28__arg) :
        field1(std::move(field1__arg)),
        field2(std::move(field2__arg)),
        field3(std::move(field3__arg)),
        field4(std::move(field4__arg)),
        field5(std::move(field5__arg)),
        field6(std::move(field6__arg)),
        field7(std::move(field7__arg)),
        field8(std::move(field8__arg)),
        field9(std::move(field9__arg)),
        field10(std::move(field10__arg)),
        field11(std::move(field11__arg)),
        field12(std::move(field12__arg)),
        field13(std::move(field13__arg)),
        field14(std::move(field14__arg)),
        field15(std::move(field15__arg)),
        field16(std::move(field16__arg)),
        field17(std::move(field17__arg)),
        field18(std::move(field18__arg)),
        field19(std::move(field19__arg)),
        field20(std::move(field20__arg)),
        field21(std::move(field21__arg)),
        field22(std::move(field22__arg)),
        field23(std::move(field23__arg)),
        field24(std::move(field24__arg)),
        field25(std::move(field25__arg)),
        field26(std::move(field26__arg)),
        field27(std::move(field27__arg)),
        field28(std::move(field28__arg)) {
      __isset.field1 = true;
      __isset.field2 = true;
      __isset.field3 = true;
      __isset.field4 = true;
      __isset.field5 = true;
      __isset.field6 = true;
      __isset.field7 = true;
      __isset.field8 = true;
      __isset.field9 = true;
      __isset.field10 = true;
      __isset.field11 = true;
      __isset.field12 = true;
      __isset.field13 = true;
      __isset.field14 = true;
      __isset.field15 = true;
      __isset.field16 = true;
      __isset.field17 = true;
      __isset.field18 = true;
      __isset.field19 = true;
      __isset.field20 = true;
      __isset.field21 = true;
      __isset.field22 = true;
      __isset.field23 = true;
      __isset.field24 = true;
      __isset.field25 = true;
      __isset.field26 = true;
      __isset.field27 = true;
      __isset.field28 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct8(::apache::thrift::detail::argument_wrapper<1, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct8(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field1 = arg.move();
      __isset.field1 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct8(::apache::thrift::detail::argument_wrapper<2, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct8(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field2 = arg.move();
      __isset.field2 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct8(::apache::thrift::detail::argument_wrapper<3, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct8(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field3 = arg.move();
      __isset.field3 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct8(::apache::thrift::detail::argument_wrapper<4, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct8(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field4 = arg.move();
      __isset.field4 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct8(::apache::thrift::detail::argument_wrapper<5, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct8(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field5 = arg.move();
      __isset.field5 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct8(::apache::thrift::detail::argument_wrapper<6, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct8(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field6 = arg.move();
      __isset.field6 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct8(::apache::thrift::detail::argument_wrapper<7, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct8(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field7 = arg.move();
      __isset.field7 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct8(::apache::thrift::detail::argument_wrapper<8, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct8(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field8 = arg.move();
      __isset.field8 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct8(::apache::thrift::detail::argument_wrapper<9, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct8(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field9 = arg.move();
      __isset.field9 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct8(::apache::thrift::detail::argument_wrapper<10, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct8(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field10 = arg.move();
      __isset.field10 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct8(::apache::thrift::detail::argument_wrapper<11, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct8(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field11 = arg.move();
      __isset.field11 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct8(::apache::thrift::detail::argument_wrapper<12, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct8(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field12 = arg.move();
      __isset.field12 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct8(::apache::thrift::detail::argument_wrapper<13, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct8(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field13 = arg.move();
      __isset.field13 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct8(::apache::thrift::detail::argument_wrapper<14, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct8(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field14 = arg.move();
      __isset.field14 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct8(::apache::thrift::detail::argument_wrapper<15, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct8(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field15 = arg.move();
      __isset.field15 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct8(::apache::thrift::detail::argument_wrapper<16, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct8(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field16 = arg.move();
      __isset.field16 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct8(::apache::thrift::detail::argument_wrapper<17, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct8(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field17 = arg.move();
      __isset.field17 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct8(::apache::thrift::detail::argument_wrapper<18, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct8(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field18 = arg.move();
      __isset.field18 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct8(::apache::thrift::detail::argument_wrapper<19, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct8(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field19 = arg.move();
      __isset.field19 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct8(::apache::thrift::detail::argument_wrapper<20, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct8(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field20 = arg.move();
      __isset.field20 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct8(::apache::thrift::detail::argument_wrapper<21, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct8(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field21 = arg.move();
      __isset.field21 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct8(::apache::thrift::detail::argument_wrapper<22, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct8(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field22 = arg.move();
      __isset.field22 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct8(::apache::thrift::detail::argument_wrapper<23, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct8(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field23 = arg.move();
      __isset.field23 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct8(::apache::thrift::detail::argument_wrapper<24, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct8(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field24 = arg.move();
      __isset.field24 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct8(::apache::thrift::detail::argument_wrapper<25, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct8(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field25 = arg.move();
      __isset.field25 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct8(::apache::thrift::detail::argument_wrapper<26, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct8(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field26 = arg.move();
      __isset.field26 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct8(::apache::thrift::detail::argument_wrapper<27, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct8(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field27 = arg.move();
      __isset.field27 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct8(::apache::thrift::detail::argument_wrapper<28, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct8(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field28 = arg.move();
      __isset.field28 = true;
    }
  
    Struct8(Struct8&&) = default;
  
    Struct8(const Struct8&) = default;
  
    Struct8& operator=(Struct8&&) = default;
  
    Struct8& operator=(const Struct8&) = default;
    void __clear();
  
    virtual ~Struct8() {}
  
    bool field1;
    std::string field2;
    float field3;
    std::set<std::set<double>> field4;
    int16_t field5;
     ::example::thrift32::Struct0 field6;
    int8_t field7;
    int64_t field8;
     ::example::thrift32::Struct3 field9;
    int32_t field10;
    std::set<int16_t> field11;
    std::string field12;
    std::string field13;
     ::example::thrift32::Struct7 field14;
    std::map<bool, int16_t> field15;
    std::vector<std::set<int64_t>> field16;
    std::string field17;
    std::string field18;
    std::vector<int64_t> field19;
    std::string field20;
    double field21;
     ::example::thrift32::Struct0 field22;
    std::vector<int16_t> field23;
    std::map< ::example::thrift32::Struct4, int8_t> field24;
    int64_t field25;
    std::vector<bool> field26;
     ::example::thrift32::Struct7 field27;
    int16_t field28;
  
    struct __isset {
      void __clear() {
        field1 = false;
        field2 = false;
        field3 = false;
        field4 = false;
        field5 = false;
        field6 = false;
        field7 = false;
        field8 = false;
        field9 = false;
        field10 = false;
        field11 = false;
        field12 = false;
        field13 = false;
        field14 = false;
        field15 = false;
        field16 = false;
        field17 = false;
        field18 = false;
        field19 = false;
        field20 = false;
        field21 = false;
        field22 = false;
        field23 = false;
        field24 = false;
        field25 = false;
        field26 = false;
        field27 = false;
        field28 = false;
      }
  
      bool field1 = false;
      bool field2 = false;
      bool field3 = false;
      bool field4 = false;
      bool field5 = false;
      bool field6 = false;
      bool field7 = false;
      bool field8 = false;
      bool field9 = false;
      bool field10 = false;
      bool field11 = false;
      bool field12 = false;
      bool field13 = false;
      bool field14 = false;
      bool field15 = false;
      bool field16 = false;
      bool field17 = false;
      bool field18 = false;
      bool field19 = false;
      bool field20 = false;
      bool field21 = false;
      bool field22 = false;
      bool field23 = false;
      bool field24 = false;
      bool field25 = false;
      bool field26 = false;
      bool field27 = false;
      bool field28 = false;
    } __isset;
    bool operator==(const Struct8& rhs) const;
  
    bool operator < (const Struct8& rhs) const {
      if (!(field1 == rhs.field1)) {
        return field1 < rhs.field1;
      }
      if (!(field2 == rhs.field2)) {
        return field2 < rhs.field2;
      }
      if (!(field3 == rhs.field3)) {
        return field3 < rhs.field3;
      }
      if (!(field4 == rhs.field4)) {
        return field4 < rhs.field4;
      }
      if (!(field5 == rhs.field5)) {
        return field5 < rhs.field5;
      }
      if (!(field6 == rhs.field6)) {
        return field6 < rhs.field6;
      }
      if (!(field7 == rhs.field7)) {
        return field7 < rhs.field7;
      }
      if (!(field8 == rhs.field8)) {
        return field8 < rhs.field8;
      }
      if (!(field9 == rhs.field9)) {
        return field9 < rhs.field9;
      }
      if (!(field10 == rhs.field10)) {
        return field10 < rhs.field10;
      }
      if (!(field11 == rhs.field11)) {
        return field11 < rhs.field11;
      }
      if (!(field12 == rhs.field12)) {
        return field12 < rhs.field12;
      }
      if (!(field13 == rhs.field13)) {
        return field13 < rhs.field13;
      }
      if (!(field14 == rhs.field14)) {
        return field14 < rhs.field14;
      }
      if (!(field15 == rhs.field15)) {
        return field15 < rhs.field15;
      }
      if (!(field16 == rhs.field16)) {
        return field16 < rhs.field16;
      }
      if (!(field17 == rhs.field17)) {
        return field17 < rhs.field17;
      }
      if (!(field18 == rhs.field18)) {
        return field18 < rhs.field18;
      }
      if (!(field19 == rhs.field19)) {
        return field19 < rhs.field19;
      }
      if (!(field20 == rhs.field20)) {
        return field20 < rhs.field20;
      }
      if (!(field21 == rhs.field21)) {
        return field21 < rhs.field21;
      }
      if (!(field22 == rhs.field22)) {
        return field22 < rhs.field22;
      }
      if (!(field23 == rhs.field23)) {
        return field23 < rhs.field23;
      }
      if (!(field24 == rhs.field24)) {
        return field24 < rhs.field24;
      }
      if (!(field25 == rhs.field25)) {
        return field25 < rhs.field25;
      }
      if (!(field26 == rhs.field26)) {
        return field26 < rhs.field26;
      }
      if (!(field27 == rhs.field27)) {
        return field27 < rhs.field27;
      }
      if (!(field28 == rhs.field28)) {
        return field28 < rhs.field28;
      }
      (void)rhs;
      return false;
    }
  
    bool get_field1() const {
      return field1;
    }
  
    bool& set_field1(bool field1_) {
      field1 = field1_;
      __isset.field1 = true;
      return field1;
    }
  
    const std::string& get_field2() const& {
      return field2;
    }
  
    std::string get_field2() && {
      return std::move(field2);
    }
  
    template <typename T_Struct8_field2_struct_setter>
    std::string& set_field2(T_Struct8_field2_struct_setter&& field2_) {
      field2 = std::forward<T_Struct8_field2_struct_setter>(field2_);
      __isset.field2 = true;
      return field2;
    }
  
    float get_field3() const {
      return field3;
    }
  
    float& set_field3(float field3_) {
      field3 = field3_;
      __isset.field3 = true;
      return field3;
    }
    const std::set<std::set<double>>& get_field4() const&;
    std::set<std::set<double>> get_field4() &&;
  
    template <typename T_Struct8_field4_struct_setter>
    std::set<std::set<double>>& set_field4(T_Struct8_field4_struct_setter&& field4_) {
      field4 = std::forward<T_Struct8_field4_struct_setter>(field4_);
      __isset.field4 = true;
      return field4;
    }
  
    int16_t get_field5() const {
      return field5;
    }
  
    int16_t& set_field5(int16_t field5_) {
      field5 = field5_;
      __isset.field5 = true;
      return field5;
    }
    const  ::example::thrift32::Struct0& get_field6() const&;
     ::example::thrift32::Struct0 get_field6() &&;
  
    template <typename T_Struct8_field6_struct_setter>
     ::example::thrift32::Struct0& set_field6(T_Struct8_field6_struct_setter&& field6_) {
      field6 = std::forward<T_Struct8_field6_struct_setter>(field6_);
      __isset.field6 = true;
      return field6;
    }
  
    int8_t get_field7() const {
      return field7;
    }
  
    int8_t& set_field7(int8_t field7_) {
      field7 = field7_;
      __isset.field7 = true;
      return field7;
    }
  
    int64_t get_field8() const {
      return field8;
    }
  
    int64_t& set_field8(int64_t field8_) {
      field8 = field8_;
      __isset.field8 = true;
      return field8;
    }
    const  ::example::thrift32::Struct3& get_field9() const&;
     ::example::thrift32::Struct3 get_field9() &&;
  
    template <typename T_Struct8_field9_struct_setter>
     ::example::thrift32::Struct3& set_field9(T_Struct8_field9_struct_setter&& field9_) {
      field9 = std::forward<T_Struct8_field9_struct_setter>(field9_);
      __isset.field9 = true;
      return field9;
    }
  
    int32_t get_field10() const {
      return field10;
    }
  
    int32_t& set_field10(int32_t field10_) {
      field10 = field10_;
      __isset.field10 = true;
      return field10;
    }
    const std::set<int16_t>& get_field11() const&;
    std::set<int16_t> get_field11() &&;
  
    template <typename T_Struct8_field11_struct_setter>
    std::set<int16_t>& set_field11(T_Struct8_field11_struct_setter&& field11_) {
      field11 = std::forward<T_Struct8_field11_struct_setter>(field11_);
      __isset.field11 = true;
      return field11;
    }
  
    const std::string& get_field12() const& {
      return field12;
    }
  
    std::string get_field12() && {
      return std::move(field12);
    }
  
    template <typename T_Struct8_field12_struct_setter>
    std::string& set_field12(T_Struct8_field12_struct_setter&& field12_) {
      field12 = std::forward<T_Struct8_field12_struct_setter>(field12_);
      __isset.field12 = true;
      return field12;
    }
  
    const std::string& get_field13() const& {
      return field13;
    }
  
    std::string get_field13() && {
      return std::move(field13);
    }
  
    template <typename T_Struct8_field13_struct_setter>
    std::string& set_field13(T_Struct8_field13_struct_setter&& field13_) {
      field13 = std::forward<T_Struct8_field13_struct_setter>(field13_);
      __isset.field13 = true;
      return field13;
    }
    const  ::example::thrift32::Struct7& get_field14() const&;
     ::example::thrift32::Struct7 get_field14() &&;
  
    template <typename T_Struct8_field14_struct_setter>
     ::example::thrift32::Struct7& set_field14(T_Struct8_field14_struct_setter&& field14_) {
      field14 = std::forward<T_Struct8_field14_struct_setter>(field14_);
      __isset.field14 = true;
      return field14;
    }
    const std::map<bool, int16_t>& get_field15() const&;
    std::map<bool, int16_t> get_field15() &&;
  
    template <typename T_Struct8_field15_struct_setter>
    std::map<bool, int16_t>& set_field15(T_Struct8_field15_struct_setter&& field15_) {
      field15 = std::forward<T_Struct8_field15_struct_setter>(field15_);
      __isset.field15 = true;
      return field15;
    }
    const std::vector<std::set<int64_t>>& get_field16() const&;
    std::vector<std::set<int64_t>> get_field16() &&;
  
    template <typename T_Struct8_field16_struct_setter>
    std::vector<std::set<int64_t>>& set_field16(T_Struct8_field16_struct_setter&& field16_) {
      field16 = std::forward<T_Struct8_field16_struct_setter>(field16_);
      __isset.field16 = true;
      return field16;
    }
  
    const std::string& get_field17() const& {
      return field17;
    }
  
    std::string get_field17() && {
      return std::move(field17);
    }
  
    template <typename T_Struct8_field17_struct_setter>
    std::string& set_field17(T_Struct8_field17_struct_setter&& field17_) {
      field17 = std::forward<T_Struct8_field17_struct_setter>(field17_);
      __isset.field17 = true;
      return field17;
    }
  
    const std::string& get_field18() const& {
      return field18;
    }
  
    std::string get_field18() && {
      return std::move(field18);
    }
  
    template <typename T_Struct8_field18_struct_setter>
    std::string& set_field18(T_Struct8_field18_struct_setter&& field18_) {
      field18 = std::forward<T_Struct8_field18_struct_setter>(field18_);
      __isset.field18 = true;
      return field18;
    }
    const std::vector<int64_t>& get_field19() const&;
    std::vector<int64_t> get_field19() &&;
  
    template <typename T_Struct8_field19_struct_setter>
    std::vector<int64_t>& set_field19(T_Struct8_field19_struct_setter&& field19_) {
      field19 = std::forward<T_Struct8_field19_struct_setter>(field19_);
      __isset.field19 = true;
      return field19;
    }
  
    const std::string& get_field20() const& {
      return field20;
    }
  
    std::string get_field20() && {
      return std::move(field20);
    }
  
    template <typename T_Struct8_field20_struct_setter>
    std::string& set_field20(T_Struct8_field20_struct_setter&& field20_) {
      field20 = std::forward<T_Struct8_field20_struct_setter>(field20_);
      __isset.field20 = true;
      return field20;
    }
  
    double get_field21() const {
      return field21;
    }
  
    double& set_field21(double field21_) {
      field21 = field21_;
      __isset.field21 = true;
      return field21;
    }
    const  ::example::thrift32::Struct0& get_field22() const&;
     ::example::thrift32::Struct0 get_field22() &&;
  
    template <typename T_Struct8_field22_struct_setter>
     ::example::thrift32::Struct0& set_field22(T_Struct8_field22_struct_setter&& field22_) {
      field22 = std::forward<T_Struct8_field22_struct_setter>(field22_);
      __isset.field22 = true;
      return field22;
    }
    const std::vector<int16_t>& get_field23() const&;
    std::vector<int16_t> get_field23() &&;
  
    template <typename T_Struct8_field23_struct_setter>
    std::vector<int16_t>& set_field23(T_Struct8_field23_struct_setter&& field23_) {
      field23 = std::forward<T_Struct8_field23_struct_setter>(field23_);
      __isset.field23 = true;
      return field23;
    }
    const std::map< ::example::thrift32::Struct4, int8_t>& get_field24() const&;
    std::map< ::example::thrift32::Struct4, int8_t> get_field24() &&;
  
    template <typename T_Struct8_field24_struct_setter>
    std::map< ::example::thrift32::Struct4, int8_t>& set_field24(T_Struct8_field24_struct_setter&& field24_) {
      field24 = std::forward<T_Struct8_field24_struct_setter>(field24_);
      __isset.field24 = true;
      return field24;
    }
  
    int64_t get_field25() const {
      return field25;
    }
  
    int64_t& set_field25(int64_t field25_) {
      field25 = field25_;
      __isset.field25 = true;
      return field25;
    }
    const std::vector<bool>& get_field26() const&;
    std::vector<bool> get_field26() &&;
  
    template <typename T_Struct8_field26_struct_setter>
    std::vector<bool>& set_field26(T_Struct8_field26_struct_setter&& field26_) {
      field26 = std::forward<T_Struct8_field26_struct_setter>(field26_);
      __isset.field26 = true;
      return field26;
    }
    const  ::example::thrift32::Struct7& get_field27() const&;
     ::example::thrift32::Struct7 get_field27() &&;
  
    template <typename T_Struct8_field27_struct_setter>
     ::example::thrift32::Struct7& set_field27(T_Struct8_field27_struct_setter&& field27_) {
      field27 = std::forward<T_Struct8_field27_struct_setter>(field27_);
      __isset.field27 = true;
      return field27;
    }
  
    int16_t get_field28() const {
      return field28;
    }
  
    int16_t& set_field28(int16_t field28_) {
      field28 = field28_;
      __isset.field28 = true;
      return field28;
    }
  
    template <class Protocol_>
    uint32_t 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:
    static void translateFieldName(FOLLY_MAYBE_UNUSED folly::StringPiece _fname, FOLLY_MAYBE_UNUSED int16_t& fid, FOLLY_MAYBE_UNUSED apache::thrift::protocol::TType& _ftype);
  };
  
  void swap(Struct8& a, Struct8& b);
  extern template uint32_t Struct8::read<>(apache::thrift::BinaryProtocolReader*);
  extern template uint32_t Struct8::write<>(apache::thrift::BinaryProtocolWriter*) const;
  extern template uint32_t Struct8::serializedSize<>(apache::thrift::BinaryProtocolWriter const*) const;
  extern template uint32_t Struct8::serializedSizeZC<>(apache::thrift::BinaryProtocolWriter const*) const;
  extern template uint32_t Struct8::read<>(apache::thrift::CompactProtocolReader*);
  extern template uint32_t Struct8::write<>(apache::thrift::CompactProtocolWriter*) const;
  extern template uint32_t Struct8::serializedSize<>(apache::thrift::CompactProtocolWriter const*) const;
  extern template uint32_t Struct8::serializedSizeZC<>(apache::thrift::CompactProtocolWriter const*) const;
  
  }} // example::thrift32
  namespace apache { namespace thrift {
  
  template <> inline void Cpp2Ops< ::example::thrift32::Struct8>::clear( ::example::thrift32::Struct8* obj) {
    return obj->__clear();
  }
  
  template <> inline constexpr apache::thrift::protocol::TType Cpp2Ops< ::example::thrift32::Struct8>::thriftType() {
    return apache::thrift::protocol::T_STRUCT;
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct8>::write(Protocol* proto,  ::example::thrift32::Struct8 const* obj) {
    return obj->write(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct8>::read(Protocol* proto,  ::example::thrift32::Struct8* obj) {
    return obj->read(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct8>::serializedSize(Protocol const* proto,  ::example::thrift32::Struct8 const* obj) {
    return obj->serializedSize(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct8>::serializedSizeZC(Protocol const* proto,  ::example::thrift32::Struct8 const* obj) {
    return obj->serializedSizeZC(proto);
  }
  
  }} // apache::thrift
  namespace example { namespace thrift32 {
  
  class Struct9 : private apache::thrift::detail::st::ComparisonOperators<Struct9> {
   public:
  
    Struct9() :
        field9(0),
        field10(0),
        field14(0),
        field16(0) {}
    // FragileConstructor for use in initialization lists only
  
    Struct9(apache::thrift::FragileConstructor, std::string field1__arg, std::string field2__arg, std::vector<int8_t> field3__arg, std::string field4__arg,  ::example::thrift32::Struct4 field5__arg, std::string field6__arg, std::string field7__arg, std::vector<int32_t> field8__arg, float field9__arg, double field10__arg, std::map<std::map<int16_t, double>, int8_t> field11__arg, std::vector<int64_t> field12__arg, std::set<double> field13__arg, int16_t field14__arg,  ::example::thrift32::Struct2 field15__arg, int16_t field16__arg, std::string field17__arg) :
        field1(std::move(field1__arg)),
        field2(std::move(field2__arg)),
        field3(std::move(field3__arg)),
        field4(std::move(field4__arg)),
        field5(std::move(field5__arg)),
        field6(std::move(field6__arg)),
        field7(std::move(field7__arg)),
        field8(std::move(field8__arg)),
        field9(std::move(field9__arg)),
        field10(std::move(field10__arg)),
        field11(std::move(field11__arg)),
        field12(std::move(field12__arg)),
        field13(std::move(field13__arg)),
        field14(std::move(field14__arg)),
        field15(std::move(field15__arg)),
        field16(std::move(field16__arg)),
        field17(std::move(field17__arg)) {
      __isset.field1 = true;
      __isset.field2 = true;
      __isset.field3 = true;
      __isset.field4 = true;
      __isset.field5 = true;
      __isset.field6 = true;
      __isset.field7 = true;
      __isset.field8 = true;
      __isset.field9 = true;
      __isset.field10 = true;
      __isset.field11 = true;
      __isset.field12 = true;
      __isset.field13 = true;
      __isset.field14 = true;
      __isset.field15 = true;
      __isset.field16 = true;
      __isset.field17 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct9(::apache::thrift::detail::argument_wrapper<1, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct9(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field1 = arg.move();
      __isset.field1 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct9(::apache::thrift::detail::argument_wrapper<2, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct9(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field2 = arg.move();
      __isset.field2 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct9(::apache::thrift::detail::argument_wrapper<3, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct9(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field3 = arg.move();
      __isset.field3 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct9(::apache::thrift::detail::argument_wrapper<4, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct9(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field4 = arg.move();
      __isset.field4 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct9(::apache::thrift::detail::argument_wrapper<5, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct9(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field5 = arg.move();
      __isset.field5 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct9(::apache::thrift::detail::argument_wrapper<6, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct9(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field6 = arg.move();
      __isset.field6 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct9(::apache::thrift::detail::argument_wrapper<7, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct9(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field7 = arg.move();
      __isset.field7 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct9(::apache::thrift::detail::argument_wrapper<8, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct9(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field8 = arg.move();
      __isset.field8 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct9(::apache::thrift::detail::argument_wrapper<9, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct9(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field9 = arg.move();
      __isset.field9 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct9(::apache::thrift::detail::argument_wrapper<10, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct9(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field10 = arg.move();
      __isset.field10 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct9(::apache::thrift::detail::argument_wrapper<11, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct9(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field11 = arg.move();
      __isset.field11 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct9(::apache::thrift::detail::argument_wrapper<12, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct9(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field12 = arg.move();
      __isset.field12 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct9(::apache::thrift::detail::argument_wrapper<13, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct9(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field13 = arg.move();
      __isset.field13 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct9(::apache::thrift::detail::argument_wrapper<14, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct9(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field14 = arg.move();
      __isset.field14 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct9(::apache::thrift::detail::argument_wrapper<15, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct9(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field15 = arg.move();
      __isset.field15 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct9(::apache::thrift::detail::argument_wrapper<16, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct9(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field16 = arg.move();
      __isset.field16 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct9(::apache::thrift::detail::argument_wrapper<17, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct9(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field17 = arg.move();
      __isset.field17 = true;
    }
  
    Struct9(Struct9&&) = default;
  
    Struct9(const Struct9&) = default;
  
    Struct9& operator=(Struct9&&) = default;
  
    Struct9& operator=(const Struct9&) = default;
    void __clear();
  
    virtual ~Struct9() {}
  
    std::string field1;
    std::string field2;
    std::vector<int8_t> field3;
    std::string field4;
     ::example::thrift32::Struct4 field5;
    std::string field6;
    std::string field7;
    std::vector<int32_t> field8;
    float field9;
    double field10;
    std::map<std::map<int16_t, double>, int8_t> field11;
    std::vector<int64_t> field12;
    std::set<double> field13;
    int16_t field14;
     ::example::thrift32::Struct2 field15;
    int16_t field16;
    std::string field17;
  
    struct __isset {
      void __clear() {
        field1 = false;
        field2 = false;
        field3 = false;
        field4 = false;
        field5 = false;
        field6 = false;
        field7 = false;
        field8 = false;
        field9 = false;
        field10 = false;
        field11 = false;
        field12 = false;
        field13 = false;
        field14 = false;
        field15 = false;
        field16 = false;
        field17 = false;
      }
  
      bool field1 = false;
      bool field2 = false;
      bool field3 = false;
      bool field4 = false;
      bool field5 = false;
      bool field6 = false;
      bool field7 = false;
      bool field8 = false;
      bool field9 = false;
      bool field10 = false;
      bool field11 = false;
      bool field12 = false;
      bool field13 = false;
      bool field14 = false;
      bool field15 = false;
      bool field16 = false;
      bool field17 = false;
    } __isset;
    bool operator==(const Struct9& rhs) const;
  
    bool operator < (const Struct9& rhs) const {
      if (!(field1 == rhs.field1)) {
        return field1 < rhs.field1;
      }
      if (!(field2 == rhs.field2)) {
        return field2 < rhs.field2;
      }
      if (!(field3 == rhs.field3)) {
        return field3 < rhs.field3;
      }
      if (!(field4 == rhs.field4)) {
        return field4 < rhs.field4;
      }
      if (!(field5 == rhs.field5)) {
        return field5 < rhs.field5;
      }
      if (!(field6 == rhs.field6)) {
        return field6 < rhs.field6;
      }
      if (!(field7 == rhs.field7)) {
        return field7 < rhs.field7;
      }
      if (!(field8 == rhs.field8)) {
        return field8 < rhs.field8;
      }
      if (!(field9 == rhs.field9)) {
        return field9 < rhs.field9;
      }
      if (!(field10 == rhs.field10)) {
        return field10 < rhs.field10;
      }
      if (!(field11 == rhs.field11)) {
        return field11 < rhs.field11;
      }
      if (!(field12 == rhs.field12)) {
        return field12 < rhs.field12;
      }
      if (!(field13 == rhs.field13)) {
        return field13 < rhs.field13;
      }
      if (!(field14 == rhs.field14)) {
        return field14 < rhs.field14;
      }
      if (!(field15 == rhs.field15)) {
        return field15 < rhs.field15;
      }
      if (!(field16 == rhs.field16)) {
        return field16 < rhs.field16;
      }
      if (!(field17 == rhs.field17)) {
        return field17 < rhs.field17;
      }
      (void)rhs;
      return false;
    }
  
    const std::string& get_field1() const& {
      return field1;
    }
  
    std::string get_field1() && {
      return std::move(field1);
    }
  
    template <typename T_Struct9_field1_struct_setter>
    std::string& set_field1(T_Struct9_field1_struct_setter&& field1_) {
      field1 = std::forward<T_Struct9_field1_struct_setter>(field1_);
      __isset.field1 = true;
      return field1;
    }
  
    const std::string& get_field2() const& {
      return field2;
    }
  
    std::string get_field2() && {
      return std::move(field2);
    }
  
    template <typename T_Struct9_field2_struct_setter>
    std::string& set_field2(T_Struct9_field2_struct_setter&& field2_) {
      field2 = std::forward<T_Struct9_field2_struct_setter>(field2_);
      __isset.field2 = true;
      return field2;
    }
    const std::vector<int8_t>& get_field3() const&;
    std::vector<int8_t> get_field3() &&;
  
    template <typename T_Struct9_field3_struct_setter>
    std::vector<int8_t>& set_field3(T_Struct9_field3_struct_setter&& field3_) {
      field3 = std::forward<T_Struct9_field3_struct_setter>(field3_);
      __isset.field3 = true;
      return field3;
    }
  
    const std::string& get_field4() const& {
      return field4;
    }
  
    std::string get_field4() && {
      return std::move(field4);
    }
  
    template <typename T_Struct9_field4_struct_setter>
    std::string& set_field4(T_Struct9_field4_struct_setter&& field4_) {
      field4 = std::forward<T_Struct9_field4_struct_setter>(field4_);
      __isset.field4 = true;
      return field4;
    }
    const  ::example::thrift32::Struct4& get_field5() const&;
     ::example::thrift32::Struct4 get_field5() &&;
  
    template <typename T_Struct9_field5_struct_setter>
     ::example::thrift32::Struct4& set_field5(T_Struct9_field5_struct_setter&& field5_) {
      field5 = std::forward<T_Struct9_field5_struct_setter>(field5_);
      __isset.field5 = true;
      return field5;
    }
  
    const std::string& get_field6() const& {
      return field6;
    }
  
    std::string get_field6() && {
      return std::move(field6);
    }
  
    template <typename T_Struct9_field6_struct_setter>
    std::string& set_field6(T_Struct9_field6_struct_setter&& field6_) {
      field6 = std::forward<T_Struct9_field6_struct_setter>(field6_);
      __isset.field6 = true;
      return field6;
    }
  
    const std::string& get_field7() const& {
      return field7;
    }
  
    std::string get_field7() && {
      return std::move(field7);
    }
  
    template <typename T_Struct9_field7_struct_setter>
    std::string& set_field7(T_Struct9_field7_struct_setter&& field7_) {
      field7 = std::forward<T_Struct9_field7_struct_setter>(field7_);
      __isset.field7 = true;
      return field7;
    }
    const std::vector<int32_t>& get_field8() const&;
    std::vector<int32_t> get_field8() &&;
  
    template <typename T_Struct9_field8_struct_setter>
    std::vector<int32_t>& set_field8(T_Struct9_field8_struct_setter&& field8_) {
      field8 = std::forward<T_Struct9_field8_struct_setter>(field8_);
      __isset.field8 = true;
      return field8;
    }
  
    float get_field9() const {
      return field9;
    }
  
    float& set_field9(float field9_) {
      field9 = field9_;
      __isset.field9 = true;
      return field9;
    }
  
    double get_field10() const {
      return field10;
    }
  
    double& set_field10(double field10_) {
      field10 = field10_;
      __isset.field10 = true;
      return field10;
    }
    const std::map<std::map<int16_t, double>, int8_t>& get_field11() const&;
    std::map<std::map<int16_t, double>, int8_t> get_field11() &&;
  
    template <typename T_Struct9_field11_struct_setter>
    std::map<std::map<int16_t, double>, int8_t>& set_field11(T_Struct9_field11_struct_setter&& field11_) {
      field11 = std::forward<T_Struct9_field11_struct_setter>(field11_);
      __isset.field11 = true;
      return field11;
    }
    const std::vector<int64_t>& get_field12() const&;
    std::vector<int64_t> get_field12() &&;
  
    template <typename T_Struct9_field12_struct_setter>
    std::vector<int64_t>& set_field12(T_Struct9_field12_struct_setter&& field12_) {
      field12 = std::forward<T_Struct9_field12_struct_setter>(field12_);
      __isset.field12 = true;
      return field12;
    }
    const std::set<double>& get_field13() const&;
    std::set<double> get_field13() &&;
  
    template <typename T_Struct9_field13_struct_setter>
    std::set<double>& set_field13(T_Struct9_field13_struct_setter&& field13_) {
      field13 = std::forward<T_Struct9_field13_struct_setter>(field13_);
      __isset.field13 = true;
      return field13;
    }
  
    int16_t get_field14() const {
      return field14;
    }
  
    int16_t& set_field14(int16_t field14_) {
      field14 = field14_;
      __isset.field14 = true;
      return field14;
    }
    const  ::example::thrift32::Struct2& get_field15() const&;
     ::example::thrift32::Struct2 get_field15() &&;
  
    template <typename T_Struct9_field15_struct_setter>
     ::example::thrift32::Struct2& set_field15(T_Struct9_field15_struct_setter&& field15_) {
      field15 = std::forward<T_Struct9_field15_struct_setter>(field15_);
      __isset.field15 = true;
      return field15;
    }
  
    int16_t get_field16() const {
      return field16;
    }
  
    int16_t& set_field16(int16_t field16_) {
      field16 = field16_;
      __isset.field16 = true;
      return field16;
    }
  
    const std::string& get_field17() const& {
      return field17;
    }
  
    std::string get_field17() && {
      return std::move(field17);
    }
  
    template <typename T_Struct9_field17_struct_setter>
    std::string& set_field17(T_Struct9_field17_struct_setter&& field17_) {
      field17 = std::forward<T_Struct9_field17_struct_setter>(field17_);
      __isset.field17 = true;
      return field17;
    }
  
    template <class Protocol_>
    uint32_t 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:
    static void translateFieldName(FOLLY_MAYBE_UNUSED folly::StringPiece _fname, FOLLY_MAYBE_UNUSED int16_t& fid, FOLLY_MAYBE_UNUSED apache::thrift::protocol::TType& _ftype);
  };
  
  void swap(Struct9& a, Struct9& b);
  extern template uint32_t Struct9::read<>(apache::thrift::BinaryProtocolReader*);
  extern template uint32_t Struct9::write<>(apache::thrift::BinaryProtocolWriter*) const;
  extern template uint32_t Struct9::serializedSize<>(apache::thrift::BinaryProtocolWriter const*) const;
  extern template uint32_t Struct9::serializedSizeZC<>(apache::thrift::BinaryProtocolWriter const*) const;
  extern template uint32_t Struct9::read<>(apache::thrift::CompactProtocolReader*);
  extern template uint32_t Struct9::write<>(apache::thrift::CompactProtocolWriter*) const;
  extern template uint32_t Struct9::serializedSize<>(apache::thrift::CompactProtocolWriter const*) const;
  extern template uint32_t Struct9::serializedSizeZC<>(apache::thrift::CompactProtocolWriter const*) const;
  
  }} // example::thrift32
  namespace apache { namespace thrift {
  
  template <> inline void Cpp2Ops< ::example::thrift32::Struct9>::clear( ::example::thrift32::Struct9* obj) {
    return obj->__clear();
  }
  
  template <> inline constexpr apache::thrift::protocol::TType Cpp2Ops< ::example::thrift32::Struct9>::thriftType() {
    return apache::thrift::protocol::T_STRUCT;
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct9>::write(Protocol* proto,  ::example::thrift32::Struct9 const* obj) {
    return obj->write(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct9>::read(Protocol* proto,  ::example::thrift32::Struct9* obj) {
    return obj->read(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct9>::serializedSize(Protocol const* proto,  ::example::thrift32::Struct9 const* obj) {
    return obj->serializedSize(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct9>::serializedSizeZC(Protocol const* proto,  ::example::thrift32::Struct9 const* obj) {
    return obj->serializedSizeZC(proto);
  }
  
  }} // apache::thrift
  namespace example { namespace thrift32 {
  
  class Struct10 : private apache::thrift::detail::st::ComparisonOperators<Struct10> {
   public:
  
    Struct10() {}
    // FragileConstructor for use in initialization lists only
  
    Struct10(apache::thrift::FragileConstructor, std::string field1__arg) :
        field1(std::move(field1__arg)) {
      __isset.field1 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct10(::apache::thrift::detail::argument_wrapper<1, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct10(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field1 = arg.move();
      __isset.field1 = true;
    }
  
    Struct10(Struct10&&) = default;
  
    Struct10(const Struct10&) = default;
  
    Struct10& operator=(Struct10&&) = default;
  
    Struct10& operator=(const Struct10&) = default;
    void __clear();
  
    virtual ~Struct10() {}
  
    std::string field1;
  
    struct __isset {
      void __clear() {
        field1 = false;
      }
  
      bool field1 = false;
    } __isset;
    bool operator==(const Struct10& rhs) const;
  
    bool operator < (const Struct10& rhs) const {
      if (!(field1 == rhs.field1)) {
        return field1 < rhs.field1;
      }
      (void)rhs;
      return false;
    }
  
    const std::string& get_field1() const& {
      return field1;
    }
  
    std::string get_field1() && {
      return std::move(field1);
    }
  
    template <typename T_Struct10_field1_struct_setter>
    std::string& set_field1(T_Struct10_field1_struct_setter&& field1_) {
      field1 = std::forward<T_Struct10_field1_struct_setter>(field1_);
      __isset.field1 = true;
      return field1;
    }
  
    template <class Protocol_>
    uint32_t 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:
    static void translateFieldName(FOLLY_MAYBE_UNUSED folly::StringPiece _fname, FOLLY_MAYBE_UNUSED int16_t& fid, FOLLY_MAYBE_UNUSED apache::thrift::protocol::TType& _ftype);
  };
  
  void swap(Struct10& a, Struct10& b);
  extern template uint32_t Struct10::read<>(apache::thrift::BinaryProtocolReader*);
  extern template uint32_t Struct10::write<>(apache::thrift::BinaryProtocolWriter*) const;
  extern template uint32_t Struct10::serializedSize<>(apache::thrift::BinaryProtocolWriter const*) const;
  extern template uint32_t Struct10::serializedSizeZC<>(apache::thrift::BinaryProtocolWriter const*) const;
  extern template uint32_t Struct10::read<>(apache::thrift::CompactProtocolReader*);
  extern template uint32_t Struct10::write<>(apache::thrift::CompactProtocolWriter*) const;
  extern template uint32_t Struct10::serializedSize<>(apache::thrift::CompactProtocolWriter const*) const;
  extern template uint32_t Struct10::serializedSizeZC<>(apache::thrift::CompactProtocolWriter const*) const;
  
  }} // example::thrift32
  namespace apache { namespace thrift {
  
  template <> inline void Cpp2Ops< ::example::thrift32::Struct10>::clear( ::example::thrift32::Struct10* obj) {
    return obj->__clear();
  }
  
  template <> inline constexpr apache::thrift::protocol::TType Cpp2Ops< ::example::thrift32::Struct10>::thriftType() {
    return apache::thrift::protocol::T_STRUCT;
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct10>::write(Protocol* proto,  ::example::thrift32::Struct10 const* obj) {
    return obj->write(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct10>::read(Protocol* proto,  ::example::thrift32::Struct10* obj) {
    return obj->read(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct10>::serializedSize(Protocol const* proto,  ::example::thrift32::Struct10 const* obj) {
    return obj->serializedSize(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct10>::serializedSizeZC(Protocol const* proto,  ::example::thrift32::Struct10 const* obj) {
    return obj->serializedSizeZC(proto);
  }
  
  }} // apache::thrift
  namespace example { namespace thrift32 {
  
  class Struct11 : private apache::thrift::detail::st::ComparisonOperators<Struct11> {
   public:
  
    Struct11() :
        field3(0),
        field4(0),
        field5(0),
        field6(0),
        field7(0),
        field8(0) {}
    // FragileConstructor for use in initialization lists only
  
    Struct11(apache::thrift::FragileConstructor, std::string field1__arg, std::map<bool, bool> field2__arg, int32_t field3__arg, int64_t field4__arg, int32_t field5__arg, int64_t field6__arg, int64_t field7__arg, double field8__arg) :
        field1(std::move(field1__arg)),
        field2(std::move(field2__arg)),
        field3(std::move(field3__arg)),
        field4(std::move(field4__arg)),
        field5(std::move(field5__arg)),
        field6(std::move(field6__arg)),
        field7(std::move(field7__arg)),
        field8(std::move(field8__arg)) {
      __isset.field1 = true;
      __isset.field2 = true;
      __isset.field3 = true;
      __isset.field4 = true;
      __isset.field5 = true;
      __isset.field6 = true;
      __isset.field7 = true;
      __isset.field8 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct11(::apache::thrift::detail::argument_wrapper<1, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct11(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field1 = arg.move();
      __isset.field1 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct11(::apache::thrift::detail::argument_wrapper<2, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct11(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field2 = arg.move();
      __isset.field2 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct11(::apache::thrift::detail::argument_wrapper<3, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct11(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field3 = arg.move();
      __isset.field3 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct11(::apache::thrift::detail::argument_wrapper<4, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct11(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field4 = arg.move();
      __isset.field4 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct11(::apache::thrift::detail::argument_wrapper<5, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct11(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field5 = arg.move();
      __isset.field5 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct11(::apache::thrift::detail::argument_wrapper<6, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct11(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field6 = arg.move();
      __isset.field6 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct11(::apache::thrift::detail::argument_wrapper<7, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct11(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field7 = arg.move();
      __isset.field7 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct11(::apache::thrift::detail::argument_wrapper<8, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct11(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field8 = arg.move();
      __isset.field8 = true;
    }
  
    Struct11(Struct11&&) = default;
  
    Struct11(const Struct11&) = default;
  
    Struct11& operator=(Struct11&&) = default;
  
    Struct11& operator=(const Struct11&) = default;
    void __clear();
  
    virtual ~Struct11() {}
  
    std::string field1;
    std::map<bool, bool> field2;
    int32_t field3;
    int64_t field4;
    int32_t field5;
    int64_t field6;
    int64_t field7;
    double field8;
  
    struct __isset {
      void __clear() {
        field1 = false;
        field2 = false;
        field3 = false;
        field4 = false;
        field5 = false;
        field6 = false;
        field7 = false;
        field8 = false;
      }
  
      bool field1 = false;
      bool field2 = false;
      bool field3 = false;
      bool field4 = false;
      bool field5 = false;
      bool field6 = false;
      bool field7 = false;
      bool field8 = false;
    } __isset;
    bool operator==(const Struct11& rhs) const;
  
    bool operator < (const Struct11& rhs) const {
      if (!(field1 == rhs.field1)) {
        return field1 < rhs.field1;
      }
      if (!(field2 == rhs.field2)) {
        return field2 < rhs.field2;
      }
      if (!(field3 == rhs.field3)) {
        return field3 < rhs.field3;
      }
      if (!(field4 == rhs.field4)) {
        return field4 < rhs.field4;
      }
      if (!(field5 == rhs.field5)) {
        return field5 < rhs.field5;
      }
      if (!(field6 == rhs.field6)) {
        return field6 < rhs.field6;
      }
      if (!(field7 == rhs.field7)) {
        return field7 < rhs.field7;
      }
      if (!(field8 == rhs.field8)) {
        return field8 < rhs.field8;
      }
      (void)rhs;
      return false;
    }
  
    const std::string& get_field1() const& {
      return field1;
    }
  
    std::string get_field1() && {
      return std::move(field1);
    }
  
    template <typename T_Struct11_field1_struct_setter>
    std::string& set_field1(T_Struct11_field1_struct_setter&& field1_) {
      field1 = std::forward<T_Struct11_field1_struct_setter>(field1_);
      __isset.field1 = true;
      return field1;
    }
    const std::map<bool, bool>& get_field2() const&;
    std::map<bool, bool> get_field2() &&;
  
    template <typename T_Struct11_field2_struct_setter>
    std::map<bool, bool>& set_field2(T_Struct11_field2_struct_setter&& field2_) {
      field2 = std::forward<T_Struct11_field2_struct_setter>(field2_);
      __isset.field2 = true;
      return field2;
    }
  
    int32_t get_field3() const {
      return field3;
    }
  
    int32_t& set_field3(int32_t field3_) {
      field3 = field3_;
      __isset.field3 = true;
      return field3;
    }
  
    int64_t get_field4() const {
      return field4;
    }
  
    int64_t& set_field4(int64_t field4_) {
      field4 = field4_;
      __isset.field4 = true;
      return field4;
    }
  
    int32_t get_field5() const {
      return field5;
    }
  
    int32_t& set_field5(int32_t field5_) {
      field5 = field5_;
      __isset.field5 = true;
      return field5;
    }
  
    int64_t get_field6() const {
      return field6;
    }
  
    int64_t& set_field6(int64_t field6_) {
      field6 = field6_;
      __isset.field6 = true;
      return field6;
    }
  
    int64_t get_field7() const {
      return field7;
    }
  
    int64_t& set_field7(int64_t field7_) {
      field7 = field7_;
      __isset.field7 = true;
      return field7;
    }
  
    double get_field8() const {
      return field8;
    }
  
    double& set_field8(double field8_) {
      field8 = field8_;
      __isset.field8 = true;
      return field8;
    }
  
    template <class Protocol_>
    uint32_t 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:
    static void translateFieldName(FOLLY_MAYBE_UNUSED folly::StringPiece _fname, FOLLY_MAYBE_UNUSED int16_t& fid, FOLLY_MAYBE_UNUSED apache::thrift::protocol::TType& _ftype);
  };
  
  void swap(Struct11& a, Struct11& b);
  extern template uint32_t Struct11::read<>(apache::thrift::BinaryProtocolReader*);
  extern template uint32_t Struct11::write<>(apache::thrift::BinaryProtocolWriter*) const;
  extern template uint32_t Struct11::serializedSize<>(apache::thrift::BinaryProtocolWriter const*) const;
  extern template uint32_t Struct11::serializedSizeZC<>(apache::thrift::BinaryProtocolWriter const*) const;
  extern template uint32_t Struct11::read<>(apache::thrift::CompactProtocolReader*);
  extern template uint32_t Struct11::write<>(apache::thrift::CompactProtocolWriter*) const;
  extern template uint32_t Struct11::serializedSize<>(apache::thrift::CompactProtocolWriter const*) const;
  extern template uint32_t Struct11::serializedSizeZC<>(apache::thrift::CompactProtocolWriter const*) const;
  
  }} // example::thrift32
  namespace apache { namespace thrift {
  
  template <> inline void Cpp2Ops< ::example::thrift32::Struct11>::clear( ::example::thrift32::Struct11* obj) {
    return obj->__clear();
  }
  
  template <> inline constexpr apache::thrift::protocol::TType Cpp2Ops< ::example::thrift32::Struct11>::thriftType() {
    return apache::thrift::protocol::T_STRUCT;
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct11>::write(Protocol* proto,  ::example::thrift32::Struct11 const* obj) {
    return obj->write(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct11>::read(Protocol* proto,  ::example::thrift32::Struct11* obj) {
    return obj->read(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct11>::serializedSize(Protocol const* proto,  ::example::thrift32::Struct11 const* obj) {
    return obj->serializedSize(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct11>::serializedSizeZC(Protocol const* proto,  ::example::thrift32::Struct11 const* obj) {
    return obj->serializedSizeZC(proto);
  }
  
  }} // apache::thrift
  namespace example { namespace thrift32 {
  
  class Struct12 : private apache::thrift::detail::st::ComparisonOperators<Struct12> {
   public:
  
    Struct12() :
        field3(0),
        field4(0),
        field8(0) {}
    // FragileConstructor for use in initialization lists only
  
    Struct12(apache::thrift::FragileConstructor, std::vector<int16_t> field1__arg, std::map<int64_t, std::vector<std::string>> field2__arg, int8_t field3__arg, int32_t field4__arg, std::vector<int16_t> field5__arg, std::set<float> field6__arg, std::map<float, std::map<std::string, int8_t>> field7__arg, int8_t field8__arg, std::set<std::map<bool, std::string>> field9__arg) :
        field1(std::move(field1__arg)),
        field2(std::move(field2__arg)),
        field3(std::move(field3__arg)),
        field4(std::move(field4__arg)),
        field5(std::move(field5__arg)),
        field6(std::move(field6__arg)),
        field7(std::move(field7__arg)),
        field8(std::move(field8__arg)),
        field9(std::move(field9__arg)) {
      __isset.field1 = true;
      __isset.field2 = true;
      __isset.field3 = true;
      __isset.field4 = true;
      __isset.field5 = true;
      __isset.field6 = true;
      __isset.field7 = true;
      __isset.field8 = true;
      __isset.field9 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct12(::apache::thrift::detail::argument_wrapper<1, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct12(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field1 = arg.move();
      __isset.field1 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct12(::apache::thrift::detail::argument_wrapper<2, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct12(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field2 = arg.move();
      __isset.field2 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct12(::apache::thrift::detail::argument_wrapper<3, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct12(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field3 = arg.move();
      __isset.field3 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct12(::apache::thrift::detail::argument_wrapper<4, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct12(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field4 = arg.move();
      __isset.field4 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct12(::apache::thrift::detail::argument_wrapper<5, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct12(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field5 = arg.move();
      __isset.field5 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct12(::apache::thrift::detail::argument_wrapper<6, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct12(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field6 = arg.move();
      __isset.field6 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct12(::apache::thrift::detail::argument_wrapper<7, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct12(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field7 = arg.move();
      __isset.field7 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct12(::apache::thrift::detail::argument_wrapper<8, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct12(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field8 = arg.move();
      __isset.field8 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct12(::apache::thrift::detail::argument_wrapper<9, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct12(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field9 = arg.move();
      __isset.field9 = true;
    }
  
    Struct12(Struct12&&) = default;
  
    Struct12(const Struct12&) = default;
  
    Struct12& operator=(Struct12&&) = default;
  
    Struct12& operator=(const Struct12&) = default;
    void __clear();
  
    virtual ~Struct12() {}
  
    std::vector<int16_t> field1;
    std::map<int64_t, std::vector<std::string>> field2;
    int8_t field3;
    int32_t field4;
    std::vector<int16_t> field5;
    std::set<float> field6;
    std::map<float, std::map<std::string, int8_t>> field7;
    int8_t field8;
    std::set<std::map<bool, std::string>> field9;
  
    struct __isset {
      void __clear() {
        field1 = false;
        field2 = false;
        field3 = false;
        field4 = false;
        field5 = false;
        field6 = false;
        field7 = false;
        field8 = false;
        field9 = false;
      }
  
      bool field1 = false;
      bool field2 = false;
      bool field3 = false;
      bool field4 = false;
      bool field5 = false;
      bool field6 = false;
      bool field7 = false;
      bool field8 = false;
      bool field9 = false;
    } __isset;
    bool operator==(const Struct12& rhs) const;
  
    bool operator < (const Struct12& rhs) const {
      if (!(field1 == rhs.field1)) {
        return field1 < rhs.field1;
      }
      if (!(field2 == rhs.field2)) {
        return field2 < rhs.field2;
      }
      if (!(field3 == rhs.field3)) {
        return field3 < rhs.field3;
      }
      if (!(field4 == rhs.field4)) {
        return field4 < rhs.field4;
      }
      if (!(field5 == rhs.field5)) {
        return field5 < rhs.field5;
      }
      if (!(field6 == rhs.field6)) {
        return field6 < rhs.field6;
      }
      if (!(field7 == rhs.field7)) {
        return field7 < rhs.field7;
      }
      if (!(field8 == rhs.field8)) {
        return field8 < rhs.field8;
      }
      if (!(field9 == rhs.field9)) {
        return field9 < rhs.field9;
      }
      (void)rhs;
      return false;
    }
    const std::vector<int16_t>& get_field1() const&;
    std::vector<int16_t> get_field1() &&;
  
    template <typename T_Struct12_field1_struct_setter>
    std::vector<int16_t>& set_field1(T_Struct12_field1_struct_setter&& field1_) {
      field1 = std::forward<T_Struct12_field1_struct_setter>(field1_);
      __isset.field1 = true;
      return field1;
    }
    const std::map<int64_t, std::vector<std::string>>& get_field2() const&;
    std::map<int64_t, std::vector<std::string>> get_field2() &&;
  
    template <typename T_Struct12_field2_struct_setter>
    std::map<int64_t, std::vector<std::string>>& set_field2(T_Struct12_field2_struct_setter&& field2_) {
      field2 = std::forward<T_Struct12_field2_struct_setter>(field2_);
      __isset.field2 = true;
      return field2;
    }
  
    int8_t get_field3() const {
      return field3;
    }
  
    int8_t& set_field3(int8_t field3_) {
      field3 = field3_;
      __isset.field3 = true;
      return field3;
    }
  
    int32_t get_field4() const {
      return field4;
    }
  
    int32_t& set_field4(int32_t field4_) {
      field4 = field4_;
      __isset.field4 = true;
      return field4;
    }
    const std::vector<int16_t>& get_field5() const&;
    std::vector<int16_t> get_field5() &&;
  
    template <typename T_Struct12_field5_struct_setter>
    std::vector<int16_t>& set_field5(T_Struct12_field5_struct_setter&& field5_) {
      field5 = std::forward<T_Struct12_field5_struct_setter>(field5_);
      __isset.field5 = true;
      return field5;
    }
    const std::set<float>& get_field6() const&;
    std::set<float> get_field6() &&;
  
    template <typename T_Struct12_field6_struct_setter>
    std::set<float>& set_field6(T_Struct12_field6_struct_setter&& field6_) {
      field6 = std::forward<T_Struct12_field6_struct_setter>(field6_);
      __isset.field6 = true;
      return field6;
    }
    const std::map<float, std::map<std::string, int8_t>>& get_field7() const&;
    std::map<float, std::map<std::string, int8_t>> get_field7() &&;
  
    template <typename T_Struct12_field7_struct_setter>
    std::map<float, std::map<std::string, int8_t>>& set_field7(T_Struct12_field7_struct_setter&& field7_) {
      field7 = std::forward<T_Struct12_field7_struct_setter>(field7_);
      __isset.field7 = true;
      return field7;
    }
  
    int8_t get_field8() const {
      return field8;
    }
  
    int8_t& set_field8(int8_t field8_) {
      field8 = field8_;
      __isset.field8 = true;
      return field8;
    }
    const std::set<std::map<bool, std::string>>& get_field9() const&;
    std::set<std::map<bool, std::string>> get_field9() &&;
  
    template <typename T_Struct12_field9_struct_setter>
    std::set<std::map<bool, std::string>>& set_field9(T_Struct12_field9_struct_setter&& field9_) {
      field9 = std::forward<T_Struct12_field9_struct_setter>(field9_);
      __isset.field9 = true;
      return field9;
    }
  
    template <class Protocol_>
    uint32_t 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:
    static void translateFieldName(FOLLY_MAYBE_UNUSED folly::StringPiece _fname, FOLLY_MAYBE_UNUSED int16_t& fid, FOLLY_MAYBE_UNUSED apache::thrift::protocol::TType& _ftype);
  };
  
  void swap(Struct12& a, Struct12& b);
  extern template uint32_t Struct12::read<>(apache::thrift::BinaryProtocolReader*);
  extern template uint32_t Struct12::write<>(apache::thrift::BinaryProtocolWriter*) const;
  extern template uint32_t Struct12::serializedSize<>(apache::thrift::BinaryProtocolWriter const*) const;
  extern template uint32_t Struct12::serializedSizeZC<>(apache::thrift::BinaryProtocolWriter const*) const;
  extern template uint32_t Struct12::read<>(apache::thrift::CompactProtocolReader*);
  extern template uint32_t Struct12::write<>(apache::thrift::CompactProtocolWriter*) const;
  extern template uint32_t Struct12::serializedSize<>(apache::thrift::CompactProtocolWriter const*) const;
  extern template uint32_t Struct12::serializedSizeZC<>(apache::thrift::CompactProtocolWriter const*) const;
  
  }} // example::thrift32
  namespace apache { namespace thrift {
  
  template <> inline void Cpp2Ops< ::example::thrift32::Struct12>::clear( ::example::thrift32::Struct12* obj) {
    return obj->__clear();
  }
  
  template <> inline constexpr apache::thrift::protocol::TType Cpp2Ops< ::example::thrift32::Struct12>::thriftType() {
    return apache::thrift::protocol::T_STRUCT;
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct12>::write(Protocol* proto,  ::example::thrift32::Struct12 const* obj) {
    return obj->write(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct12>::read(Protocol* proto,  ::example::thrift32::Struct12* obj) {
    return obj->read(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct12>::serializedSize(Protocol const* proto,  ::example::thrift32::Struct12 const* obj) {
    return obj->serializedSize(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct12>::serializedSizeZC(Protocol const* proto,  ::example::thrift32::Struct12 const* obj) {
    return obj->serializedSizeZC(proto);
  }
  
  }} // apache::thrift
  namespace example { namespace thrift32 {
  
  class Struct13 : private apache::thrift::detail::st::ComparisonOperators<Struct13> {
   public:
  
    Struct13() :
        field3(0),
        field4(0),
        field5(0),
        field6(0),
        field9(0),
        field12(0),
        field14(0),
        field15(0),
        field20(0),
        field24(0),
        field27(0),
        field28(0),
        field31(0),
        field33(0),
        field34(0) {}
    // FragileConstructor for use in initialization lists only
  
    Struct13(apache::thrift::FragileConstructor, std::map<int64_t, int16_t> field1__arg, std::vector<int64_t> field2__arg, double field3__arg, float field4__arg, float field5__arg, int16_t field6__arg, std::map<int8_t, std::string> field7__arg,  ::example::thrift32::Struct0 field8__arg, int16_t field9__arg, std::string field10__arg, std::map<bool, int32_t> field11__arg, int16_t field12__arg, std::string field13__arg, double field14__arg, int8_t field15__arg, std::set<int8_t> field16__arg, std::vector<std::string> field17__arg, std::string field18__arg, std::map<float, int16_t> field19__arg, float field20__arg, std::vector<std::set<int16_t>> field21__arg, std::vector<float> field22__arg, std::string field23__arg, int64_t field24__arg,  ::example::thrift32::Struct2 field25__arg, std::set<int32_t> field26__arg, float field27__arg, int32_t field28__arg,  ::example::thrift32::Struct3 field29__arg, std::vector<int8_t> field30__arg, int16_t field31__arg, std::map<std::set< ::example::thrift32::Struct0>, int16_t> field32__arg, double field33__arg, int64_t field34__arg, std::set<int64_t> field35__arg) :
        field1(std::move(field1__arg)),
        field2(std::move(field2__arg)),
        field3(std::move(field3__arg)),
        field4(std::move(field4__arg)),
        field5(std::move(field5__arg)),
        field6(std::move(field6__arg)),
        field7(std::move(field7__arg)),
        field8(std::move(field8__arg)),
        field9(std::move(field9__arg)),
        field10(std::move(field10__arg)),
        field11(std::move(field11__arg)),
        field12(std::move(field12__arg)),
        field13(std::move(field13__arg)),
        field14(std::move(field14__arg)),
        field15(std::move(field15__arg)),
        field16(std::move(field16__arg)),
        field17(std::move(field17__arg)),
        field18(std::move(field18__arg)),
        field19(std::move(field19__arg)),
        field20(std::move(field20__arg)),
        field21(std::move(field21__arg)),
        field22(std::move(field22__arg)),
        field23(std::move(field23__arg)),
        field24(std::move(field24__arg)),
        field25(std::move(field25__arg)),
        field26(std::move(field26__arg)),
        field27(std::move(field27__arg)),
        field28(std::move(field28__arg)),
        field29(std::move(field29__arg)),
        field30(std::move(field30__arg)),
        field31(std::move(field31__arg)),
        field32(std::move(field32__arg)),
        field33(std::move(field33__arg)),
        field34(std::move(field34__arg)),
        field35(std::move(field35__arg)) {
      __isset.field1 = true;
      __isset.field2 = true;
      __isset.field3 = true;
      __isset.field4 = true;
      __isset.field5 = true;
      __isset.field6 = true;
      __isset.field7 = true;
      __isset.field8 = true;
      __isset.field9 = true;
      __isset.field10 = true;
      __isset.field11 = true;
      __isset.field12 = true;
      __isset.field13 = true;
      __isset.field14 = true;
      __isset.field15 = true;
      __isset.field16 = true;
      __isset.field17 = true;
      __isset.field18 = true;
      __isset.field19 = true;
      __isset.field20 = true;
      __isset.field21 = true;
      __isset.field22 = true;
      __isset.field23 = true;
      __isset.field24 = true;
      __isset.field25 = true;
      __isset.field26 = true;
      __isset.field27 = true;
      __isset.field28 = true;
      __isset.field29 = true;
      __isset.field30 = true;
      __isset.field31 = true;
      __isset.field32 = true;
      __isset.field33 = true;
      __isset.field34 = true;
      __isset.field35 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct13(::apache::thrift::detail::argument_wrapper<1, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct13(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field1 = arg.move();
      __isset.field1 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct13(::apache::thrift::detail::argument_wrapper<2, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct13(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field2 = arg.move();
      __isset.field2 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct13(::apache::thrift::detail::argument_wrapper<3, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct13(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field3 = arg.move();
      __isset.field3 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct13(::apache::thrift::detail::argument_wrapper<4, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct13(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field4 = arg.move();
      __isset.field4 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct13(::apache::thrift::detail::argument_wrapper<5, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct13(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field5 = arg.move();
      __isset.field5 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct13(::apache::thrift::detail::argument_wrapper<6, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct13(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field6 = arg.move();
      __isset.field6 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct13(::apache::thrift::detail::argument_wrapper<7, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct13(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field7 = arg.move();
      __isset.field7 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct13(::apache::thrift::detail::argument_wrapper<8, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct13(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field8 = arg.move();
      __isset.field8 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct13(::apache::thrift::detail::argument_wrapper<9, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct13(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field9 = arg.move();
      __isset.field9 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct13(::apache::thrift::detail::argument_wrapper<10, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct13(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field10 = arg.move();
      __isset.field10 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct13(::apache::thrift::detail::argument_wrapper<11, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct13(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field11 = arg.move();
      __isset.field11 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct13(::apache::thrift::detail::argument_wrapper<12, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct13(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field12 = arg.move();
      __isset.field12 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct13(::apache::thrift::detail::argument_wrapper<13, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct13(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field13 = arg.move();
      __isset.field13 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct13(::apache::thrift::detail::argument_wrapper<14, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct13(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field14 = arg.move();
      __isset.field14 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct13(::apache::thrift::detail::argument_wrapper<15, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct13(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field15 = arg.move();
      __isset.field15 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct13(::apache::thrift::detail::argument_wrapper<16, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct13(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field16 = arg.move();
      __isset.field16 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct13(::apache::thrift::detail::argument_wrapper<17, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct13(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field17 = arg.move();
      __isset.field17 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct13(::apache::thrift::detail::argument_wrapper<18, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct13(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field18 = arg.move();
      __isset.field18 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct13(::apache::thrift::detail::argument_wrapper<19, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct13(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field19 = arg.move();
      __isset.field19 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct13(::apache::thrift::detail::argument_wrapper<20, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct13(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field20 = arg.move();
      __isset.field20 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct13(::apache::thrift::detail::argument_wrapper<21, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct13(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field21 = arg.move();
      __isset.field21 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct13(::apache::thrift::detail::argument_wrapper<22, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct13(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field22 = arg.move();
      __isset.field22 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct13(::apache::thrift::detail::argument_wrapper<23, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct13(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field23 = arg.move();
      __isset.field23 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct13(::apache::thrift::detail::argument_wrapper<24, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct13(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field24 = arg.move();
      __isset.field24 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct13(::apache::thrift::detail::argument_wrapper<25, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct13(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field25 = arg.move();
      __isset.field25 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct13(::apache::thrift::detail::argument_wrapper<26, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct13(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field26 = arg.move();
      __isset.field26 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct13(::apache::thrift::detail::argument_wrapper<27, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct13(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field27 = arg.move();
      __isset.field27 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct13(::apache::thrift::detail::argument_wrapper<28, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct13(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field28 = arg.move();
      __isset.field28 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct13(::apache::thrift::detail::argument_wrapper<29, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct13(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field29 = arg.move();
      __isset.field29 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct13(::apache::thrift::detail::argument_wrapper<30, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct13(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field30 = arg.move();
      __isset.field30 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct13(::apache::thrift::detail::argument_wrapper<31, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct13(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field31 = arg.move();
      __isset.field31 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct13(::apache::thrift::detail::argument_wrapper<32, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct13(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field32 = arg.move();
      __isset.field32 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct13(::apache::thrift::detail::argument_wrapper<33, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct13(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field33 = arg.move();
      __isset.field33 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct13(::apache::thrift::detail::argument_wrapper<34, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct13(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field34 = arg.move();
      __isset.field34 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct13(::apache::thrift::detail::argument_wrapper<35, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct13(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field35 = arg.move();
      __isset.field35 = true;
    }
  
    Struct13(Struct13&&) = default;
  
    Struct13(const Struct13&) = default;
  
    Struct13& operator=(Struct13&&) = default;
  
    Struct13& operator=(const Struct13&) = default;
    void __clear();
  
    virtual ~Struct13() {}
  
    std::map<int64_t, int16_t> field1;
    std::vector<int64_t> field2;
    double field3;
    float field4;
    float field5;
    int16_t field6;
    std::map<int8_t, std::string> field7;
     ::example::thrift32::Struct0 field8;
    int16_t field9;
    std::string field10;
    std::map<bool, int32_t> field11;
    int16_t field12;
    std::string field13;
    double field14;
    int8_t field15;
    std::set<int8_t> field16;
    std::vector<std::string> field17;
    std::string field18;
    std::map<float, int16_t> field19;
    float field20;
    std::vector<std::set<int16_t>> field21;
    std::vector<float> field22;
    std::string field23;
    int64_t field24;
     ::example::thrift32::Struct2 field25;
    std::set<int32_t> field26;
    float field27;
    int32_t field28;
     ::example::thrift32::Struct3 field29;
    std::vector<int8_t> field30;
    int16_t field31;
    std::map<std::set< ::example::thrift32::Struct0>, int16_t> field32;
    double field33;
    int64_t field34;
    std::set<int64_t> field35;
  
    struct __isset {
      void __clear() {
        field1 = false;
        field2 = false;
        field3 = false;
        field4 = false;
        field5 = false;
        field6 = false;
        field7 = false;
        field8 = false;
        field9 = false;
        field10 = false;
        field11 = false;
        field12 = false;
        field13 = false;
        field14 = false;
        field15 = false;
        field16 = false;
        field17 = false;
        field18 = false;
        field19 = false;
        field20 = false;
        field21 = false;
        field22 = false;
        field23 = false;
        field24 = false;
        field25 = false;
        field26 = false;
        field27 = false;
        field28 = false;
        field29 = false;
        field30 = false;
        field31 = false;
        field32 = false;
        field33 = false;
        field34 = false;
        field35 = false;
      }
  
      bool field1 = false;
      bool field2 = false;
      bool field3 = false;
      bool field4 = false;
      bool field5 = false;
      bool field6 = false;
      bool field7 = false;
      bool field8 = false;
      bool field9 = false;
      bool field10 = false;
      bool field11 = false;
      bool field12 = false;
      bool field13 = false;
      bool field14 = false;
      bool field15 = false;
      bool field16 = false;
      bool field17 = false;
      bool field18 = false;
      bool field19 = false;
      bool field20 = false;
      bool field21 = false;
      bool field22 = false;
      bool field23 = false;
      bool field24 = false;
      bool field25 = false;
      bool field26 = false;
      bool field27 = false;
      bool field28 = false;
      bool field29 = false;
      bool field30 = false;
      bool field31 = false;
      bool field32 = false;
      bool field33 = false;
      bool field34 = false;
      bool field35 = false;
    } __isset;
    bool operator==(const Struct13& rhs) const;
  
    bool operator < (const Struct13& rhs) const {
      if (!(field1 == rhs.field1)) {
        return field1 < rhs.field1;
      }
      if (!(field2 == rhs.field2)) {
        return field2 < rhs.field2;
      }
      if (!(field3 == rhs.field3)) {
        return field3 < rhs.field3;
      }
      if (!(field4 == rhs.field4)) {
        return field4 < rhs.field4;
      }
      if (!(field5 == rhs.field5)) {
        return field5 < rhs.field5;
      }
      if (!(field6 == rhs.field6)) {
        return field6 < rhs.field6;
      }
      if (!(field7 == rhs.field7)) {
        return field7 < rhs.field7;
      }
      if (!(field8 == rhs.field8)) {
        return field8 < rhs.field8;
      }
      if (!(field9 == rhs.field9)) {
        return field9 < rhs.field9;
      }
      if (!(field10 == rhs.field10)) {
        return field10 < rhs.field10;
      }
      if (!(field11 == rhs.field11)) {
        return field11 < rhs.field11;
      }
      if (!(field12 == rhs.field12)) {
        return field12 < rhs.field12;
      }
      if (!(field13 == rhs.field13)) {
        return field13 < rhs.field13;
      }
      if (!(field14 == rhs.field14)) {
        return field14 < rhs.field14;
      }
      if (!(field15 == rhs.field15)) {
        return field15 < rhs.field15;
      }
      if (!(field16 == rhs.field16)) {
        return field16 < rhs.field16;
      }
      if (!(field17 == rhs.field17)) {
        return field17 < rhs.field17;
      }
      if (!(field18 == rhs.field18)) {
        return field18 < rhs.field18;
      }
      if (!(field19 == rhs.field19)) {
        return field19 < rhs.field19;
      }
      if (!(field20 == rhs.field20)) {
        return field20 < rhs.field20;
      }
      if (!(field21 == rhs.field21)) {
        return field21 < rhs.field21;
      }
      if (!(field22 == rhs.field22)) {
        return field22 < rhs.field22;
      }
      if (!(field23 == rhs.field23)) {
        return field23 < rhs.field23;
      }
      if (!(field24 == rhs.field24)) {
        return field24 < rhs.field24;
      }
      if (!(field25 == rhs.field25)) {
        return field25 < rhs.field25;
      }
      if (!(field26 == rhs.field26)) {
        return field26 < rhs.field26;
      }
      if (!(field27 == rhs.field27)) {
        return field27 < rhs.field27;
      }
      if (!(field28 == rhs.field28)) {
        return field28 < rhs.field28;
      }
      if (!(field29 == rhs.field29)) {
        return field29 < rhs.field29;
      }
      if (!(field30 == rhs.field30)) {
        return field30 < rhs.field30;
      }
      if (!(field31 == rhs.field31)) {
        return field31 < rhs.field31;
      }
      if (!(field32 == rhs.field32)) {
        return field32 < rhs.field32;
      }
      if (!(field33 == rhs.field33)) {
        return field33 < rhs.field33;
      }
      if (!(field34 == rhs.field34)) {
        return field34 < rhs.field34;
      }
      if (!(field35 == rhs.field35)) {
        return field35 < rhs.field35;
      }
      (void)rhs;
      return false;
    }
    const std::map<int64_t, int16_t>& get_field1() const&;
    std::map<int64_t, int16_t> get_field1() &&;
  
    template <typename T_Struct13_field1_struct_setter>
    std::map<int64_t, int16_t>& set_field1(T_Struct13_field1_struct_setter&& field1_) {
      field1 = std::forward<T_Struct13_field1_struct_setter>(field1_);
      __isset.field1 = true;
      return field1;
    }
    const std::vector<int64_t>& get_field2() const&;
    std::vector<int64_t> get_field2() &&;
  
    template <typename T_Struct13_field2_struct_setter>
    std::vector<int64_t>& set_field2(T_Struct13_field2_struct_setter&& field2_) {
      field2 = std::forward<T_Struct13_field2_struct_setter>(field2_);
      __isset.field2 = true;
      return field2;
    }
  
    double get_field3() const {
      return field3;
    }
  
    double& set_field3(double field3_) {
      field3 = field3_;
      __isset.field3 = true;
      return field3;
    }
  
    float get_field4() const {
      return field4;
    }
  
    float& set_field4(float field4_) {
      field4 = field4_;
      __isset.field4 = true;
      return field4;
    }
  
    float get_field5() const {
      return field5;
    }
  
    float& set_field5(float field5_) {
      field5 = field5_;
      __isset.field5 = true;
      return field5;
    }
  
    int16_t get_field6() const {
      return field6;
    }
  
    int16_t& set_field6(int16_t field6_) {
      field6 = field6_;
      __isset.field6 = true;
      return field6;
    }
    const std::map<int8_t, std::string>& get_field7() const&;
    std::map<int8_t, std::string> get_field7() &&;
  
    template <typename T_Struct13_field7_struct_setter>
    std::map<int8_t, std::string>& set_field7(T_Struct13_field7_struct_setter&& field7_) {
      field7 = std::forward<T_Struct13_field7_struct_setter>(field7_);
      __isset.field7 = true;
      return field7;
    }
    const  ::example::thrift32::Struct0& get_field8() const&;
     ::example::thrift32::Struct0 get_field8() &&;
  
    template <typename T_Struct13_field8_struct_setter>
     ::example::thrift32::Struct0& set_field8(T_Struct13_field8_struct_setter&& field8_) {
      field8 = std::forward<T_Struct13_field8_struct_setter>(field8_);
      __isset.field8 = true;
      return field8;
    }
  
    int16_t get_field9() const {
      return field9;
    }
  
    int16_t& set_field9(int16_t field9_) {
      field9 = field9_;
      __isset.field9 = true;
      return field9;
    }
  
    const std::string& get_field10() const& {
      return field10;
    }
  
    std::string get_field10() && {
      return std::move(field10);
    }
  
    template <typename T_Struct13_field10_struct_setter>
    std::string& set_field10(T_Struct13_field10_struct_setter&& field10_) {
      field10 = std::forward<T_Struct13_field10_struct_setter>(field10_);
      __isset.field10 = true;
      return field10;
    }
    const std::map<bool, int32_t>& get_field11() const&;
    std::map<bool, int32_t> get_field11() &&;
  
    template <typename T_Struct13_field11_struct_setter>
    std::map<bool, int32_t>& set_field11(T_Struct13_field11_struct_setter&& field11_) {
      field11 = std::forward<T_Struct13_field11_struct_setter>(field11_);
      __isset.field11 = true;
      return field11;
    }
  
    int16_t get_field12() const {
      return field12;
    }
  
    int16_t& set_field12(int16_t field12_) {
      field12 = field12_;
      __isset.field12 = true;
      return field12;
    }
  
    const std::string& get_field13() const& {
      return field13;
    }
  
    std::string get_field13() && {
      return std::move(field13);
    }
  
    template <typename T_Struct13_field13_struct_setter>
    std::string& set_field13(T_Struct13_field13_struct_setter&& field13_) {
      field13 = std::forward<T_Struct13_field13_struct_setter>(field13_);
      __isset.field13 = true;
      return field13;
    }
  
    double get_field14() const {
      return field14;
    }
  
    double& set_field14(double field14_) {
      field14 = field14_;
      __isset.field14 = true;
      return field14;
    }
  
    int8_t get_field15() const {
      return field15;
    }
  
    int8_t& set_field15(int8_t field15_) {
      field15 = field15_;
      __isset.field15 = true;
      return field15;
    }
    const std::set<int8_t>& get_field16() const&;
    std::set<int8_t> get_field16() &&;
  
    template <typename T_Struct13_field16_struct_setter>
    std::set<int8_t>& set_field16(T_Struct13_field16_struct_setter&& field16_) {
      field16 = std::forward<T_Struct13_field16_struct_setter>(field16_);
      __isset.field16 = true;
      return field16;
    }
    const std::vector<std::string>& get_field17() const&;
    std::vector<std::string> get_field17() &&;
  
    template <typename T_Struct13_field17_struct_setter>
    std::vector<std::string>& set_field17(T_Struct13_field17_struct_setter&& field17_) {
      field17 = std::forward<T_Struct13_field17_struct_setter>(field17_);
      __isset.field17 = true;
      return field17;
    }
  
    const std::string& get_field18() const& {
      return field18;
    }
  
    std::string get_field18() && {
      return std::move(field18);
    }
  
    template <typename T_Struct13_field18_struct_setter>
    std::string& set_field18(T_Struct13_field18_struct_setter&& field18_) {
      field18 = std::forward<T_Struct13_field18_struct_setter>(field18_);
      __isset.field18 = true;
      return field18;
    }
    const std::map<float, int16_t>& get_field19() const&;
    std::map<float, int16_t> get_field19() &&;
  
    template <typename T_Struct13_field19_struct_setter>
    std::map<float, int16_t>& set_field19(T_Struct13_field19_struct_setter&& field19_) {
      field19 = std::forward<T_Struct13_field19_struct_setter>(field19_);
      __isset.field19 = true;
      return field19;
    }
  
    float get_field20() const {
      return field20;
    }
  
    float& set_field20(float field20_) {
      field20 = field20_;
      __isset.field20 = true;
      return field20;
    }
    const std::vector<std::set<int16_t>>& get_field21() const&;
    std::vector<std::set<int16_t>> get_field21() &&;
  
    template <typename T_Struct13_field21_struct_setter>
    std::vector<std::set<int16_t>>& set_field21(T_Struct13_field21_struct_setter&& field21_) {
      field21 = std::forward<T_Struct13_field21_struct_setter>(field21_);
      __isset.field21 = true;
      return field21;
    }
    const std::vector<float>& get_field22() const&;
    std::vector<float> get_field22() &&;
  
    template <typename T_Struct13_field22_struct_setter>
    std::vector<float>& set_field22(T_Struct13_field22_struct_setter&& field22_) {
      field22 = std::forward<T_Struct13_field22_struct_setter>(field22_);
      __isset.field22 = true;
      return field22;
    }
  
    const std::string& get_field23() const& {
      return field23;
    }
  
    std::string get_field23() && {
      return std::move(field23);
    }
  
    template <typename T_Struct13_field23_struct_setter>
    std::string& set_field23(T_Struct13_field23_struct_setter&& field23_) {
      field23 = std::forward<T_Struct13_field23_struct_setter>(field23_);
      __isset.field23 = true;
      return field23;
    }
  
    int64_t get_field24() const {
      return field24;
    }
  
    int64_t& set_field24(int64_t field24_) {
      field24 = field24_;
      __isset.field24 = true;
      return field24;
    }
    const  ::example::thrift32::Struct2& get_field25() const&;
     ::example::thrift32::Struct2 get_field25() &&;
  
    template <typename T_Struct13_field25_struct_setter>
     ::example::thrift32::Struct2& set_field25(T_Struct13_field25_struct_setter&& field25_) {
      field25 = std::forward<T_Struct13_field25_struct_setter>(field25_);
      __isset.field25 = true;
      return field25;
    }
    const std::set<int32_t>& get_field26() const&;
    std::set<int32_t> get_field26() &&;
  
    template <typename T_Struct13_field26_struct_setter>
    std::set<int32_t>& set_field26(T_Struct13_field26_struct_setter&& field26_) {
      field26 = std::forward<T_Struct13_field26_struct_setter>(field26_);
      __isset.field26 = true;
      return field26;
    }
  
    float get_field27() const {
      return field27;
    }
  
    float& set_field27(float field27_) {
      field27 = field27_;
      __isset.field27 = true;
      return field27;
    }
  
    int32_t get_field28() const {
      return field28;
    }
  
    int32_t& set_field28(int32_t field28_) {
      field28 = field28_;
      __isset.field28 = true;
      return field28;
    }
    const  ::example::thrift32::Struct3& get_field29() const&;
     ::example::thrift32::Struct3 get_field29() &&;
  
    template <typename T_Struct13_field29_struct_setter>
     ::example::thrift32::Struct3& set_field29(T_Struct13_field29_struct_setter&& field29_) {
      field29 = std::forward<T_Struct13_field29_struct_setter>(field29_);
      __isset.field29 = true;
      return field29;
    }
    const std::vector<int8_t>& get_field30() const&;
    std::vector<int8_t> get_field30() &&;
  
    template <typename T_Struct13_field30_struct_setter>
    std::vector<int8_t>& set_field30(T_Struct13_field30_struct_setter&& field30_) {
      field30 = std::forward<T_Struct13_field30_struct_setter>(field30_);
      __isset.field30 = true;
      return field30;
    }
  
    int16_t get_field31() const {
      return field31;
    }
  
    int16_t& set_field31(int16_t field31_) {
      field31 = field31_;
      __isset.field31 = true;
      return field31;
    }
    const std::map<std::set< ::example::thrift32::Struct0>, int16_t>& get_field32() const&;
    std::map<std::set< ::example::thrift32::Struct0>, int16_t> get_field32() &&;
  
    template <typename T_Struct13_field32_struct_setter>
    std::map<std::set< ::example::thrift32::Struct0>, int16_t>& set_field32(T_Struct13_field32_struct_setter&& field32_) {
      field32 = std::forward<T_Struct13_field32_struct_setter>(field32_);
      __isset.field32 = true;
      return field32;
    }
  
    double get_field33() const {
      return field33;
    }
  
    double& set_field33(double field33_) {
      field33 = field33_;
      __isset.field33 = true;
      return field33;
    }
  
    int64_t get_field34() const {
      return field34;
    }
  
    int64_t& set_field34(int64_t field34_) {
      field34 = field34_;
      __isset.field34 = true;
      return field34;
    }
    const std::set<int64_t>& get_field35() const&;
    std::set<int64_t> get_field35() &&;
  
    template <typename T_Struct13_field35_struct_setter>
    std::set<int64_t>& set_field35(T_Struct13_field35_struct_setter&& field35_) {
      field35 = std::forward<T_Struct13_field35_struct_setter>(field35_);
      __isset.field35 = true;
      return field35;
    }
  
    template <class Protocol_>
    uint32_t 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:
    static void translateFieldName(FOLLY_MAYBE_UNUSED folly::StringPiece _fname, FOLLY_MAYBE_UNUSED int16_t& fid, FOLLY_MAYBE_UNUSED apache::thrift::protocol::TType& _ftype);
  };
  
  void swap(Struct13& a, Struct13& b);
  extern template uint32_t Struct13::read<>(apache::thrift::BinaryProtocolReader*);
  extern template uint32_t Struct13::write<>(apache::thrift::BinaryProtocolWriter*) const;
  extern template uint32_t Struct13::serializedSize<>(apache::thrift::BinaryProtocolWriter const*) const;
  extern template uint32_t Struct13::serializedSizeZC<>(apache::thrift::BinaryProtocolWriter const*) const;
  extern template uint32_t Struct13::read<>(apache::thrift::CompactProtocolReader*);
  extern template uint32_t Struct13::write<>(apache::thrift::CompactProtocolWriter*) const;
  extern template uint32_t Struct13::serializedSize<>(apache::thrift::CompactProtocolWriter const*) const;
  extern template uint32_t Struct13::serializedSizeZC<>(apache::thrift::CompactProtocolWriter const*) const;
  
  }} // example::thrift32
  namespace apache { namespace thrift {
  
  template <> inline void Cpp2Ops< ::example::thrift32::Struct13>::clear( ::example::thrift32::Struct13* obj) {
    return obj->__clear();
  }
  
  template <> inline constexpr apache::thrift::protocol::TType Cpp2Ops< ::example::thrift32::Struct13>::thriftType() {
    return apache::thrift::protocol::T_STRUCT;
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct13>::write(Protocol* proto,  ::example::thrift32::Struct13 const* obj) {
    return obj->write(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct13>::read(Protocol* proto,  ::example::thrift32::Struct13* obj) {
    return obj->read(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct13>::serializedSize(Protocol const* proto,  ::example::thrift32::Struct13 const* obj) {
    return obj->serializedSize(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct13>::serializedSizeZC(Protocol const* proto,  ::example::thrift32::Struct13 const* obj) {
    return obj->serializedSizeZC(proto);
  }
  
  }} // apache::thrift
  namespace example { namespace thrift32 {
  
  class Struct14 : private apache::thrift::detail::st::ComparisonOperators<Struct14> {
   public:
  
    Struct14() :
        field2(0),
        field6(0),
        field7(0) {}
    // FragileConstructor for use in initialization lists only
  
    Struct14(apache::thrift::FragileConstructor, std::vector<bool> field1__arg, bool field2__arg, std::string field3__arg,  ::example::thrift32::Struct8 field4__arg,  ::example::thrift32::Struct1 field5__arg, double field6__arg, int8_t field7__arg, std::string field8__arg, std::map<float, float> field9__arg, std::map<int64_t, std::string> field10__arg,  ::example::thrift32::Struct4 field11__arg,  ::example::thrift32::Struct7 field12__arg, std::vector<int8_t> field13__arg, std::set<std::set<std::string>> field14__arg, std::set<bool> field15__arg, std::vector<std::set<std::string>> field16__arg, std::vector<double> field17__arg, std::map<std::vector<float>, int16_t> field18__arg) :
        field1(std::move(field1__arg)),
        field2(std::move(field2__arg)),
        field3(std::move(field3__arg)),
        field4(std::move(field4__arg)),
        field5(std::move(field5__arg)),
        field6(std::move(field6__arg)),
        field7(std::move(field7__arg)),
        field8(std::move(field8__arg)),
        field9(std::move(field9__arg)),
        field10(std::move(field10__arg)),
        field11(std::move(field11__arg)),
        field12(std::move(field12__arg)),
        field13(std::move(field13__arg)),
        field14(std::move(field14__arg)),
        field15(std::move(field15__arg)),
        field16(std::move(field16__arg)),
        field17(std::move(field17__arg)),
        field18(std::move(field18__arg)) {
      __isset.field1 = true;
      __isset.field2 = true;
      __isset.field3 = true;
      __isset.field4 = true;
      __isset.field5 = true;
      __isset.field6 = true;
      __isset.field7 = true;
      __isset.field8 = true;
      __isset.field9 = true;
      __isset.field10 = true;
      __isset.field11 = true;
      __isset.field12 = true;
      __isset.field13 = true;
      __isset.field14 = true;
      __isset.field15 = true;
      __isset.field16 = true;
      __isset.field17 = true;
      __isset.field18 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct14(::apache::thrift::detail::argument_wrapper<1, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct14(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field1 = arg.move();
      __isset.field1 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct14(::apache::thrift::detail::argument_wrapper<2, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct14(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field2 = arg.move();
      __isset.field2 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct14(::apache::thrift::detail::argument_wrapper<3, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct14(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field3 = arg.move();
      __isset.field3 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct14(::apache::thrift::detail::argument_wrapper<4, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct14(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field4 = arg.move();
      __isset.field4 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct14(::apache::thrift::detail::argument_wrapper<5, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct14(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field5 = arg.move();
      __isset.field5 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct14(::apache::thrift::detail::argument_wrapper<6, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct14(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field6 = arg.move();
      __isset.field6 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct14(::apache::thrift::detail::argument_wrapper<7, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct14(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field7 = arg.move();
      __isset.field7 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct14(::apache::thrift::detail::argument_wrapper<8, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct14(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field8 = arg.move();
      __isset.field8 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct14(::apache::thrift::detail::argument_wrapper<9, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct14(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field9 = arg.move();
      __isset.field9 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct14(::apache::thrift::detail::argument_wrapper<10, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct14(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field10 = arg.move();
      __isset.field10 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct14(::apache::thrift::detail::argument_wrapper<11, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct14(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field11 = arg.move();
      __isset.field11 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct14(::apache::thrift::detail::argument_wrapper<12, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct14(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field12 = arg.move();
      __isset.field12 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct14(::apache::thrift::detail::argument_wrapper<13, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct14(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field13 = arg.move();
      __isset.field13 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct14(::apache::thrift::detail::argument_wrapper<14, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct14(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field14 = arg.move();
      __isset.field14 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct14(::apache::thrift::detail::argument_wrapper<15, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct14(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field15 = arg.move();
      __isset.field15 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct14(::apache::thrift::detail::argument_wrapper<16, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct14(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field16 = arg.move();
      __isset.field16 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct14(::apache::thrift::detail::argument_wrapper<17, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct14(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field17 = arg.move();
      __isset.field17 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct14(::apache::thrift::detail::argument_wrapper<18, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct14(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field18 = arg.move();
      __isset.field18 = true;
    }
  
    Struct14(Struct14&&) = default;
  
    Struct14(const Struct14&) = default;
  
    Struct14& operator=(Struct14&&) = default;
  
    Struct14& operator=(const Struct14&) = default;
    void __clear();
  
    virtual ~Struct14() {}
  
    std::vector<bool> field1;
    bool field2;
    std::string field3;
     ::example::thrift32::Struct8 field4;
     ::example::thrift32::Struct1 field5;
    double field6;
    int8_t field7;
    std::string field8;
    std::map<float, float> field9;
    std::map<int64_t, std::string> field10;
     ::example::thrift32::Struct4 field11;
     ::example::thrift32::Struct7 field12;
    std::vector<int8_t> field13;
    std::set<std::set<std::string>> field14;
    std::set<bool> field15;
    std::vector<std::set<std::string>> field16;
    std::vector<double> field17;
    std::map<std::vector<float>, int16_t> field18;
  
    struct __isset {
      void __clear() {
        field1 = false;
        field2 = false;
        field3 = false;
        field4 = false;
        field5 = false;
        field6 = false;
        field7 = false;
        field8 = false;
        field9 = false;
        field10 = false;
        field11 = false;
        field12 = false;
        field13 = false;
        field14 = false;
        field15 = false;
        field16 = false;
        field17 = false;
        field18 = false;
      }
  
      bool field1 = false;
      bool field2 = false;
      bool field3 = false;
      bool field4 = false;
      bool field5 = false;
      bool field6 = false;
      bool field7 = false;
      bool field8 = false;
      bool field9 = false;
      bool field10 = false;
      bool field11 = false;
      bool field12 = false;
      bool field13 = false;
      bool field14 = false;
      bool field15 = false;
      bool field16 = false;
      bool field17 = false;
      bool field18 = false;
    } __isset;
    bool operator==(const Struct14& rhs) const;
  
    bool operator < (const Struct14& rhs) const {
      if (!(field1 == rhs.field1)) {
        return field1 < rhs.field1;
      }
      if (!(field2 == rhs.field2)) {
        return field2 < rhs.field2;
      }
      if (!(field3 == rhs.field3)) {
        return field3 < rhs.field3;
      }
      if (!(field4 == rhs.field4)) {
        return field4 < rhs.field4;
      }
      if (!(field5 == rhs.field5)) {
        return field5 < rhs.field5;
      }
      if (!(field6 == rhs.field6)) {
        return field6 < rhs.field6;
      }
      if (!(field7 == rhs.field7)) {
        return field7 < rhs.field7;
      }
      if (!(field8 == rhs.field8)) {
        return field8 < rhs.field8;
      }
      if (!(field9 == rhs.field9)) {
        return field9 < rhs.field9;
      }
      if (!(field10 == rhs.field10)) {
        return field10 < rhs.field10;
      }
      if (!(field11 == rhs.field11)) {
        return field11 < rhs.field11;
      }
      if (!(field12 == rhs.field12)) {
        return field12 < rhs.field12;
      }
      if (!(field13 == rhs.field13)) {
        return field13 < rhs.field13;
      }
      if (!(field14 == rhs.field14)) {
        return field14 < rhs.field14;
      }
      if (!(field15 == rhs.field15)) {
        return field15 < rhs.field15;
      }
      if (!(field16 == rhs.field16)) {
        return field16 < rhs.field16;
      }
      if (!(field17 == rhs.field17)) {
        return field17 < rhs.field17;
      }
      if (!(field18 == rhs.field18)) {
        return field18 < rhs.field18;
      }
      (void)rhs;
      return false;
    }
    const std::vector<bool>& get_field1() const&;
    std::vector<bool> get_field1() &&;
  
    template <typename T_Struct14_field1_struct_setter>
    std::vector<bool>& set_field1(T_Struct14_field1_struct_setter&& field1_) {
      field1 = std::forward<T_Struct14_field1_struct_setter>(field1_);
      __isset.field1 = true;
      return field1;
    }
  
    bool get_field2() const {
      return field2;
    }
  
    bool& set_field2(bool field2_) {
      field2 = field2_;
      __isset.field2 = true;
      return field2;
    }
  
    const std::string& get_field3() const& {
      return field3;
    }
  
    std::string get_field3() && {
      return std::move(field3);
    }
  
    template <typename T_Struct14_field3_struct_setter>
    std::string& set_field3(T_Struct14_field3_struct_setter&& field3_) {
      field3 = std::forward<T_Struct14_field3_struct_setter>(field3_);
      __isset.field3 = true;
      return field3;
    }
    const  ::example::thrift32::Struct8& get_field4() const&;
     ::example::thrift32::Struct8 get_field4() &&;
  
    template <typename T_Struct14_field4_struct_setter>
     ::example::thrift32::Struct8& set_field4(T_Struct14_field4_struct_setter&& field4_) {
      field4 = std::forward<T_Struct14_field4_struct_setter>(field4_);
      __isset.field4 = true;
      return field4;
    }
    const  ::example::thrift32::Struct1& get_field5() const&;
     ::example::thrift32::Struct1 get_field5() &&;
  
    template <typename T_Struct14_field5_struct_setter>
     ::example::thrift32::Struct1& set_field5(T_Struct14_field5_struct_setter&& field5_) {
      field5 = std::forward<T_Struct14_field5_struct_setter>(field5_);
      __isset.field5 = true;
      return field5;
    }
  
    double get_field6() const {
      return field6;
    }
  
    double& set_field6(double field6_) {
      field6 = field6_;
      __isset.field6 = true;
      return field6;
    }
  
    int8_t get_field7() const {
      return field7;
    }
  
    int8_t& set_field7(int8_t field7_) {
      field7 = field7_;
      __isset.field7 = true;
      return field7;
    }
  
    const std::string& get_field8() const& {
      return field8;
    }
  
    std::string get_field8() && {
      return std::move(field8);
    }
  
    template <typename T_Struct14_field8_struct_setter>
    std::string& set_field8(T_Struct14_field8_struct_setter&& field8_) {
      field8 = std::forward<T_Struct14_field8_struct_setter>(field8_);
      __isset.field8 = true;
      return field8;
    }
    const std::map<float, float>& get_field9() const&;
    std::map<float, float> get_field9() &&;
  
    template <typename T_Struct14_field9_struct_setter>
    std::map<float, float>& set_field9(T_Struct14_field9_struct_setter&& field9_) {
      field9 = std::forward<T_Struct14_field9_struct_setter>(field9_);
      __isset.field9 = true;
      return field9;
    }
    const std::map<int64_t, std::string>& get_field10() const&;
    std::map<int64_t, std::string> get_field10() &&;
  
    template <typename T_Struct14_field10_struct_setter>
    std::map<int64_t, std::string>& set_field10(T_Struct14_field10_struct_setter&& field10_) {
      field10 = std::forward<T_Struct14_field10_struct_setter>(field10_);
      __isset.field10 = true;
      return field10;
    }
    const  ::example::thrift32::Struct4& get_field11() const&;
     ::example::thrift32::Struct4 get_field11() &&;
  
    template <typename T_Struct14_field11_struct_setter>
     ::example::thrift32::Struct4& set_field11(T_Struct14_field11_struct_setter&& field11_) {
      field11 = std::forward<T_Struct14_field11_struct_setter>(field11_);
      __isset.field11 = true;
      return field11;
    }
    const  ::example::thrift32::Struct7& get_field12() const&;
     ::example::thrift32::Struct7 get_field12() &&;
  
    template <typename T_Struct14_field12_struct_setter>
     ::example::thrift32::Struct7& set_field12(T_Struct14_field12_struct_setter&& field12_) {
      field12 = std::forward<T_Struct14_field12_struct_setter>(field12_);
      __isset.field12 = true;
      return field12;
    }
    const std::vector<int8_t>& get_field13() const&;
    std::vector<int8_t> get_field13() &&;
  
    template <typename T_Struct14_field13_struct_setter>
    std::vector<int8_t>& set_field13(T_Struct14_field13_struct_setter&& field13_) {
      field13 = std::forward<T_Struct14_field13_struct_setter>(field13_);
      __isset.field13 = true;
      return field13;
    }
    const std::set<std::set<std::string>>& get_field14() const&;
    std::set<std::set<std::string>> get_field14() &&;
  
    template <typename T_Struct14_field14_struct_setter>
    std::set<std::set<std::string>>& set_field14(T_Struct14_field14_struct_setter&& field14_) {
      field14 = std::forward<T_Struct14_field14_struct_setter>(field14_);
      __isset.field14 = true;
      return field14;
    }
    const std::set<bool>& get_field15() const&;
    std::set<bool> get_field15() &&;
  
    template <typename T_Struct14_field15_struct_setter>
    std::set<bool>& set_field15(T_Struct14_field15_struct_setter&& field15_) {
      field15 = std::forward<T_Struct14_field15_struct_setter>(field15_);
      __isset.field15 = true;
      return field15;
    }
    const std::vector<std::set<std::string>>& get_field16() const&;
    std::vector<std::set<std::string>> get_field16() &&;
  
    template <typename T_Struct14_field16_struct_setter>
    std::vector<std::set<std::string>>& set_field16(T_Struct14_field16_struct_setter&& field16_) {
      field16 = std::forward<T_Struct14_field16_struct_setter>(field16_);
      __isset.field16 = true;
      return field16;
    }
    const std::vector<double>& get_field17() const&;
    std::vector<double> get_field17() &&;
  
    template <typename T_Struct14_field17_struct_setter>
    std::vector<double>& set_field17(T_Struct14_field17_struct_setter&& field17_) {
      field17 = std::forward<T_Struct14_field17_struct_setter>(field17_);
      __isset.field17 = true;
      return field17;
    }
    const std::map<std::vector<float>, int16_t>& get_field18() const&;
    std::map<std::vector<float>, int16_t> get_field18() &&;
  
    template <typename T_Struct14_field18_struct_setter>
    std::map<std::vector<float>, int16_t>& set_field18(T_Struct14_field18_struct_setter&& field18_) {
      field18 = std::forward<T_Struct14_field18_struct_setter>(field18_);
      __isset.field18 = true;
      return field18;
    }
  
    template <class Protocol_>
    uint32_t 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:
    static void translateFieldName(FOLLY_MAYBE_UNUSED folly::StringPiece _fname, FOLLY_MAYBE_UNUSED int16_t& fid, FOLLY_MAYBE_UNUSED apache::thrift::protocol::TType& _ftype);
  };
  
  void swap(Struct14& a, Struct14& b);
  extern template uint32_t Struct14::read<>(apache::thrift::BinaryProtocolReader*);
  extern template uint32_t Struct14::write<>(apache::thrift::BinaryProtocolWriter*) const;
  extern template uint32_t Struct14::serializedSize<>(apache::thrift::BinaryProtocolWriter const*) const;
  extern template uint32_t Struct14::serializedSizeZC<>(apache::thrift::BinaryProtocolWriter const*) const;
  extern template uint32_t Struct14::read<>(apache::thrift::CompactProtocolReader*);
  extern template uint32_t Struct14::write<>(apache::thrift::CompactProtocolWriter*) const;
  extern template uint32_t Struct14::serializedSize<>(apache::thrift::CompactProtocolWriter const*) const;
  extern template uint32_t Struct14::serializedSizeZC<>(apache::thrift::CompactProtocolWriter const*) const;
  
  }} // example::thrift32
  namespace apache { namespace thrift {
  
  template <> inline void Cpp2Ops< ::example::thrift32::Struct14>::clear( ::example::thrift32::Struct14* obj) {
    return obj->__clear();
  }
  
  template <> inline constexpr apache::thrift::protocol::TType Cpp2Ops< ::example::thrift32::Struct14>::thriftType() {
    return apache::thrift::protocol::T_STRUCT;
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct14>::write(Protocol* proto,  ::example::thrift32::Struct14 const* obj) {
    return obj->write(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct14>::read(Protocol* proto,  ::example::thrift32::Struct14* obj) {
    return obj->read(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct14>::serializedSize(Protocol const* proto,  ::example::thrift32::Struct14 const* obj) {
    return obj->serializedSize(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct14>::serializedSizeZC(Protocol const* proto,  ::example::thrift32::Struct14 const* obj) {
    return obj->serializedSizeZC(proto);
  }
  
  }} // apache::thrift
  namespace example { namespace thrift32 {
  
  class Struct15 : private apache::thrift::detail::st::ComparisonOperators<Struct15> {
   public:
  
    Struct15() :
        field1(0),
        field2(0),
        field4(0) {}
    // FragileConstructor for use in initialization lists only
  
    Struct15(apache::thrift::FragileConstructor, int32_t field1__arg, float field2__arg,  ::example::thrift32::Struct2 field3__arg, double field4__arg) :
        field1(std::move(field1__arg)),
        field2(std::move(field2__arg)),
        field3(std::move(field3__arg)),
        field4(std::move(field4__arg)) {
      __isset.field1 = true;
      __isset.field2 = true;
      __isset.field3 = true;
      __isset.field4 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct15(::apache::thrift::detail::argument_wrapper<1, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct15(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field1 = arg.move();
      __isset.field1 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct15(::apache::thrift::detail::argument_wrapper<2, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct15(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field2 = arg.move();
      __isset.field2 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct15(::apache::thrift::detail::argument_wrapper<3, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct15(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field3 = arg.move();
      __isset.field3 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct15(::apache::thrift::detail::argument_wrapper<4, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct15(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field4 = arg.move();
      __isset.field4 = true;
    }
  
    Struct15(Struct15&&) = default;
  
    Struct15(const Struct15&) = default;
  
    Struct15& operator=(Struct15&&) = default;
  
    Struct15& operator=(const Struct15&) = default;
    void __clear();
  
    virtual ~Struct15() {}
  
    int32_t field1;
    float field2;
     ::example::thrift32::Struct2 field3;
    double field4;
  
    struct __isset {
      void __clear() {
        field1 = false;
        field2 = false;
        field3 = false;
        field4 = false;
      }
  
      bool field1 = false;
      bool field2 = false;
      bool field3 = false;
      bool field4 = false;
    } __isset;
    bool operator==(const Struct15& rhs) const;
  
    bool operator < (const Struct15& rhs) const {
      if (!(field1 == rhs.field1)) {
        return field1 < rhs.field1;
      }
      if (!(field2 == rhs.field2)) {
        return field2 < rhs.field2;
      }
      if (!(field3 == rhs.field3)) {
        return field3 < rhs.field3;
      }
      if (!(field4 == rhs.field4)) {
        return field4 < rhs.field4;
      }
      (void)rhs;
      return false;
    }
  
    int32_t get_field1() const {
      return field1;
    }
  
    int32_t& set_field1(int32_t field1_) {
      field1 = field1_;
      __isset.field1 = true;
      return field1;
    }
  
    float get_field2() const {
      return field2;
    }
  
    float& set_field2(float field2_) {
      field2 = field2_;
      __isset.field2 = true;
      return field2;
    }
    const  ::example::thrift32::Struct2& get_field3() const&;
     ::example::thrift32::Struct2 get_field3() &&;
  
    template <typename T_Struct15_field3_struct_setter>
     ::example::thrift32::Struct2& set_field3(T_Struct15_field3_struct_setter&& field3_) {
      field3 = std::forward<T_Struct15_field3_struct_setter>(field3_);
      __isset.field3 = true;
      return field3;
    }
  
    double get_field4() const {
      return field4;
    }
  
    double& set_field4(double field4_) {
      field4 = field4_;
      __isset.field4 = true;
      return field4;
    }
  
    template <class Protocol_>
    uint32_t 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:
    static void translateFieldName(FOLLY_MAYBE_UNUSED folly::StringPiece _fname, FOLLY_MAYBE_UNUSED int16_t& fid, FOLLY_MAYBE_UNUSED apache::thrift::protocol::TType& _ftype);
  };
  
  void swap(Struct15& a, Struct15& b);
  extern template uint32_t Struct15::read<>(apache::thrift::BinaryProtocolReader*);
  extern template uint32_t Struct15::write<>(apache::thrift::BinaryProtocolWriter*) const;
  extern template uint32_t Struct15::serializedSize<>(apache::thrift::BinaryProtocolWriter const*) const;
  extern template uint32_t Struct15::serializedSizeZC<>(apache::thrift::BinaryProtocolWriter const*) const;
  extern template uint32_t Struct15::read<>(apache::thrift::CompactProtocolReader*);
  extern template uint32_t Struct15::write<>(apache::thrift::CompactProtocolWriter*) const;
  extern template uint32_t Struct15::serializedSize<>(apache::thrift::CompactProtocolWriter const*) const;
  extern template uint32_t Struct15::serializedSizeZC<>(apache::thrift::CompactProtocolWriter const*) const;
  
  }} // example::thrift32
  namespace apache { namespace thrift {
  
  template <> inline void Cpp2Ops< ::example::thrift32::Struct15>::clear( ::example::thrift32::Struct15* obj) {
    return obj->__clear();
  }
  
  template <> inline constexpr apache::thrift::protocol::TType Cpp2Ops< ::example::thrift32::Struct15>::thriftType() {
    return apache::thrift::protocol::T_STRUCT;
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct15>::write(Protocol* proto,  ::example::thrift32::Struct15 const* obj) {
    return obj->write(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct15>::read(Protocol* proto,  ::example::thrift32::Struct15* obj) {
    return obj->read(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct15>::serializedSize(Protocol const* proto,  ::example::thrift32::Struct15 const* obj) {
    return obj->serializedSize(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct15>::serializedSizeZC(Protocol const* proto,  ::example::thrift32::Struct15 const* obj) {
    return obj->serializedSizeZC(proto);
  }
  
  }} // apache::thrift
  namespace example { namespace thrift32 {
  
  class Struct16 : private apache::thrift::detail::st::ComparisonOperators<Struct16> {
   public:
  
    Struct16() :
        field4(0) {}
    // FragileConstructor for use in initialization lists only
  
    Struct16(apache::thrift::FragileConstructor, std::string field1__arg, std::vector<int16_t> field2__arg, std::set<int16_t> field3__arg, double field4__arg, std::map<std::string, int64_t> field5__arg) :
        field1(std::move(field1__arg)),
        field2(std::move(field2__arg)),
        field3(std::move(field3__arg)),
        field4(std::move(field4__arg)),
        field5(std::move(field5__arg)) {
      __isset.field1 = true;
      __isset.field2 = true;
      __isset.field3 = true;
      __isset.field4 = true;
      __isset.field5 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct16(::apache::thrift::detail::argument_wrapper<1, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct16(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field1 = arg.move();
      __isset.field1 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct16(::apache::thrift::detail::argument_wrapper<2, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct16(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field2 = arg.move();
      __isset.field2 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct16(::apache::thrift::detail::argument_wrapper<3, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct16(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field3 = arg.move();
      __isset.field3 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct16(::apache::thrift::detail::argument_wrapper<4, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct16(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field4 = arg.move();
      __isset.field4 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct16(::apache::thrift::detail::argument_wrapper<5, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct16(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field5 = arg.move();
      __isset.field5 = true;
    }
  
    Struct16(Struct16&&) = default;
  
    Struct16(const Struct16&) = default;
  
    Struct16& operator=(Struct16&&) = default;
  
    Struct16& operator=(const Struct16&) = default;
    void __clear();
  
    virtual ~Struct16() {}
  
    std::string field1;
    std::vector<int16_t> field2;
    std::set<int16_t> field3;
    double field4;
    std::map<std::string, int64_t> field5;
  
    struct __isset {
      void __clear() {
        field1 = false;
        field2 = false;
        field3 = false;
        field4 = false;
        field5 = false;
      }
  
      bool field1 = false;
      bool field2 = false;
      bool field3 = false;
      bool field4 = false;
      bool field5 = false;
    } __isset;
    bool operator==(const Struct16& rhs) const;
  
    bool operator < (const Struct16& rhs) const {
      if (!(field1 == rhs.field1)) {
        return field1 < rhs.field1;
      }
      if (!(field2 == rhs.field2)) {
        return field2 < rhs.field2;
      }
      if (!(field3 == rhs.field3)) {
        return field3 < rhs.field3;
      }
      if (!(field4 == rhs.field4)) {
        return field4 < rhs.field4;
      }
      if (!(field5 == rhs.field5)) {
        return field5 < rhs.field5;
      }
      (void)rhs;
      return false;
    }
  
    const std::string& get_field1() const& {
      return field1;
    }
  
    std::string get_field1() && {
      return std::move(field1);
    }
  
    template <typename T_Struct16_field1_struct_setter>
    std::string& set_field1(T_Struct16_field1_struct_setter&& field1_) {
      field1 = std::forward<T_Struct16_field1_struct_setter>(field1_);
      __isset.field1 = true;
      return field1;
    }
    const std::vector<int16_t>& get_field2() const&;
    std::vector<int16_t> get_field2() &&;
  
    template <typename T_Struct16_field2_struct_setter>
    std::vector<int16_t>& set_field2(T_Struct16_field2_struct_setter&& field2_) {
      field2 = std::forward<T_Struct16_field2_struct_setter>(field2_);
      __isset.field2 = true;
      return field2;
    }
    const std::set<int16_t>& get_field3() const&;
    std::set<int16_t> get_field3() &&;
  
    template <typename T_Struct16_field3_struct_setter>
    std::set<int16_t>& set_field3(T_Struct16_field3_struct_setter&& field3_) {
      field3 = std::forward<T_Struct16_field3_struct_setter>(field3_);
      __isset.field3 = true;
      return field3;
    }
  
    double get_field4() const {
      return field4;
    }
  
    double& set_field4(double field4_) {
      field4 = field4_;
      __isset.field4 = true;
      return field4;
    }
    const std::map<std::string, int64_t>& get_field5() const&;
    std::map<std::string, int64_t> get_field5() &&;
  
    template <typename T_Struct16_field5_struct_setter>
    std::map<std::string, int64_t>& set_field5(T_Struct16_field5_struct_setter&& field5_) {
      field5 = std::forward<T_Struct16_field5_struct_setter>(field5_);
      __isset.field5 = true;
      return field5;
    }
  
    template <class Protocol_>
    uint32_t 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:
    static void translateFieldName(FOLLY_MAYBE_UNUSED folly::StringPiece _fname, FOLLY_MAYBE_UNUSED int16_t& fid, FOLLY_MAYBE_UNUSED apache::thrift::protocol::TType& _ftype);
  };
  
  void swap(Struct16& a, Struct16& b);
  extern template uint32_t Struct16::read<>(apache::thrift::BinaryProtocolReader*);
  extern template uint32_t Struct16::write<>(apache::thrift::BinaryProtocolWriter*) const;
  extern template uint32_t Struct16::serializedSize<>(apache::thrift::BinaryProtocolWriter const*) const;
  extern template uint32_t Struct16::serializedSizeZC<>(apache::thrift::BinaryProtocolWriter const*) const;
  extern template uint32_t Struct16::read<>(apache::thrift::CompactProtocolReader*);
  extern template uint32_t Struct16::write<>(apache::thrift::CompactProtocolWriter*) const;
  extern template uint32_t Struct16::serializedSize<>(apache::thrift::CompactProtocolWriter const*) const;
  extern template uint32_t Struct16::serializedSizeZC<>(apache::thrift::CompactProtocolWriter const*) const;
  
  }} // example::thrift32
  namespace apache { namespace thrift {
  
  template <> inline void Cpp2Ops< ::example::thrift32::Struct16>::clear( ::example::thrift32::Struct16* obj) {
    return obj->__clear();
  }
  
  template <> inline constexpr apache::thrift::protocol::TType Cpp2Ops< ::example::thrift32::Struct16>::thriftType() {
    return apache::thrift::protocol::T_STRUCT;
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct16>::write(Protocol* proto,  ::example::thrift32::Struct16 const* obj) {
    return obj->write(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct16>::read(Protocol* proto,  ::example::thrift32::Struct16* obj) {
    return obj->read(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct16>::serializedSize(Protocol const* proto,  ::example::thrift32::Struct16 const* obj) {
    return obj->serializedSize(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct16>::serializedSizeZC(Protocol const* proto,  ::example::thrift32::Struct16 const* obj) {
    return obj->serializedSizeZC(proto);
  }
  
  }} // apache::thrift
  namespace example { namespace thrift32 {
  
  class Struct17 : private apache::thrift::detail::st::ComparisonOperators<Struct17> {
   public:
  
    Struct17() :
        field1(0),
        field2(0),
        field3(0),
        field4(0),
        field8(0),
        field9(0) {}
    // FragileConstructor for use in initialization lists only
  
    Struct17(apache::thrift::FragileConstructor, int64_t field1__arg, int16_t field2__arg, bool field3__arg, int16_t field4__arg, std::vector< ::example::thrift32::Struct5> field5__arg, std::string field6__arg, std::set<std::set<int32_t>> field7__arg, int64_t field8__arg, double field9__arg, std::set<std::string> field10__arg, std::map<std::string, float> field11__arg,  ::example::thrift32::Struct2 field12__arg, std::map<int16_t, int32_t> field13__arg) :
        field1(std::move(field1__arg)),
        field2(std::move(field2__arg)),
        field3(std::move(field3__arg)),
        field4(std::move(field4__arg)),
        field5(std::move(field5__arg)),
        field6(std::move(field6__arg)),
        field7(std::move(field7__arg)),
        field8(std::move(field8__arg)),
        field9(std::move(field9__arg)),
        field10(std::move(field10__arg)),
        field11(std::move(field11__arg)),
        field12(std::move(field12__arg)),
        field13(std::move(field13__arg)) {
      __isset.field1 = true;
      __isset.field2 = true;
      __isset.field3 = true;
      __isset.field4 = true;
      __isset.field5 = true;
      __isset.field6 = true;
      __isset.field7 = true;
      __isset.field8 = true;
      __isset.field9 = true;
      __isset.field10 = true;
      __isset.field11 = true;
      __isset.field12 = true;
      __isset.field13 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct17(::apache::thrift::detail::argument_wrapper<1, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct17(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field1 = arg.move();
      __isset.field1 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct17(::apache::thrift::detail::argument_wrapper<2, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct17(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field2 = arg.move();
      __isset.field2 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct17(::apache::thrift::detail::argument_wrapper<3, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct17(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field3 = arg.move();
      __isset.field3 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct17(::apache::thrift::detail::argument_wrapper<4, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct17(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field4 = arg.move();
      __isset.field4 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct17(::apache::thrift::detail::argument_wrapper<5, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct17(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field5 = arg.move();
      __isset.field5 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct17(::apache::thrift::detail::argument_wrapper<6, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct17(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field6 = arg.move();
      __isset.field6 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct17(::apache::thrift::detail::argument_wrapper<7, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct17(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field7 = arg.move();
      __isset.field7 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct17(::apache::thrift::detail::argument_wrapper<8, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct17(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field8 = arg.move();
      __isset.field8 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct17(::apache::thrift::detail::argument_wrapper<9, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct17(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field9 = arg.move();
      __isset.field9 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct17(::apache::thrift::detail::argument_wrapper<10, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct17(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field10 = arg.move();
      __isset.field10 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct17(::apache::thrift::detail::argument_wrapper<11, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct17(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field11 = arg.move();
      __isset.field11 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct17(::apache::thrift::detail::argument_wrapper<12, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct17(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field12 = arg.move();
      __isset.field12 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct17(::apache::thrift::detail::argument_wrapper<13, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct17(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field13 = arg.move();
      __isset.field13 = true;
    }
  
    Struct17(Struct17&&) = default;
  
    Struct17(const Struct17&) = default;
  
    Struct17& operator=(Struct17&&) = default;
  
    Struct17& operator=(const Struct17&) = default;
    void __clear();
  
    virtual ~Struct17() {}
  
    int64_t field1;
    int16_t field2;
    bool field3;
    int16_t field4;
    std::vector< ::example::thrift32::Struct5> field5;
    std::string field6;
    std::set<std::set<int32_t>> field7;
    int64_t field8;
    double field9;
    std::set<std::string> field10;
    std::map<std::string, float> field11;
     ::example::thrift32::Struct2 field12;
    std::map<int16_t, int32_t> field13;
  
    struct __isset {
      void __clear() {
        field1 = false;
        field2 = false;
        field3 = false;
        field4 = false;
        field5 = false;
        field6 = false;
        field7 = false;
        field8 = false;
        field9 = false;
        field10 = false;
        field11 = false;
        field12 = false;
        field13 = false;
      }
  
      bool field1 = false;
      bool field2 = false;
      bool field3 = false;
      bool field4 = false;
      bool field5 = false;
      bool field6 = false;
      bool field7 = false;
      bool field8 = false;
      bool field9 = false;
      bool field10 = false;
      bool field11 = false;
      bool field12 = false;
      bool field13 = false;
    } __isset;
    bool operator==(const Struct17& rhs) const;
  
    bool operator < (const Struct17& rhs) const {
      if (!(field1 == rhs.field1)) {
        return field1 < rhs.field1;
      }
      if (!(field2 == rhs.field2)) {
        return field2 < rhs.field2;
      }
      if (!(field3 == rhs.field3)) {
        return field3 < rhs.field3;
      }
      if (!(field4 == rhs.field4)) {
        return field4 < rhs.field4;
      }
      if (!(field5 == rhs.field5)) {
        return field5 < rhs.field5;
      }
      if (!(field6 == rhs.field6)) {
        return field6 < rhs.field6;
      }
      if (!(field7 == rhs.field7)) {
        return field7 < rhs.field7;
      }
      if (!(field8 == rhs.field8)) {
        return field8 < rhs.field8;
      }
      if (!(field9 == rhs.field9)) {
        return field9 < rhs.field9;
      }
      if (!(field10 == rhs.field10)) {
        return field10 < rhs.field10;
      }
      if (!(field11 == rhs.field11)) {
        return field11 < rhs.field11;
      }
      if (!(field12 == rhs.field12)) {
        return field12 < rhs.field12;
      }
      if (!(field13 == rhs.field13)) {
        return field13 < rhs.field13;
      }
      (void)rhs;
      return false;
    }
  
    int64_t get_field1() const {
      return field1;
    }
  
    int64_t& set_field1(int64_t field1_) {
      field1 = field1_;
      __isset.field1 = true;
      return field1;
    }
  
    int16_t get_field2() const {
      return field2;
    }
  
    int16_t& set_field2(int16_t field2_) {
      field2 = field2_;
      __isset.field2 = true;
      return field2;
    }
  
    bool get_field3() const {
      return field3;
    }
  
    bool& set_field3(bool field3_) {
      field3 = field3_;
      __isset.field3 = true;
      return field3;
    }
  
    int16_t get_field4() const {
      return field4;
    }
  
    int16_t& set_field4(int16_t field4_) {
      field4 = field4_;
      __isset.field4 = true;
      return field4;
    }
    const std::vector< ::example::thrift32::Struct5>& get_field5() const&;
    std::vector< ::example::thrift32::Struct5> get_field5() &&;
  
    template <typename T_Struct17_field5_struct_setter>
    std::vector< ::example::thrift32::Struct5>& set_field5(T_Struct17_field5_struct_setter&& field5_) {
      field5 = std::forward<T_Struct17_field5_struct_setter>(field5_);
      __isset.field5 = true;
      return field5;
    }
  
    const std::string& get_field6() const& {
      return field6;
    }
  
    std::string get_field6() && {
      return std::move(field6);
    }
  
    template <typename T_Struct17_field6_struct_setter>
    std::string& set_field6(T_Struct17_field6_struct_setter&& field6_) {
      field6 = std::forward<T_Struct17_field6_struct_setter>(field6_);
      __isset.field6 = true;
      return field6;
    }
    const std::set<std::set<int32_t>>& get_field7() const&;
    std::set<std::set<int32_t>> get_field7() &&;
  
    template <typename T_Struct17_field7_struct_setter>
    std::set<std::set<int32_t>>& set_field7(T_Struct17_field7_struct_setter&& field7_) {
      field7 = std::forward<T_Struct17_field7_struct_setter>(field7_);
      __isset.field7 = true;
      return field7;
    }
  
    int64_t get_field8() const {
      return field8;
    }
  
    int64_t& set_field8(int64_t field8_) {
      field8 = field8_;
      __isset.field8 = true;
      return field8;
    }
  
    double get_field9() const {
      return field9;
    }
  
    double& set_field9(double field9_) {
      field9 = field9_;
      __isset.field9 = true;
      return field9;
    }
    const std::set<std::string>& get_field10() const&;
    std::set<std::string> get_field10() &&;
  
    template <typename T_Struct17_field10_struct_setter>
    std::set<std::string>& set_field10(T_Struct17_field10_struct_setter&& field10_) {
      field10 = std::forward<T_Struct17_field10_struct_setter>(field10_);
      __isset.field10 = true;
      return field10;
    }
    const std::map<std::string, float>& get_field11() const&;
    std::map<std::string, float> get_field11() &&;
  
    template <typename T_Struct17_field11_struct_setter>
    std::map<std::string, float>& set_field11(T_Struct17_field11_struct_setter&& field11_) {
      field11 = std::forward<T_Struct17_field11_struct_setter>(field11_);
      __isset.field11 = true;
      return field11;
    }
    const  ::example::thrift32::Struct2& get_field12() const&;
     ::example::thrift32::Struct2 get_field12() &&;
  
    template <typename T_Struct17_field12_struct_setter>
     ::example::thrift32::Struct2& set_field12(T_Struct17_field12_struct_setter&& field12_) {
      field12 = std::forward<T_Struct17_field12_struct_setter>(field12_);
      __isset.field12 = true;
      return field12;
    }
    const std::map<int16_t, int32_t>& get_field13() const&;
    std::map<int16_t, int32_t> get_field13() &&;
  
    template <typename T_Struct17_field13_struct_setter>
    std::map<int16_t, int32_t>& set_field13(T_Struct17_field13_struct_setter&& field13_) {
      field13 = std::forward<T_Struct17_field13_struct_setter>(field13_);
      __isset.field13 = true;
      return field13;
    }
  
    template <class Protocol_>
    uint32_t 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:
    static void translateFieldName(FOLLY_MAYBE_UNUSED folly::StringPiece _fname, FOLLY_MAYBE_UNUSED int16_t& fid, FOLLY_MAYBE_UNUSED apache::thrift::protocol::TType& _ftype);
  };
  
  void swap(Struct17& a, Struct17& b);
  extern template uint32_t Struct17::read<>(apache::thrift::BinaryProtocolReader*);
  extern template uint32_t Struct17::write<>(apache::thrift::BinaryProtocolWriter*) const;
  extern template uint32_t Struct17::serializedSize<>(apache::thrift::BinaryProtocolWriter const*) const;
  extern template uint32_t Struct17::serializedSizeZC<>(apache::thrift::BinaryProtocolWriter const*) const;
  extern template uint32_t Struct17::read<>(apache::thrift::CompactProtocolReader*);
  extern template uint32_t Struct17::write<>(apache::thrift::CompactProtocolWriter*) const;
  extern template uint32_t Struct17::serializedSize<>(apache::thrift::CompactProtocolWriter const*) const;
  extern template uint32_t Struct17::serializedSizeZC<>(apache::thrift::CompactProtocolWriter const*) const;
  
  }} // example::thrift32
  namespace apache { namespace thrift {
  
  template <> inline void Cpp2Ops< ::example::thrift32::Struct17>::clear( ::example::thrift32::Struct17* obj) {
    return obj->__clear();
  }
  
  template <> inline constexpr apache::thrift::protocol::TType Cpp2Ops< ::example::thrift32::Struct17>::thriftType() {
    return apache::thrift::protocol::T_STRUCT;
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct17>::write(Protocol* proto,  ::example::thrift32::Struct17 const* obj) {
    return obj->write(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct17>::read(Protocol* proto,  ::example::thrift32::Struct17* obj) {
    return obj->read(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct17>::serializedSize(Protocol const* proto,  ::example::thrift32::Struct17 const* obj) {
    return obj->serializedSize(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct17>::serializedSizeZC(Protocol const* proto,  ::example::thrift32::Struct17 const* obj) {
    return obj->serializedSizeZC(proto);
  }
  
  }} // apache::thrift
  namespace example { namespace thrift32 {
  
  class Struct18 : private apache::thrift::detail::st::ComparisonOperators<Struct18> {
   public:
  
    Struct18() :
        field1(0) {}
    // FragileConstructor for use in initialization lists only
  
    Struct18(apache::thrift::FragileConstructor, int64_t field1__arg, std::set<int16_t> field2__arg) :
        field1(std::move(field1__arg)),
        field2(std::move(field2__arg)) {
      __isset.field1 = true;
      __isset.field2 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct18(::apache::thrift::detail::argument_wrapper<1, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct18(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field1 = arg.move();
      __isset.field1 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct18(::apache::thrift::detail::argument_wrapper<2, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct18(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field2 = arg.move();
      __isset.field2 = true;
    }
  
    Struct18(Struct18&&) = default;
  
    Struct18(const Struct18&) = default;
  
    Struct18& operator=(Struct18&&) = default;
  
    Struct18& operator=(const Struct18&) = default;
    void __clear();
  
    virtual ~Struct18() {}
  
    int64_t field1;
    std::set<int16_t> field2;
  
    struct __isset {
      void __clear() {
        field1 = false;
        field2 = false;
      }
  
      bool field1 = false;
      bool field2 = false;
    } __isset;
    bool operator==(const Struct18& rhs) const;
  
    bool operator < (const Struct18& rhs) const {
      if (!(field1 == rhs.field1)) {
        return field1 < rhs.field1;
      }
      if (!(field2 == rhs.field2)) {
        return field2 < rhs.field2;
      }
      (void)rhs;
      return false;
    }
  
    int64_t get_field1() const {
      return field1;
    }
  
    int64_t& set_field1(int64_t field1_) {
      field1 = field1_;
      __isset.field1 = true;
      return field1;
    }
    const std::set<int16_t>& get_field2() const&;
    std::set<int16_t> get_field2() &&;
  
    template <typename T_Struct18_field2_struct_setter>
    std::set<int16_t>& set_field2(T_Struct18_field2_struct_setter&& field2_) {
      field2 = std::forward<T_Struct18_field2_struct_setter>(field2_);
      __isset.field2 = true;
      return field2;
    }
  
    template <class Protocol_>
    uint32_t 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:
    static void translateFieldName(FOLLY_MAYBE_UNUSED folly::StringPiece _fname, FOLLY_MAYBE_UNUSED int16_t& fid, FOLLY_MAYBE_UNUSED apache::thrift::protocol::TType& _ftype);
  };
  
  void swap(Struct18& a, Struct18& b);
  extern template uint32_t Struct18::read<>(apache::thrift::BinaryProtocolReader*);
  extern template uint32_t Struct18::write<>(apache::thrift::BinaryProtocolWriter*) const;
  extern template uint32_t Struct18::serializedSize<>(apache::thrift::BinaryProtocolWriter const*) const;
  extern template uint32_t Struct18::serializedSizeZC<>(apache::thrift::BinaryProtocolWriter const*) const;
  extern template uint32_t Struct18::read<>(apache::thrift::CompactProtocolReader*);
  extern template uint32_t Struct18::write<>(apache::thrift::CompactProtocolWriter*) const;
  extern template uint32_t Struct18::serializedSize<>(apache::thrift::CompactProtocolWriter const*) const;
  extern template uint32_t Struct18::serializedSizeZC<>(apache::thrift::CompactProtocolWriter const*) const;
  
  }} // example::thrift32
  namespace apache { namespace thrift {
  
  template <> inline void Cpp2Ops< ::example::thrift32::Struct18>::clear( ::example::thrift32::Struct18* obj) {
    return obj->__clear();
  }
  
  template <> inline constexpr apache::thrift::protocol::TType Cpp2Ops< ::example::thrift32::Struct18>::thriftType() {
    return apache::thrift::protocol::T_STRUCT;
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct18>::write(Protocol* proto,  ::example::thrift32::Struct18 const* obj) {
    return obj->write(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct18>::read(Protocol* proto,  ::example::thrift32::Struct18* obj) {
    return obj->read(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct18>::serializedSize(Protocol const* proto,  ::example::thrift32::Struct18 const* obj) {
    return obj->serializedSize(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct18>::serializedSizeZC(Protocol const* proto,  ::example::thrift32::Struct18 const* obj) {
    return obj->serializedSizeZC(proto);
  }
  
  }} // apache::thrift
  namespace example { namespace thrift32 {
  
  class Struct19 : private apache::thrift::detail::st::ComparisonOperators<Struct19> {
   public:
  
    Struct19() :
        field1(0),
        field2(0),
        field5(0),
        field6(0) {}
    // FragileConstructor for use in initialization lists only
  
    Struct19(apache::thrift::FragileConstructor, int64_t field1__arg, double field2__arg, std::vector<int64_t> field3__arg,  ::example::thrift32::Struct1 field4__arg, double field5__arg, int64_t field6__arg) :
        field1(std::move(field1__arg)),
        field2(std::move(field2__arg)),
        field3(std::move(field3__arg)),
        field4(std::move(field4__arg)),
        field5(std::move(field5__arg)),
        field6(std::move(field6__arg)) {
      __isset.field1 = true;
      __isset.field2 = true;
      __isset.field3 = true;
      __isset.field4 = true;
      __isset.field5 = true;
      __isset.field6 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct19(::apache::thrift::detail::argument_wrapper<1, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct19(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field1 = arg.move();
      __isset.field1 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct19(::apache::thrift::detail::argument_wrapper<2, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct19(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field2 = arg.move();
      __isset.field2 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct19(::apache::thrift::detail::argument_wrapper<3, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct19(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field3 = arg.move();
      __isset.field3 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct19(::apache::thrift::detail::argument_wrapper<4, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct19(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field4 = arg.move();
      __isset.field4 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct19(::apache::thrift::detail::argument_wrapper<5, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct19(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field5 = arg.move();
      __isset.field5 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct19(::apache::thrift::detail::argument_wrapper<6, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct19(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field6 = arg.move();
      __isset.field6 = true;
    }
  
    Struct19(Struct19&&) = default;
  
    Struct19(const Struct19&) = default;
  
    Struct19& operator=(Struct19&&) = default;
  
    Struct19& operator=(const Struct19&) = default;
    void __clear();
  
    virtual ~Struct19() {}
  
    int64_t field1;
    double field2;
    std::vector<int64_t> field3;
     ::example::thrift32::Struct1 field4;
    double field5;
    int64_t field6;
  
    struct __isset {
      void __clear() {
        field1 = false;
        field2 = false;
        field3 = false;
        field4 = false;
        field5 = false;
        field6 = false;
      }
  
      bool field1 = false;
      bool field2 = false;
      bool field3 = false;
      bool field4 = false;
      bool field5 = false;
      bool field6 = false;
    } __isset;
    bool operator==(const Struct19& rhs) const;
  
    bool operator < (const Struct19& rhs) const {
      if (!(field1 == rhs.field1)) {
        return field1 < rhs.field1;
      }
      if (!(field2 == rhs.field2)) {
        return field2 < rhs.field2;
      }
      if (!(field3 == rhs.field3)) {
        return field3 < rhs.field3;
      }
      if (!(field4 == rhs.field4)) {
        return field4 < rhs.field4;
      }
      if (!(field5 == rhs.field5)) {
        return field5 < rhs.field5;
      }
      if (!(field6 == rhs.field6)) {
        return field6 < rhs.field6;
      }
      (void)rhs;
      return false;
    }
  
    int64_t get_field1() const {
      return field1;
    }
  
    int64_t& set_field1(int64_t field1_) {
      field1 = field1_;
      __isset.field1 = true;
      return field1;
    }
  
    double get_field2() const {
      return field2;
    }
  
    double& set_field2(double field2_) {
      field2 = field2_;
      __isset.field2 = true;
      return field2;
    }
    const std::vector<int64_t>& get_field3() const&;
    std::vector<int64_t> get_field3() &&;
  
    template <typename T_Struct19_field3_struct_setter>
    std::vector<int64_t>& set_field3(T_Struct19_field3_struct_setter&& field3_) {
      field3 = std::forward<T_Struct19_field3_struct_setter>(field3_);
      __isset.field3 = true;
      return field3;
    }
    const  ::example::thrift32::Struct1& get_field4() const&;
     ::example::thrift32::Struct1 get_field4() &&;
  
    template <typename T_Struct19_field4_struct_setter>
     ::example::thrift32::Struct1& set_field4(T_Struct19_field4_struct_setter&& field4_) {
      field4 = std::forward<T_Struct19_field4_struct_setter>(field4_);
      __isset.field4 = true;
      return field4;
    }
  
    double get_field5() const {
      return field5;
    }
  
    double& set_field5(double field5_) {
      field5 = field5_;
      __isset.field5 = true;
      return field5;
    }
  
    int64_t get_field6() const {
      return field6;
    }
  
    int64_t& set_field6(int64_t field6_) {
      field6 = field6_;
      __isset.field6 = true;
      return field6;
    }
  
    template <class Protocol_>
    uint32_t 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:
    static void translateFieldName(FOLLY_MAYBE_UNUSED folly::StringPiece _fname, FOLLY_MAYBE_UNUSED int16_t& fid, FOLLY_MAYBE_UNUSED apache::thrift::protocol::TType& _ftype);
  };
  
  void swap(Struct19& a, Struct19& b);
  extern template uint32_t Struct19::read<>(apache::thrift::BinaryProtocolReader*);
  extern template uint32_t Struct19::write<>(apache::thrift::BinaryProtocolWriter*) const;
  extern template uint32_t Struct19::serializedSize<>(apache::thrift::BinaryProtocolWriter const*) const;
  extern template uint32_t Struct19::serializedSizeZC<>(apache::thrift::BinaryProtocolWriter const*) const;
  extern template uint32_t Struct19::read<>(apache::thrift::CompactProtocolReader*);
  extern template uint32_t Struct19::write<>(apache::thrift::CompactProtocolWriter*) const;
  extern template uint32_t Struct19::serializedSize<>(apache::thrift::CompactProtocolWriter const*) const;
  extern template uint32_t Struct19::serializedSizeZC<>(apache::thrift::CompactProtocolWriter const*) const;
  
  }} // example::thrift32
  namespace apache { namespace thrift {
  
  template <> inline void Cpp2Ops< ::example::thrift32::Struct19>::clear( ::example::thrift32::Struct19* obj) {
    return obj->__clear();
  }
  
  template <> inline constexpr apache::thrift::protocol::TType Cpp2Ops< ::example::thrift32::Struct19>::thriftType() {
    return apache::thrift::protocol::T_STRUCT;
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct19>::write(Protocol* proto,  ::example::thrift32::Struct19 const* obj) {
    return obj->write(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct19>::read(Protocol* proto,  ::example::thrift32::Struct19* obj) {
    return obj->read(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct19>::serializedSize(Protocol const* proto,  ::example::thrift32::Struct19 const* obj) {
    return obj->serializedSize(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct19>::serializedSizeZC(Protocol const* proto,  ::example::thrift32::Struct19 const* obj) {
    return obj->serializedSizeZC(proto);
  }
  
  }} // apache::thrift
  namespace example { namespace thrift32 {
  
  class Struct20 : private apache::thrift::detail::st::ComparisonOperators<Struct20> {
   public:
  
    Struct20() :
        field1(0),
        field3(0),
        field6(0),
        field9(0),
        field10(0),
        field15(0),
        field17(0),
        field20(0),
        field22(0) {}
    // FragileConstructor for use in initialization lists only
  
    Struct20(apache::thrift::FragileConstructor, int16_t field1__arg,  ::example::thrift32::Struct6 field2__arg, int8_t field3__arg, std::map<float, std::vector<int16_t>> field4__arg, std::map<std::map<bool, std::string>,  ::example::thrift32::Struct7> field5__arg, int8_t field6__arg, std::set<std::map<int16_t, std::string>> field7__arg, std::map<float, int16_t> field8__arg, double field9__arg, double field10__arg, std::string field11__arg, std::vector<double> field12__arg,  ::example::thrift32::Struct2 field13__arg, std::map<std::string, std::vector<int64_t>> field14__arg, float field15__arg, std::set<std::string> field16__arg, int64_t field17__arg,  ::example::thrift32::Struct2 field18__arg, std::set<std::string> field19__arg, int8_t field20__arg, std::map<int8_t, int32_t> field21__arg, int32_t field22__arg,  ::example::thrift32::Struct4 field23__arg, std::map<std::map<double, std::string>,  ::example::thrift32::Struct13> field24__arg) :
        field1(std::move(field1__arg)),
        field2(std::move(field2__arg)),
        field3(std::move(field3__arg)),
        field4(std::move(field4__arg)),
        field5(std::move(field5__arg)),
        field6(std::move(field6__arg)),
        field7(std::move(field7__arg)),
        field8(std::move(field8__arg)),
        field9(std::move(field9__arg)),
        field10(std::move(field10__arg)),
        field11(std::move(field11__arg)),
        field12(std::move(field12__arg)),
        field13(std::move(field13__arg)),
        field14(std::move(field14__arg)),
        field15(std::move(field15__arg)),
        field16(std::move(field16__arg)),
        field17(std::move(field17__arg)),
        field18(std::move(field18__arg)),
        field19(std::move(field19__arg)),
        field20(std::move(field20__arg)),
        field21(std::move(field21__arg)),
        field22(std::move(field22__arg)),
        field23(std::move(field23__arg)),
        field24(std::move(field24__arg)) {
      __isset.field1 = true;
      __isset.field2 = true;
      __isset.field3 = true;
      __isset.field4 = true;
      __isset.field5 = true;
      __isset.field6 = true;
      __isset.field7 = true;
      __isset.field8 = true;
      __isset.field9 = true;
      __isset.field10 = true;
      __isset.field11 = true;
      __isset.field12 = true;
      __isset.field13 = true;
      __isset.field14 = true;
      __isset.field15 = true;
      __isset.field16 = true;
      __isset.field17 = true;
      __isset.field18 = true;
      __isset.field19 = true;
      __isset.field20 = true;
      __isset.field21 = true;
      __isset.field22 = true;
      __isset.field23 = true;
      __isset.field24 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct20(::apache::thrift::detail::argument_wrapper<1, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct20(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field1 = arg.move();
      __isset.field1 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct20(::apache::thrift::detail::argument_wrapper<2, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct20(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field2 = arg.move();
      __isset.field2 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct20(::apache::thrift::detail::argument_wrapper<3, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct20(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field3 = arg.move();
      __isset.field3 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct20(::apache::thrift::detail::argument_wrapper<4, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct20(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field4 = arg.move();
      __isset.field4 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct20(::apache::thrift::detail::argument_wrapper<5, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct20(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field5 = arg.move();
      __isset.field5 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct20(::apache::thrift::detail::argument_wrapper<6, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct20(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field6 = arg.move();
      __isset.field6 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct20(::apache::thrift::detail::argument_wrapper<7, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct20(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field7 = arg.move();
      __isset.field7 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct20(::apache::thrift::detail::argument_wrapper<8, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct20(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field8 = arg.move();
      __isset.field8 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct20(::apache::thrift::detail::argument_wrapper<9, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct20(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field9 = arg.move();
      __isset.field9 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct20(::apache::thrift::detail::argument_wrapper<10, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct20(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field10 = arg.move();
      __isset.field10 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct20(::apache::thrift::detail::argument_wrapper<11, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct20(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field11 = arg.move();
      __isset.field11 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct20(::apache::thrift::detail::argument_wrapper<12, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct20(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field12 = arg.move();
      __isset.field12 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct20(::apache::thrift::detail::argument_wrapper<13, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct20(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field13 = arg.move();
      __isset.field13 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct20(::apache::thrift::detail::argument_wrapper<14, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct20(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field14 = arg.move();
      __isset.field14 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct20(::apache::thrift::detail::argument_wrapper<15, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct20(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field15 = arg.move();
      __isset.field15 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct20(::apache::thrift::detail::argument_wrapper<16, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct20(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field16 = arg.move();
      __isset.field16 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct20(::apache::thrift::detail::argument_wrapper<17, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct20(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field17 = arg.move();
      __isset.field17 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct20(::apache::thrift::detail::argument_wrapper<18, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct20(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field18 = arg.move();
      __isset.field18 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct20(::apache::thrift::detail::argument_wrapper<19, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct20(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field19 = arg.move();
      __isset.field19 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct20(::apache::thrift::detail::argument_wrapper<20, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct20(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field20 = arg.move();
      __isset.field20 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct20(::apache::thrift::detail::argument_wrapper<21, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct20(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field21 = arg.move();
      __isset.field21 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct20(::apache::thrift::detail::argument_wrapper<22, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct20(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field22 = arg.move();
      __isset.field22 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct20(::apache::thrift::detail::argument_wrapper<23, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct20(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field23 = arg.move();
      __isset.field23 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct20(::apache::thrift::detail::argument_wrapper<24, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct20(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field24 = arg.move();
      __isset.field24 = true;
    }
  
    Struct20(Struct20&&) = default;
  
    Struct20(const Struct20&) = default;
  
    Struct20& operator=(Struct20&&) = default;
  
    Struct20& operator=(const Struct20&) = default;
    void __clear();
  
    virtual ~Struct20() {}
  
    int16_t field1;
     ::example::thrift32::Struct6 field2;
    int8_t field3;
    std::map<float, std::vector<int16_t>> field4;
    std::map<std::map<bool, std::string>,  ::example::thrift32::Struct7> field5;
    int8_t field6;
    std::set<std::map<int16_t, std::string>> field7;
    std::map<float, int16_t> field8;
    double field9;
    double field10;
    std::string field11;
    std::vector<double> field12;
     ::example::thrift32::Struct2 field13;
    std::map<std::string, std::vector<int64_t>> field14;
    float field15;
    std::set<std::string> field16;
    int64_t field17;
     ::example::thrift32::Struct2 field18;
    std::set<std::string> field19;
    int8_t field20;
    std::map<int8_t, int32_t> field21;
    int32_t field22;
     ::example::thrift32::Struct4 field23;
    std::map<std::map<double, std::string>,  ::example::thrift32::Struct13> field24;
  
    struct __isset {
      void __clear() {
        field1 = false;
        field2 = false;
        field3 = false;
        field4 = false;
        field5 = false;
        field6 = false;
        field7 = false;
        field8 = false;
        field9 = false;
        field10 = false;
        field11 = false;
        field12 = false;
        field13 = false;
        field14 = false;
        field15 = false;
        field16 = false;
        field17 = false;
        field18 = false;
        field19 = false;
        field20 = false;
        field21 = false;
        field22 = false;
        field23 = false;
        field24 = false;
      }
  
      bool field1 = false;
      bool field2 = false;
      bool field3 = false;
      bool field4 = false;
      bool field5 = false;
      bool field6 = false;
      bool field7 = false;
      bool field8 = false;
      bool field9 = false;
      bool field10 = false;
      bool field11 = false;
      bool field12 = false;
      bool field13 = false;
      bool field14 = false;
      bool field15 = false;
      bool field16 = false;
      bool field17 = false;
      bool field18 = false;
      bool field19 = false;
      bool field20 = false;
      bool field21 = false;
      bool field22 = false;
      bool field23 = false;
      bool field24 = false;
    } __isset;
    bool operator==(const Struct20& rhs) const;
  
    bool operator < (const Struct20& rhs) const {
      if (!(field1 == rhs.field1)) {
        return field1 < rhs.field1;
      }
      if (!(field2 == rhs.field2)) {
        return field2 < rhs.field2;
      }
      if (!(field3 == rhs.field3)) {
        return field3 < rhs.field3;
      }
      if (!(field4 == rhs.field4)) {
        return field4 < rhs.field4;
      }
      if (!(field5 == rhs.field5)) {
        return field5 < rhs.field5;
      }
      if (!(field6 == rhs.field6)) {
        return field6 < rhs.field6;
      }
      if (!(field7 == rhs.field7)) {
        return field7 < rhs.field7;
      }
      if (!(field8 == rhs.field8)) {
        return field8 < rhs.field8;
      }
      if (!(field9 == rhs.field9)) {
        return field9 < rhs.field9;
      }
      if (!(field10 == rhs.field10)) {
        return field10 < rhs.field10;
      }
      if (!(field11 == rhs.field11)) {
        return field11 < rhs.field11;
      }
      if (!(field12 == rhs.field12)) {
        return field12 < rhs.field12;
      }
      if (!(field13 == rhs.field13)) {
        return field13 < rhs.field13;
      }
      if (!(field14 == rhs.field14)) {
        return field14 < rhs.field14;
      }
      if (!(field15 == rhs.field15)) {
        return field15 < rhs.field15;
      }
      if (!(field16 == rhs.field16)) {
        return field16 < rhs.field16;
      }
      if (!(field17 == rhs.field17)) {
        return field17 < rhs.field17;
      }
      if (!(field18 == rhs.field18)) {
        return field18 < rhs.field18;
      }
      if (!(field19 == rhs.field19)) {
        return field19 < rhs.field19;
      }
      if (!(field20 == rhs.field20)) {
        return field20 < rhs.field20;
      }
      if (!(field21 == rhs.field21)) {
        return field21 < rhs.field21;
      }
      if (!(field22 == rhs.field22)) {
        return field22 < rhs.field22;
      }
      if (!(field23 == rhs.field23)) {
        return field23 < rhs.field23;
      }
      if (!(field24 == rhs.field24)) {
        return field24 < rhs.field24;
      }
      (void)rhs;
      return false;
    }
  
    int16_t get_field1() const {
      return field1;
    }
  
    int16_t& set_field1(int16_t field1_) {
      field1 = field1_;
      __isset.field1 = true;
      return field1;
    }
    const  ::example::thrift32::Struct6& get_field2() const&;
     ::example::thrift32::Struct6 get_field2() &&;
  
    template <typename T_Struct20_field2_struct_setter>
     ::example::thrift32::Struct6& set_field2(T_Struct20_field2_struct_setter&& field2_) {
      field2 = std::forward<T_Struct20_field2_struct_setter>(field2_);
      __isset.field2 = true;
      return field2;
    }
  
    int8_t get_field3() const {
      return field3;
    }
  
    int8_t& set_field3(int8_t field3_) {
      field3 = field3_;
      __isset.field3 = true;
      return field3;
    }
    const std::map<float, std::vector<int16_t>>& get_field4() const&;
    std::map<float, std::vector<int16_t>> get_field4() &&;
  
    template <typename T_Struct20_field4_struct_setter>
    std::map<float, std::vector<int16_t>>& set_field4(T_Struct20_field4_struct_setter&& field4_) {
      field4 = std::forward<T_Struct20_field4_struct_setter>(field4_);
      __isset.field4 = true;
      return field4;
    }
    const std::map<std::map<bool, std::string>,  ::example::thrift32::Struct7>& get_field5() const&;
    std::map<std::map<bool, std::string>,  ::example::thrift32::Struct7> get_field5() &&;
  
    template <typename T_Struct20_field5_struct_setter>
    std::map<std::map<bool, std::string>,  ::example::thrift32::Struct7>& set_field5(T_Struct20_field5_struct_setter&& field5_) {
      field5 = std::forward<T_Struct20_field5_struct_setter>(field5_);
      __isset.field5 = true;
      return field5;
    }
  
    int8_t get_field6() const {
      return field6;
    }
  
    int8_t& set_field6(int8_t field6_) {
      field6 = field6_;
      __isset.field6 = true;
      return field6;
    }
    const std::set<std::map<int16_t, std::string>>& get_field7() const&;
    std::set<std::map<int16_t, std::string>> get_field7() &&;
  
    template <typename T_Struct20_field7_struct_setter>
    std::set<std::map<int16_t, std::string>>& set_field7(T_Struct20_field7_struct_setter&& field7_) {
      field7 = std::forward<T_Struct20_field7_struct_setter>(field7_);
      __isset.field7 = true;
      return field7;
    }
    const std::map<float, int16_t>& get_field8() const&;
    std::map<float, int16_t> get_field8() &&;
  
    template <typename T_Struct20_field8_struct_setter>
    std::map<float, int16_t>& set_field8(T_Struct20_field8_struct_setter&& field8_) {
      field8 = std::forward<T_Struct20_field8_struct_setter>(field8_);
      __isset.field8 = true;
      return field8;
    }
  
    double get_field9() const {
      return field9;
    }
  
    double& set_field9(double field9_) {
      field9 = field9_;
      __isset.field9 = true;
      return field9;
    }
  
    double get_field10() const {
      return field10;
    }
  
    double& set_field10(double field10_) {
      field10 = field10_;
      __isset.field10 = true;
      return field10;
    }
  
    const std::string& get_field11() const& {
      return field11;
    }
  
    std::string get_field11() && {
      return std::move(field11);
    }
  
    template <typename T_Struct20_field11_struct_setter>
    std::string& set_field11(T_Struct20_field11_struct_setter&& field11_) {
      field11 = std::forward<T_Struct20_field11_struct_setter>(field11_);
      __isset.field11 = true;
      return field11;
    }
    const std::vector<double>& get_field12() const&;
    std::vector<double> get_field12() &&;
  
    template <typename T_Struct20_field12_struct_setter>
    std::vector<double>& set_field12(T_Struct20_field12_struct_setter&& field12_) {
      field12 = std::forward<T_Struct20_field12_struct_setter>(field12_);
      __isset.field12 = true;
      return field12;
    }
    const  ::example::thrift32::Struct2& get_field13() const&;
     ::example::thrift32::Struct2 get_field13() &&;
  
    template <typename T_Struct20_field13_struct_setter>
     ::example::thrift32::Struct2& set_field13(T_Struct20_field13_struct_setter&& field13_) {
      field13 = std::forward<T_Struct20_field13_struct_setter>(field13_);
      __isset.field13 = true;
      return field13;
    }
    const std::map<std::string, std::vector<int64_t>>& get_field14() const&;
    std::map<std::string, std::vector<int64_t>> get_field14() &&;
  
    template <typename T_Struct20_field14_struct_setter>
    std::map<std::string, std::vector<int64_t>>& set_field14(T_Struct20_field14_struct_setter&& field14_) {
      field14 = std::forward<T_Struct20_field14_struct_setter>(field14_);
      __isset.field14 = true;
      return field14;
    }
  
    float get_field15() const {
      return field15;
    }
  
    float& set_field15(float field15_) {
      field15 = field15_;
      __isset.field15 = true;
      return field15;
    }
    const std::set<std::string>& get_field16() const&;
    std::set<std::string> get_field16() &&;
  
    template <typename T_Struct20_field16_struct_setter>
    std::set<std::string>& set_field16(T_Struct20_field16_struct_setter&& field16_) {
      field16 = std::forward<T_Struct20_field16_struct_setter>(field16_);
      __isset.field16 = true;
      return field16;
    }
  
    int64_t get_field17() const {
      return field17;
    }
  
    int64_t& set_field17(int64_t field17_) {
      field17 = field17_;
      __isset.field17 = true;
      return field17;
    }
    const  ::example::thrift32::Struct2& get_field18() const&;
     ::example::thrift32::Struct2 get_field18() &&;
  
    template <typename T_Struct20_field18_struct_setter>
     ::example::thrift32::Struct2& set_field18(T_Struct20_field18_struct_setter&& field18_) {
      field18 = std::forward<T_Struct20_field18_struct_setter>(field18_);
      __isset.field18 = true;
      return field18;
    }
    const std::set<std::string>& get_field19() const&;
    std::set<std::string> get_field19() &&;
  
    template <typename T_Struct20_field19_struct_setter>
    std::set<std::string>& set_field19(T_Struct20_field19_struct_setter&& field19_) {
      field19 = std::forward<T_Struct20_field19_struct_setter>(field19_);
      __isset.field19 = true;
      return field19;
    }
  
    int8_t get_field20() const {
      return field20;
    }
  
    int8_t& set_field20(int8_t field20_) {
      field20 = field20_;
      __isset.field20 = true;
      return field20;
    }
    const std::map<int8_t, int32_t>& get_field21() const&;
    std::map<int8_t, int32_t> get_field21() &&;
  
    template <typename T_Struct20_field21_struct_setter>
    std::map<int8_t, int32_t>& set_field21(T_Struct20_field21_struct_setter&& field21_) {
      field21 = std::forward<T_Struct20_field21_struct_setter>(field21_);
      __isset.field21 = true;
      return field21;
    }
  
    int32_t get_field22() const {
      return field22;
    }
  
    int32_t& set_field22(int32_t field22_) {
      field22 = field22_;
      __isset.field22 = true;
      return field22;
    }
    const  ::example::thrift32::Struct4& get_field23() const&;
     ::example::thrift32::Struct4 get_field23() &&;
  
    template <typename T_Struct20_field23_struct_setter>
     ::example::thrift32::Struct4& set_field23(T_Struct20_field23_struct_setter&& field23_) {
      field23 = std::forward<T_Struct20_field23_struct_setter>(field23_);
      __isset.field23 = true;
      return field23;
    }
    const std::map<std::map<double, std::string>,  ::example::thrift32::Struct13>& get_field24() const&;
    std::map<std::map<double, std::string>,  ::example::thrift32::Struct13> get_field24() &&;
  
    template <typename T_Struct20_field24_struct_setter>
    std::map<std::map<double, std::string>,  ::example::thrift32::Struct13>& set_field24(T_Struct20_field24_struct_setter&& field24_) {
      field24 = std::forward<T_Struct20_field24_struct_setter>(field24_);
      __isset.field24 = true;
      return field24;
    }
  
    template <class Protocol_>
    uint32_t 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:
    static void translateFieldName(FOLLY_MAYBE_UNUSED folly::StringPiece _fname, FOLLY_MAYBE_UNUSED int16_t& fid, FOLLY_MAYBE_UNUSED apache::thrift::protocol::TType& _ftype);
  };
  
  void swap(Struct20& a, Struct20& b);
  extern template uint32_t Struct20::read<>(apache::thrift::BinaryProtocolReader*);
  extern template uint32_t Struct20::write<>(apache::thrift::BinaryProtocolWriter*) const;
  extern template uint32_t Struct20::serializedSize<>(apache::thrift::BinaryProtocolWriter const*) const;
  extern template uint32_t Struct20::serializedSizeZC<>(apache::thrift::BinaryProtocolWriter const*) const;
  extern template uint32_t Struct20::read<>(apache::thrift::CompactProtocolReader*);
  extern template uint32_t Struct20::write<>(apache::thrift::CompactProtocolWriter*) const;
  extern template uint32_t Struct20::serializedSize<>(apache::thrift::CompactProtocolWriter const*) const;
  extern template uint32_t Struct20::serializedSizeZC<>(apache::thrift::CompactProtocolWriter const*) const;
  
  }} // example::thrift32
  namespace apache { namespace thrift {
  
  template <> inline void Cpp2Ops< ::example::thrift32::Struct20>::clear( ::example::thrift32::Struct20* obj) {
    return obj->__clear();
  }
  
  template <> inline constexpr apache::thrift::protocol::TType Cpp2Ops< ::example::thrift32::Struct20>::thriftType() {
    return apache::thrift::protocol::T_STRUCT;
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct20>::write(Protocol* proto,  ::example::thrift32::Struct20 const* obj) {
    return obj->write(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct20>::read(Protocol* proto,  ::example::thrift32::Struct20* obj) {
    return obj->read(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct20>::serializedSize(Protocol const* proto,  ::example::thrift32::Struct20 const* obj) {
    return obj->serializedSize(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct20>::serializedSizeZC(Protocol const* proto,  ::example::thrift32::Struct20 const* obj) {
    return obj->serializedSizeZC(proto);
  }
  
  }} // apache::thrift
  namespace example { namespace thrift32 {
  
  class Struct21 : private apache::thrift::detail::st::ComparisonOperators<Struct21> {
   public:
  
    Struct21() :
        field5(0),
        field6(0),
        field9(0) {}
    // FragileConstructor for use in initialization lists only
  
    Struct21(apache::thrift::FragileConstructor,  ::example::thrift32::Struct10 field1__arg, std::string field2__arg, std::set<std::vector<int64_t>> field3__arg, std::set<double> field4__arg, int32_t field5__arg, int8_t field6__arg,  ::example::thrift32::Struct14 field7__arg, std::map<double, std::set<double>> field8__arg, int8_t field9__arg, std::map<int64_t, std::set<std::string>> field10__arg) :
        field1(std::move(field1__arg)),
        field2(std::move(field2__arg)),
        field3(std::move(field3__arg)),
        field4(std::move(field4__arg)),
        field5(std::move(field5__arg)),
        field6(std::move(field6__arg)),
        field7(std::move(field7__arg)),
        field8(std::move(field8__arg)),
        field9(std::move(field9__arg)),
        field10(std::move(field10__arg)) {
      __isset.field1 = true;
      __isset.field2 = true;
      __isset.field3 = true;
      __isset.field4 = true;
      __isset.field5 = true;
      __isset.field6 = true;
      __isset.field7 = true;
      __isset.field8 = true;
      __isset.field9 = true;
      __isset.field10 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct21(::apache::thrift::detail::argument_wrapper<1, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct21(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field1 = arg.move();
      __isset.field1 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct21(::apache::thrift::detail::argument_wrapper<2, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct21(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field2 = arg.move();
      __isset.field2 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct21(::apache::thrift::detail::argument_wrapper<3, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct21(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field3 = arg.move();
      __isset.field3 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct21(::apache::thrift::detail::argument_wrapper<4, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct21(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field4 = arg.move();
      __isset.field4 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct21(::apache::thrift::detail::argument_wrapper<5, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct21(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field5 = arg.move();
      __isset.field5 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct21(::apache::thrift::detail::argument_wrapper<6, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct21(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field6 = arg.move();
      __isset.field6 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct21(::apache::thrift::detail::argument_wrapper<7, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct21(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field7 = arg.move();
      __isset.field7 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct21(::apache::thrift::detail::argument_wrapper<8, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct21(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field8 = arg.move();
      __isset.field8 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct21(::apache::thrift::detail::argument_wrapper<9, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct21(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field9 = arg.move();
      __isset.field9 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct21(::apache::thrift::detail::argument_wrapper<10, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct21(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field10 = arg.move();
      __isset.field10 = true;
    }
  
    Struct21(Struct21&&) = default;
  
    Struct21(const Struct21&) = default;
  
    Struct21& operator=(Struct21&&) = default;
  
    Struct21& operator=(const Struct21&) = default;
    void __clear();
  
    virtual ~Struct21() {}
  
     ::example::thrift32::Struct10 field1;
    std::string field2;
    std::set<std::vector<int64_t>> field3;
    std::set<double> field4;
    int32_t field5;
    int8_t field6;
     ::example::thrift32::Struct14 field7;
    std::map<double, std::set<double>> field8;
    int8_t field9;
    std::map<int64_t, std::set<std::string>> field10;
  
    struct __isset {
      void __clear() {
        field1 = false;
        field2 = false;
        field3 = false;
        field4 = false;
        field5 = false;
        field6 = false;
        field7 = false;
        field8 = false;
        field9 = false;
        field10 = false;
      }
  
      bool field1 = false;
      bool field2 = false;
      bool field3 = false;
      bool field4 = false;
      bool field5 = false;
      bool field6 = false;
      bool field7 = false;
      bool field8 = false;
      bool field9 = false;
      bool field10 = false;
    } __isset;
    bool operator==(const Struct21& rhs) const;
  
    bool operator < (const Struct21& rhs) const {
      if (!(field1 == rhs.field1)) {
        return field1 < rhs.field1;
      }
      if (!(field2 == rhs.field2)) {
        return field2 < rhs.field2;
      }
      if (!(field3 == rhs.field3)) {
        return field3 < rhs.field3;
      }
      if (!(field4 == rhs.field4)) {
        return field4 < rhs.field4;
      }
      if (!(field5 == rhs.field5)) {
        return field5 < rhs.field5;
      }
      if (!(field6 == rhs.field6)) {
        return field6 < rhs.field6;
      }
      if (!(field7 == rhs.field7)) {
        return field7 < rhs.field7;
      }
      if (!(field8 == rhs.field8)) {
        return field8 < rhs.field8;
      }
      if (!(field9 == rhs.field9)) {
        return field9 < rhs.field9;
      }
      if (!(field10 == rhs.field10)) {
        return field10 < rhs.field10;
      }
      (void)rhs;
      return false;
    }
    const  ::example::thrift32::Struct10& get_field1() const&;
     ::example::thrift32::Struct10 get_field1() &&;
  
    template <typename T_Struct21_field1_struct_setter>
     ::example::thrift32::Struct10& set_field1(T_Struct21_field1_struct_setter&& field1_) {
      field1 = std::forward<T_Struct21_field1_struct_setter>(field1_);
      __isset.field1 = true;
      return field1;
    }
  
    const std::string& get_field2() const& {
      return field2;
    }
  
    std::string get_field2() && {
      return std::move(field2);
    }
  
    template <typename T_Struct21_field2_struct_setter>
    std::string& set_field2(T_Struct21_field2_struct_setter&& field2_) {
      field2 = std::forward<T_Struct21_field2_struct_setter>(field2_);
      __isset.field2 = true;
      return field2;
    }
    const std::set<std::vector<int64_t>>& get_field3() const&;
    std::set<std::vector<int64_t>> get_field3() &&;
  
    template <typename T_Struct21_field3_struct_setter>
    std::set<std::vector<int64_t>>& set_field3(T_Struct21_field3_struct_setter&& field3_) {
      field3 = std::forward<T_Struct21_field3_struct_setter>(field3_);
      __isset.field3 = true;
      return field3;
    }
    const std::set<double>& get_field4() const&;
    std::set<double> get_field4() &&;
  
    template <typename T_Struct21_field4_struct_setter>
    std::set<double>& set_field4(T_Struct21_field4_struct_setter&& field4_) {
      field4 = std::forward<T_Struct21_field4_struct_setter>(field4_);
      __isset.field4 = true;
      return field4;
    }
  
    int32_t get_field5() const {
      return field5;
    }
  
    int32_t& set_field5(int32_t field5_) {
      field5 = field5_;
      __isset.field5 = true;
      return field5;
    }
  
    int8_t get_field6() const {
      return field6;
    }
  
    int8_t& set_field6(int8_t field6_) {
      field6 = field6_;
      __isset.field6 = true;
      return field6;
    }
    const  ::example::thrift32::Struct14& get_field7() const&;
     ::example::thrift32::Struct14 get_field7() &&;
  
    template <typename T_Struct21_field7_struct_setter>
     ::example::thrift32::Struct14& set_field7(T_Struct21_field7_struct_setter&& field7_) {
      field7 = std::forward<T_Struct21_field7_struct_setter>(field7_);
      __isset.field7 = true;
      return field7;
    }
    const std::map<double, std::set<double>>& get_field8() const&;
    std::map<double, std::set<double>> get_field8() &&;
  
    template <typename T_Struct21_field8_struct_setter>
    std::map<double, std::set<double>>& set_field8(T_Struct21_field8_struct_setter&& field8_) {
      field8 = std::forward<T_Struct21_field8_struct_setter>(field8_);
      __isset.field8 = true;
      return field8;
    }
  
    int8_t get_field9() const {
      return field9;
    }
  
    int8_t& set_field9(int8_t field9_) {
      field9 = field9_;
      __isset.field9 = true;
      return field9;
    }
    const std::map<int64_t, std::set<std::string>>& get_field10() const&;
    std::map<int64_t, std::set<std::string>> get_field10() &&;
  
    template <typename T_Struct21_field10_struct_setter>
    std::map<int64_t, std::set<std::string>>& set_field10(T_Struct21_field10_struct_setter&& field10_) {
      field10 = std::forward<T_Struct21_field10_struct_setter>(field10_);
      __isset.field10 = true;
      return field10;
    }
  
    template <class Protocol_>
    uint32_t 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:
    static void translateFieldName(FOLLY_MAYBE_UNUSED folly::StringPiece _fname, FOLLY_MAYBE_UNUSED int16_t& fid, FOLLY_MAYBE_UNUSED apache::thrift::protocol::TType& _ftype);
  };
  
  void swap(Struct21& a, Struct21& b);
  extern template uint32_t Struct21::read<>(apache::thrift::BinaryProtocolReader*);
  extern template uint32_t Struct21::write<>(apache::thrift::BinaryProtocolWriter*) const;
  extern template uint32_t Struct21::serializedSize<>(apache::thrift::BinaryProtocolWriter const*) const;
  extern template uint32_t Struct21::serializedSizeZC<>(apache::thrift::BinaryProtocolWriter const*) const;
  extern template uint32_t Struct21::read<>(apache::thrift::CompactProtocolReader*);
  extern template uint32_t Struct21::write<>(apache::thrift::CompactProtocolWriter*) const;
  extern template uint32_t Struct21::serializedSize<>(apache::thrift::CompactProtocolWriter const*) const;
  extern template uint32_t Struct21::serializedSizeZC<>(apache::thrift::CompactProtocolWriter const*) const;
  
  }} // example::thrift32
  namespace apache { namespace thrift {
  
  template <> inline void Cpp2Ops< ::example::thrift32::Struct21>::clear( ::example::thrift32::Struct21* obj) {
    return obj->__clear();
  }
  
  template <> inline constexpr apache::thrift::protocol::TType Cpp2Ops< ::example::thrift32::Struct21>::thriftType() {
    return apache::thrift::protocol::T_STRUCT;
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct21>::write(Protocol* proto,  ::example::thrift32::Struct21 const* obj) {
    return obj->write(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct21>::read(Protocol* proto,  ::example::thrift32::Struct21* obj) {
    return obj->read(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct21>::serializedSize(Protocol const* proto,  ::example::thrift32::Struct21 const* obj) {
    return obj->serializedSize(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct21>::serializedSizeZC(Protocol const* proto,  ::example::thrift32::Struct21 const* obj) {
    return obj->serializedSizeZC(proto);
  }
  
  }} // apache::thrift
  namespace example { namespace thrift32 {
  
  class Struct22 : private apache::thrift::detail::st::ComparisonOperators<Struct22> {
   public:
  
    Struct22() :
        field3(0),
        field4(0),
        field5(0),
        field6(0),
        field7(0),
        field10(0),
        field11(0),
        field13(0) {}
    // FragileConstructor for use in initialization lists only
  
    Struct22(apache::thrift::FragileConstructor, std::set<int32_t> field1__arg, std::map<std::string, std::map<int32_t, std::string>> field2__arg, int32_t field3__arg, int16_t field4__arg, double field5__arg, bool field6__arg, int8_t field7__arg, std::string field8__arg, std::string field9__arg, int64_t field10__arg, int8_t field11__arg, std::vector<double> field12__arg, double field13__arg, std::set<float> field14__arg, std::vector<int16_t> field15__arg, std::string field16__arg, std::map<std::string, bool> field17__arg,  ::example::thrift32::Struct6 field18__arg) :
        field1(std::move(field1__arg)),
        field2(std::move(field2__arg)),
        field3(std::move(field3__arg)),
        field4(std::move(field4__arg)),
        field5(std::move(field5__arg)),
        field6(std::move(field6__arg)),
        field7(std::move(field7__arg)),
        field8(std::move(field8__arg)),
        field9(std::move(field9__arg)),
        field10(std::move(field10__arg)),
        field11(std::move(field11__arg)),
        field12(std::move(field12__arg)),
        field13(std::move(field13__arg)),
        field14(std::move(field14__arg)),
        field15(std::move(field15__arg)),
        field16(std::move(field16__arg)),
        field17(std::move(field17__arg)),
        field18(std::move(field18__arg)) {
      __isset.field1 = true;
      __isset.field2 = true;
      __isset.field3 = true;
      __isset.field4 = true;
      __isset.field5 = true;
      __isset.field6 = true;
      __isset.field7 = true;
      __isset.field8 = true;
      __isset.field9 = true;
      __isset.field10 = true;
      __isset.field11 = true;
      __isset.field12 = true;
      __isset.field13 = true;
      __isset.field14 = true;
      __isset.field15 = true;
      __isset.field16 = true;
      __isset.field17 = true;
      __isset.field18 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct22(::apache::thrift::detail::argument_wrapper<1, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct22(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field1 = arg.move();
      __isset.field1 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct22(::apache::thrift::detail::argument_wrapper<2, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct22(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field2 = arg.move();
      __isset.field2 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct22(::apache::thrift::detail::argument_wrapper<3, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct22(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field3 = arg.move();
      __isset.field3 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct22(::apache::thrift::detail::argument_wrapper<4, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct22(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field4 = arg.move();
      __isset.field4 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct22(::apache::thrift::detail::argument_wrapper<5, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct22(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field5 = arg.move();
      __isset.field5 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct22(::apache::thrift::detail::argument_wrapper<6, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct22(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field6 = arg.move();
      __isset.field6 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct22(::apache::thrift::detail::argument_wrapper<7, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct22(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field7 = arg.move();
      __isset.field7 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct22(::apache::thrift::detail::argument_wrapper<8, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct22(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field8 = arg.move();
      __isset.field8 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct22(::apache::thrift::detail::argument_wrapper<9, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct22(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field9 = arg.move();
      __isset.field9 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct22(::apache::thrift::detail::argument_wrapper<10, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct22(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field10 = arg.move();
      __isset.field10 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct22(::apache::thrift::detail::argument_wrapper<11, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct22(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field11 = arg.move();
      __isset.field11 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct22(::apache::thrift::detail::argument_wrapper<12, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct22(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field12 = arg.move();
      __isset.field12 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct22(::apache::thrift::detail::argument_wrapper<13, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct22(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field13 = arg.move();
      __isset.field13 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct22(::apache::thrift::detail::argument_wrapper<14, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct22(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field14 = arg.move();
      __isset.field14 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct22(::apache::thrift::detail::argument_wrapper<15, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct22(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field15 = arg.move();
      __isset.field15 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct22(::apache::thrift::detail::argument_wrapper<16, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct22(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field16 = arg.move();
      __isset.field16 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct22(::apache::thrift::detail::argument_wrapper<17, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct22(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field17 = arg.move();
      __isset.field17 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct22(::apache::thrift::detail::argument_wrapper<18, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct22(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field18 = arg.move();
      __isset.field18 = true;
    }
  
    Struct22(Struct22&&) = default;
  
    Struct22(const Struct22&) = default;
  
    Struct22& operator=(Struct22&&) = default;
  
    Struct22& operator=(const Struct22&) = default;
    void __clear();
  
    virtual ~Struct22() {}
  
    std::set<int32_t> field1;
    std::map<std::string, std::map<int32_t, std::string>> field2;
    int32_t field3;
    int16_t field4;
    double field5;
    bool field6;
    int8_t field7;
    std::string field8;
    std::string field9;
    int64_t field10;
    int8_t field11;
    std::vector<double> field12;
    double field13;
    std::set<float> field14;
    std::vector<int16_t> field15;
    std::string field16;
    std::map<std::string, bool> field17;
     ::example::thrift32::Struct6 field18;
  
    struct __isset {
      void __clear() {
        field1 = false;
        field2 = false;
        field3 = false;
        field4 = false;
        field5 = false;
        field6 = false;
        field7 = false;
        field8 = false;
        field9 = false;
        field10 = false;
        field11 = false;
        field12 = false;
        field13 = false;
        field14 = false;
        field15 = false;
        field16 = false;
        field17 = false;
        field18 = false;
      }
  
      bool field1 = false;
      bool field2 = false;
      bool field3 = false;
      bool field4 = false;
      bool field5 = false;
      bool field6 = false;
      bool field7 = false;
      bool field8 = false;
      bool field9 = false;
      bool field10 = false;
      bool field11 = false;
      bool field12 = false;
      bool field13 = false;
      bool field14 = false;
      bool field15 = false;
      bool field16 = false;
      bool field17 = false;
      bool field18 = false;
    } __isset;
    bool operator==(const Struct22& rhs) const;
  
    bool operator < (const Struct22& rhs) const {
      if (!(field1 == rhs.field1)) {
        return field1 < rhs.field1;
      }
      if (!(field2 == rhs.field2)) {
        return field2 < rhs.field2;
      }
      if (!(field3 == rhs.field3)) {
        return field3 < rhs.field3;
      }
      if (!(field4 == rhs.field4)) {
        return field4 < rhs.field4;
      }
      if (!(field5 == rhs.field5)) {
        return field5 < rhs.field5;
      }
      if (!(field6 == rhs.field6)) {
        return field6 < rhs.field6;
      }
      if (!(field7 == rhs.field7)) {
        return field7 < rhs.field7;
      }
      if (!(field8 == rhs.field8)) {
        return field8 < rhs.field8;
      }
      if (!(field9 == rhs.field9)) {
        return field9 < rhs.field9;
      }
      if (!(field10 == rhs.field10)) {
        return field10 < rhs.field10;
      }
      if (!(field11 == rhs.field11)) {
        return field11 < rhs.field11;
      }
      if (!(field12 == rhs.field12)) {
        return field12 < rhs.field12;
      }
      if (!(field13 == rhs.field13)) {
        return field13 < rhs.field13;
      }
      if (!(field14 == rhs.field14)) {
        return field14 < rhs.field14;
      }
      if (!(field15 == rhs.field15)) {
        return field15 < rhs.field15;
      }
      if (!(field16 == rhs.field16)) {
        return field16 < rhs.field16;
      }
      if (!(field17 == rhs.field17)) {
        return field17 < rhs.field17;
      }
      if (!(field18 == rhs.field18)) {
        return field18 < rhs.field18;
      }
      (void)rhs;
      return false;
    }
    const std::set<int32_t>& get_field1() const&;
    std::set<int32_t> get_field1() &&;
  
    template <typename T_Struct22_field1_struct_setter>
    std::set<int32_t>& set_field1(T_Struct22_field1_struct_setter&& field1_) {
      field1 = std::forward<T_Struct22_field1_struct_setter>(field1_);
      __isset.field1 = true;
      return field1;
    }
    const std::map<std::string, std::map<int32_t, std::string>>& get_field2() const&;
    std::map<std::string, std::map<int32_t, std::string>> get_field2() &&;
  
    template <typename T_Struct22_field2_struct_setter>
    std::map<std::string, std::map<int32_t, std::string>>& set_field2(T_Struct22_field2_struct_setter&& field2_) {
      field2 = std::forward<T_Struct22_field2_struct_setter>(field2_);
      __isset.field2 = true;
      return field2;
    }
  
    int32_t get_field3() const {
      return field3;
    }
  
    int32_t& set_field3(int32_t field3_) {
      field3 = field3_;
      __isset.field3 = true;
      return field3;
    }
  
    int16_t get_field4() const {
      return field4;
    }
  
    int16_t& set_field4(int16_t field4_) {
      field4 = field4_;
      __isset.field4 = true;
      return field4;
    }
  
    double get_field5() const {
      return field5;
    }
  
    double& set_field5(double field5_) {
      field5 = field5_;
      __isset.field5 = true;
      return field5;
    }
  
    bool get_field6() const {
      return field6;
    }
  
    bool& set_field6(bool field6_) {
      field6 = field6_;
      __isset.field6 = true;
      return field6;
    }
  
    int8_t get_field7() const {
      return field7;
    }
  
    int8_t& set_field7(int8_t field7_) {
      field7 = field7_;
      __isset.field7 = true;
      return field7;
    }
  
    const std::string& get_field8() const& {
      return field8;
    }
  
    std::string get_field8() && {
      return std::move(field8);
    }
  
    template <typename T_Struct22_field8_struct_setter>
    std::string& set_field8(T_Struct22_field8_struct_setter&& field8_) {
      field8 = std::forward<T_Struct22_field8_struct_setter>(field8_);
      __isset.field8 = true;
      return field8;
    }
  
    const std::string& get_field9() const& {
      return field9;
    }
  
    std::string get_field9() && {
      return std::move(field9);
    }
  
    template <typename T_Struct22_field9_struct_setter>
    std::string& set_field9(T_Struct22_field9_struct_setter&& field9_) {
      field9 = std::forward<T_Struct22_field9_struct_setter>(field9_);
      __isset.field9 = true;
      return field9;
    }
  
    int64_t get_field10() const {
      return field10;
    }
  
    int64_t& set_field10(int64_t field10_) {
      field10 = field10_;
      __isset.field10 = true;
      return field10;
    }
  
    int8_t get_field11() const {
      return field11;
    }
  
    int8_t& set_field11(int8_t field11_) {
      field11 = field11_;
      __isset.field11 = true;
      return field11;
    }
    const std::vector<double>& get_field12() const&;
    std::vector<double> get_field12() &&;
  
    template <typename T_Struct22_field12_struct_setter>
    std::vector<double>& set_field12(T_Struct22_field12_struct_setter&& field12_) {
      field12 = std::forward<T_Struct22_field12_struct_setter>(field12_);
      __isset.field12 = true;
      return field12;
    }
  
    double get_field13() const {
      return field13;
    }
  
    double& set_field13(double field13_) {
      field13 = field13_;
      __isset.field13 = true;
      return field13;
    }
    const std::set<float>& get_field14() const&;
    std::set<float> get_field14() &&;
  
    template <typename T_Struct22_field14_struct_setter>
    std::set<float>& set_field14(T_Struct22_field14_struct_setter&& field14_) {
      field14 = std::forward<T_Struct22_field14_struct_setter>(field14_);
      __isset.field14 = true;
      return field14;
    }
    const std::vector<int16_t>& get_field15() const&;
    std::vector<int16_t> get_field15() &&;
  
    template <typename T_Struct22_field15_struct_setter>
    std::vector<int16_t>& set_field15(T_Struct22_field15_struct_setter&& field15_) {
      field15 = std::forward<T_Struct22_field15_struct_setter>(field15_);
      __isset.field15 = true;
      return field15;
    }
  
    const std::string& get_field16() const& {
      return field16;
    }
  
    std::string get_field16() && {
      return std::move(field16);
    }
  
    template <typename T_Struct22_field16_struct_setter>
    std::string& set_field16(T_Struct22_field16_struct_setter&& field16_) {
      field16 = std::forward<T_Struct22_field16_struct_setter>(field16_);
      __isset.field16 = true;
      return field16;
    }
    const std::map<std::string, bool>& get_field17() const&;
    std::map<std::string, bool> get_field17() &&;
  
    template <typename T_Struct22_field17_struct_setter>
    std::map<std::string, bool>& set_field17(T_Struct22_field17_struct_setter&& field17_) {
      field17 = std::forward<T_Struct22_field17_struct_setter>(field17_);
      __isset.field17 = true;
      return field17;
    }
    const  ::example::thrift32::Struct6& get_field18() const&;
     ::example::thrift32::Struct6 get_field18() &&;
  
    template <typename T_Struct22_field18_struct_setter>
     ::example::thrift32::Struct6& set_field18(T_Struct22_field18_struct_setter&& field18_) {
      field18 = std::forward<T_Struct22_field18_struct_setter>(field18_);
      __isset.field18 = true;
      return field18;
    }
  
    template <class Protocol_>
    uint32_t 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:
    static void translateFieldName(FOLLY_MAYBE_UNUSED folly::StringPiece _fname, FOLLY_MAYBE_UNUSED int16_t& fid, FOLLY_MAYBE_UNUSED apache::thrift::protocol::TType& _ftype);
  };
  
  void swap(Struct22& a, Struct22& b);
  extern template uint32_t Struct22::read<>(apache::thrift::BinaryProtocolReader*);
  extern template uint32_t Struct22::write<>(apache::thrift::BinaryProtocolWriter*) const;
  extern template uint32_t Struct22::serializedSize<>(apache::thrift::BinaryProtocolWriter const*) const;
  extern template uint32_t Struct22::serializedSizeZC<>(apache::thrift::BinaryProtocolWriter const*) const;
  extern template uint32_t Struct22::read<>(apache::thrift::CompactProtocolReader*);
  extern template uint32_t Struct22::write<>(apache::thrift::CompactProtocolWriter*) const;
  extern template uint32_t Struct22::serializedSize<>(apache::thrift::CompactProtocolWriter const*) const;
  extern template uint32_t Struct22::serializedSizeZC<>(apache::thrift::CompactProtocolWriter const*) const;
  
  }} // example::thrift32
  namespace apache { namespace thrift {
  
  template <> inline void Cpp2Ops< ::example::thrift32::Struct22>::clear( ::example::thrift32::Struct22* obj) {
    return obj->__clear();
  }
  
  template <> inline constexpr apache::thrift::protocol::TType Cpp2Ops< ::example::thrift32::Struct22>::thriftType() {
    return apache::thrift::protocol::T_STRUCT;
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct22>::write(Protocol* proto,  ::example::thrift32::Struct22 const* obj) {
    return obj->write(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct22>::read(Protocol* proto,  ::example::thrift32::Struct22* obj) {
    return obj->read(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct22>::serializedSize(Protocol const* proto,  ::example::thrift32::Struct22 const* obj) {
    return obj->serializedSize(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct22>::serializedSizeZC(Protocol const* proto,  ::example::thrift32::Struct22 const* obj) {
    return obj->serializedSizeZC(proto);
  }
  
  }} // apache::thrift
  namespace example { namespace thrift32 {
  
  class Struct23 : private apache::thrift::detail::st::ComparisonOperators<Struct23> {
   public:
  
    Struct23() :
        field3(0),
        field7(0),
        field10(0),
        field11(0),
        field12(0) {}
    // FragileConstructor for use in initialization lists only
  
    Struct23(apache::thrift::FragileConstructor, std::map<std::string, std::string> field1__arg, std::vector<std::set<float>> field2__arg, int64_t field3__arg, std::vector<int64_t> field4__arg, std::vector<std::map<double, int16_t>> field5__arg,  ::example::thrift32::Struct18 field6__arg, double field7__arg,  ::example::thrift32::Struct12 field8__arg, std::map<std::vector<float>, int8_t> field9__arg, int8_t field10__arg, float field11__arg, bool field12__arg) :
        field1(std::move(field1__arg)),
        field2(std::move(field2__arg)),
        field3(std::move(field3__arg)),
        field4(std::move(field4__arg)),
        field5(std::move(field5__arg)),
        field6(std::move(field6__arg)),
        field7(std::move(field7__arg)),
        field8(std::move(field8__arg)),
        field9(std::move(field9__arg)),
        field10(std::move(field10__arg)),
        field11(std::move(field11__arg)),
        field12(std::move(field12__arg)) {
      __isset.field1 = true;
      __isset.field2 = true;
      __isset.field3 = true;
      __isset.field4 = true;
      __isset.field5 = true;
      __isset.field6 = true;
      __isset.field7 = true;
      __isset.field8 = true;
      __isset.field9 = true;
      __isset.field10 = true;
      __isset.field11 = true;
      __isset.field12 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct23(::apache::thrift::detail::argument_wrapper<1, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct23(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field1 = arg.move();
      __isset.field1 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct23(::apache::thrift::detail::argument_wrapper<2, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct23(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field2 = arg.move();
      __isset.field2 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct23(::apache::thrift::detail::argument_wrapper<3, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct23(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field3 = arg.move();
      __isset.field3 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct23(::apache::thrift::detail::argument_wrapper<4, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct23(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field4 = arg.move();
      __isset.field4 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct23(::apache::thrift::detail::argument_wrapper<5, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct23(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field5 = arg.move();
      __isset.field5 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct23(::apache::thrift::detail::argument_wrapper<6, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct23(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field6 = arg.move();
      __isset.field6 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct23(::apache::thrift::detail::argument_wrapper<7, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct23(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field7 = arg.move();
      __isset.field7 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct23(::apache::thrift::detail::argument_wrapper<8, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct23(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field8 = arg.move();
      __isset.field8 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct23(::apache::thrift::detail::argument_wrapper<9, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct23(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field9 = arg.move();
      __isset.field9 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct23(::apache::thrift::detail::argument_wrapper<10, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct23(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field10 = arg.move();
      __isset.field10 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct23(::apache::thrift::detail::argument_wrapper<11, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct23(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field11 = arg.move();
      __isset.field11 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct23(::apache::thrift::detail::argument_wrapper<12, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct23(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field12 = arg.move();
      __isset.field12 = true;
    }
  
    Struct23(Struct23&&) = default;
  
    Struct23(const Struct23&) = default;
  
    Struct23& operator=(Struct23&&) = default;
  
    Struct23& operator=(const Struct23&) = default;
    void __clear();
  
    virtual ~Struct23() {}
  
    std::map<std::string, std::string> field1;
    std::vector<std::set<float>> field2;
    int64_t field3;
    std::vector<int64_t> field4;
    std::vector<std::map<double, int16_t>> field5;
     ::example::thrift32::Struct18 field6;
    double field7;
     ::example::thrift32::Struct12 field8;
    std::map<std::vector<float>, int8_t> field9;
    int8_t field10;
    float field11;
    bool field12;
  
    struct __isset {
      void __clear() {
        field1 = false;
        field2 = false;
        field3 = false;
        field4 = false;
        field5 = false;
        field6 = false;
        field7 = false;
        field8 = false;
        field9 = false;
        field10 = false;
        field11 = false;
        field12 = false;
      }
  
      bool field1 = false;
      bool field2 = false;
      bool field3 = false;
      bool field4 = false;
      bool field5 = false;
      bool field6 = false;
      bool field7 = false;
      bool field8 = false;
      bool field9 = false;
      bool field10 = false;
      bool field11 = false;
      bool field12 = false;
    } __isset;
    bool operator==(const Struct23& rhs) const;
  
    bool operator < (const Struct23& rhs) const {
      if (!(field1 == rhs.field1)) {
        return field1 < rhs.field1;
      }
      if (!(field2 == rhs.field2)) {
        return field2 < rhs.field2;
      }
      if (!(field3 == rhs.field3)) {
        return field3 < rhs.field3;
      }
      if (!(field4 == rhs.field4)) {
        return field4 < rhs.field4;
      }
      if (!(field5 == rhs.field5)) {
        return field5 < rhs.field5;
      }
      if (!(field6 == rhs.field6)) {
        return field6 < rhs.field6;
      }
      if (!(field7 == rhs.field7)) {
        return field7 < rhs.field7;
      }
      if (!(field8 == rhs.field8)) {
        return field8 < rhs.field8;
      }
      if (!(field9 == rhs.field9)) {
        return field9 < rhs.field9;
      }
      if (!(field10 == rhs.field10)) {
        return field10 < rhs.field10;
      }
      if (!(field11 == rhs.field11)) {
        return field11 < rhs.field11;
      }
      if (!(field12 == rhs.field12)) {
        return field12 < rhs.field12;
      }
      (void)rhs;
      return false;
    }
    const std::map<std::string, std::string>& get_field1() const&;
    std::map<std::string, std::string> get_field1() &&;
  
    template <typename T_Struct23_field1_struct_setter>
    std::map<std::string, std::string>& set_field1(T_Struct23_field1_struct_setter&& field1_) {
      field1 = std::forward<T_Struct23_field1_struct_setter>(field1_);
      __isset.field1 = true;
      return field1;
    }
    const std::vector<std::set<float>>& get_field2() const&;
    std::vector<std::set<float>> get_field2() &&;
  
    template <typename T_Struct23_field2_struct_setter>
    std::vector<std::set<float>>& set_field2(T_Struct23_field2_struct_setter&& field2_) {
      field2 = std::forward<T_Struct23_field2_struct_setter>(field2_);
      __isset.field2 = true;
      return field2;
    }
  
    int64_t get_field3() const {
      return field3;
    }
  
    int64_t& set_field3(int64_t field3_) {
      field3 = field3_;
      __isset.field3 = true;
      return field3;
    }
    const std::vector<int64_t>& get_field4() const&;
    std::vector<int64_t> get_field4() &&;
  
    template <typename T_Struct23_field4_struct_setter>
    std::vector<int64_t>& set_field4(T_Struct23_field4_struct_setter&& field4_) {
      field4 = std::forward<T_Struct23_field4_struct_setter>(field4_);
      __isset.field4 = true;
      return field4;
    }
    const std::vector<std::map<double, int16_t>>& get_field5() const&;
    std::vector<std::map<double, int16_t>> get_field5() &&;
  
    template <typename T_Struct23_field5_struct_setter>
    std::vector<std::map<double, int16_t>>& set_field5(T_Struct23_field5_struct_setter&& field5_) {
      field5 = std::forward<T_Struct23_field5_struct_setter>(field5_);
      __isset.field5 = true;
      return field5;
    }
    const  ::example::thrift32::Struct18& get_field6() const&;
     ::example::thrift32::Struct18 get_field6() &&;
  
    template <typename T_Struct23_field6_struct_setter>
     ::example::thrift32::Struct18& set_field6(T_Struct23_field6_struct_setter&& field6_) {
      field6 = std::forward<T_Struct23_field6_struct_setter>(field6_);
      __isset.field6 = true;
      return field6;
    }
  
    double get_field7() const {
      return field7;
    }
  
    double& set_field7(double field7_) {
      field7 = field7_;
      __isset.field7 = true;
      return field7;
    }
    const  ::example::thrift32::Struct12& get_field8() const&;
     ::example::thrift32::Struct12 get_field8() &&;
  
    template <typename T_Struct23_field8_struct_setter>
     ::example::thrift32::Struct12& set_field8(T_Struct23_field8_struct_setter&& field8_) {
      field8 = std::forward<T_Struct23_field8_struct_setter>(field8_);
      __isset.field8 = true;
      return field8;
    }
    const std::map<std::vector<float>, int8_t>& get_field9() const&;
    std::map<std::vector<float>, int8_t> get_field9() &&;
  
    template <typename T_Struct23_field9_struct_setter>
    std::map<std::vector<float>, int8_t>& set_field9(T_Struct23_field9_struct_setter&& field9_) {
      field9 = std::forward<T_Struct23_field9_struct_setter>(field9_);
      __isset.field9 = true;
      return field9;
    }
  
    int8_t get_field10() const {
      return field10;
    }
  
    int8_t& set_field10(int8_t field10_) {
      field10 = field10_;
      __isset.field10 = true;
      return field10;
    }
  
    float get_field11() const {
      return field11;
    }
  
    float& set_field11(float field11_) {
      field11 = field11_;
      __isset.field11 = true;
      return field11;
    }
  
    bool get_field12() const {
      return field12;
    }
  
    bool& set_field12(bool field12_) {
      field12 = field12_;
      __isset.field12 = true;
      return field12;
    }
  
    template <class Protocol_>
    uint32_t 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:
    static void translateFieldName(FOLLY_MAYBE_UNUSED folly::StringPiece _fname, FOLLY_MAYBE_UNUSED int16_t& fid, FOLLY_MAYBE_UNUSED apache::thrift::protocol::TType& _ftype);
  };
  
  void swap(Struct23& a, Struct23& b);
  extern template uint32_t Struct23::read<>(apache::thrift::BinaryProtocolReader*);
  extern template uint32_t Struct23::write<>(apache::thrift::BinaryProtocolWriter*) const;
  extern template uint32_t Struct23::serializedSize<>(apache::thrift::BinaryProtocolWriter const*) const;
  extern template uint32_t Struct23::serializedSizeZC<>(apache::thrift::BinaryProtocolWriter const*) const;
  extern template uint32_t Struct23::read<>(apache::thrift::CompactProtocolReader*);
  extern template uint32_t Struct23::write<>(apache::thrift::CompactProtocolWriter*) const;
  extern template uint32_t Struct23::serializedSize<>(apache::thrift::CompactProtocolWriter const*) const;
  extern template uint32_t Struct23::serializedSizeZC<>(apache::thrift::CompactProtocolWriter const*) const;
  
  }} // example::thrift32
  namespace apache { namespace thrift {
  
  template <> inline void Cpp2Ops< ::example::thrift32::Struct23>::clear( ::example::thrift32::Struct23* obj) {
    return obj->__clear();
  }
  
  template <> inline constexpr apache::thrift::protocol::TType Cpp2Ops< ::example::thrift32::Struct23>::thriftType() {
    return apache::thrift::protocol::T_STRUCT;
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct23>::write(Protocol* proto,  ::example::thrift32::Struct23 const* obj) {
    return obj->write(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct23>::read(Protocol* proto,  ::example::thrift32::Struct23* obj) {
    return obj->read(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct23>::serializedSize(Protocol const* proto,  ::example::thrift32::Struct23 const* obj) {
    return obj->serializedSize(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct23>::serializedSizeZC(Protocol const* proto,  ::example::thrift32::Struct23 const* obj) {
    return obj->serializedSizeZC(proto);
  }
  
  }} // apache::thrift
  namespace example { namespace thrift32 {
  
  class Struct24 : private apache::thrift::detail::st::ComparisonOperators<Struct24> {
   public:
  
    Struct24() :
        field1(0),
        field3(0),
        field6(0),
        field17(0) {}
    // FragileConstructor for use in initialization lists only
  
    Struct24(apache::thrift::FragileConstructor, int64_t field1__arg, std::vector<double> field2__arg, bool field3__arg, std::map<std::string, std::string> field4__arg, std::vector<int32_t> field5__arg, int32_t field6__arg, std::map<std::string, std::string> field7__arg, std::set<int32_t> field8__arg, std::set<int64_t> field9__arg, std::map<int16_t, std::map<bool, float>> field10__arg, std::string field11__arg, std::vector<int64_t> field12__arg, std::map<std::set<int64_t>, bool> field13__arg, std::set<std::string> field14__arg, std::string field15__arg, std::set<std::set<int32_t>> field16__arg, int32_t field17__arg) :
        field1(std::move(field1__arg)),
        field2(std::move(field2__arg)),
        field3(std::move(field3__arg)),
        field4(std::move(field4__arg)),
        field5(std::move(field5__arg)),
        field6(std::move(field6__arg)),
        field7(std::move(field7__arg)),
        field8(std::move(field8__arg)),
        field9(std::move(field9__arg)),
        field10(std::move(field10__arg)),
        field11(std::move(field11__arg)),
        field12(std::move(field12__arg)),
        field13(std::move(field13__arg)),
        field14(std::move(field14__arg)),
        field15(std::move(field15__arg)),
        field16(std::move(field16__arg)),
        field17(std::move(field17__arg)) {
      __isset.field1 = true;
      __isset.field2 = true;
      __isset.field3 = true;
      __isset.field4 = true;
      __isset.field5 = true;
      __isset.field6 = true;
      __isset.field7 = true;
      __isset.field8 = true;
      __isset.field9 = true;
      __isset.field10 = true;
      __isset.field11 = true;
      __isset.field12 = true;
      __isset.field13 = true;
      __isset.field14 = true;
      __isset.field15 = true;
      __isset.field16 = true;
      __isset.field17 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct24(::apache::thrift::detail::argument_wrapper<1, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct24(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field1 = arg.move();
      __isset.field1 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct24(::apache::thrift::detail::argument_wrapper<2, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct24(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field2 = arg.move();
      __isset.field2 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct24(::apache::thrift::detail::argument_wrapper<3, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct24(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field3 = arg.move();
      __isset.field3 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct24(::apache::thrift::detail::argument_wrapper<4, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct24(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field4 = arg.move();
      __isset.field4 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct24(::apache::thrift::detail::argument_wrapper<5, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct24(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field5 = arg.move();
      __isset.field5 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct24(::apache::thrift::detail::argument_wrapper<6, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct24(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field6 = arg.move();
      __isset.field6 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct24(::apache::thrift::detail::argument_wrapper<7, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct24(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field7 = arg.move();
      __isset.field7 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct24(::apache::thrift::detail::argument_wrapper<8, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct24(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field8 = arg.move();
      __isset.field8 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct24(::apache::thrift::detail::argument_wrapper<9, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct24(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field9 = arg.move();
      __isset.field9 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct24(::apache::thrift::detail::argument_wrapper<10, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct24(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field10 = arg.move();
      __isset.field10 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct24(::apache::thrift::detail::argument_wrapper<11, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct24(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field11 = arg.move();
      __isset.field11 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct24(::apache::thrift::detail::argument_wrapper<12, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct24(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field12 = arg.move();
      __isset.field12 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct24(::apache::thrift::detail::argument_wrapper<13, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct24(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field13 = arg.move();
      __isset.field13 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct24(::apache::thrift::detail::argument_wrapper<14, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct24(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field14 = arg.move();
      __isset.field14 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct24(::apache::thrift::detail::argument_wrapper<15, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct24(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field15 = arg.move();
      __isset.field15 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct24(::apache::thrift::detail::argument_wrapper<16, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct24(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field16 = arg.move();
      __isset.field16 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct24(::apache::thrift::detail::argument_wrapper<17, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct24(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field17 = arg.move();
      __isset.field17 = true;
    }
  
    Struct24(Struct24&&) = default;
  
    Struct24(const Struct24&) = default;
  
    Struct24& operator=(Struct24&&) = default;
  
    Struct24& operator=(const Struct24&) = default;
    void __clear();
  
    virtual ~Struct24() {}
  
    int64_t field1;
    std::vector<double> field2;
    bool field3;
    std::map<std::string, std::string> field4;
    std::vector<int32_t> field5;
    int32_t field6;
    std::map<std::string, std::string> field7;
    std::set<int32_t> field8;
    std::set<int64_t> field9;
    std::map<int16_t, std::map<bool, float>> field10;
    std::string field11;
    std::vector<int64_t> field12;
    std::map<std::set<int64_t>, bool> field13;
    std::set<std::string> field14;
    std::string field15;
    std::set<std::set<int32_t>> field16;
    int32_t field17;
  
    struct __isset {
      void __clear() {
        field1 = false;
        field2 = false;
        field3 = false;
        field4 = false;
        field5 = false;
        field6 = false;
        field7 = false;
        field8 = false;
        field9 = false;
        field10 = false;
        field11 = false;
        field12 = false;
        field13 = false;
        field14 = false;
        field15 = false;
        field16 = false;
        field17 = false;
      }
  
      bool field1 = false;
      bool field2 = false;
      bool field3 = false;
      bool field4 = false;
      bool field5 = false;
      bool field6 = false;
      bool field7 = false;
      bool field8 = false;
      bool field9 = false;
      bool field10 = false;
      bool field11 = false;
      bool field12 = false;
      bool field13 = false;
      bool field14 = false;
      bool field15 = false;
      bool field16 = false;
      bool field17 = false;
    } __isset;
    bool operator==(const Struct24& rhs) const;
  
    bool operator < (const Struct24& rhs) const {
      if (!(field1 == rhs.field1)) {
        return field1 < rhs.field1;
      }
      if (!(field2 == rhs.field2)) {
        return field2 < rhs.field2;
      }
      if (!(field3 == rhs.field3)) {
        return field3 < rhs.field3;
      }
      if (!(field4 == rhs.field4)) {
        return field4 < rhs.field4;
      }
      if (!(field5 == rhs.field5)) {
        return field5 < rhs.field5;
      }
      if (!(field6 == rhs.field6)) {
        return field6 < rhs.field6;
      }
      if (!(field7 == rhs.field7)) {
        return field7 < rhs.field7;
      }
      if (!(field8 == rhs.field8)) {
        return field8 < rhs.field8;
      }
      if (!(field9 == rhs.field9)) {
        return field9 < rhs.field9;
      }
      if (!(field10 == rhs.field10)) {
        return field10 < rhs.field10;
      }
      if (!(field11 == rhs.field11)) {
        return field11 < rhs.field11;
      }
      if (!(field12 == rhs.field12)) {
        return field12 < rhs.field12;
      }
      if (!(field13 == rhs.field13)) {
        return field13 < rhs.field13;
      }
      if (!(field14 == rhs.field14)) {
        return field14 < rhs.field14;
      }
      if (!(field15 == rhs.field15)) {
        return field15 < rhs.field15;
      }
      if (!(field16 == rhs.field16)) {
        return field16 < rhs.field16;
      }
      if (!(field17 == rhs.field17)) {
        return field17 < rhs.field17;
      }
      (void)rhs;
      return false;
    }
  
    int64_t get_field1() const {
      return field1;
    }
  
    int64_t& set_field1(int64_t field1_) {
      field1 = field1_;
      __isset.field1 = true;
      return field1;
    }
    const std::vector<double>& get_field2() const&;
    std::vector<double> get_field2() &&;
  
    template <typename T_Struct24_field2_struct_setter>
    std::vector<double>& set_field2(T_Struct24_field2_struct_setter&& field2_) {
      field2 = std::forward<T_Struct24_field2_struct_setter>(field2_);
      __isset.field2 = true;
      return field2;
    }
  
    bool get_field3() const {
      return field3;
    }
  
    bool& set_field3(bool field3_) {
      field3 = field3_;
      __isset.field3 = true;
      return field3;
    }
    const std::map<std::string, std::string>& get_field4() const&;
    std::map<std::string, std::string> get_field4() &&;
  
    template <typename T_Struct24_field4_struct_setter>
    std::map<std::string, std::string>& set_field4(T_Struct24_field4_struct_setter&& field4_) {
      field4 = std::forward<T_Struct24_field4_struct_setter>(field4_);
      __isset.field4 = true;
      return field4;
    }
    const std::vector<int32_t>& get_field5() const&;
    std::vector<int32_t> get_field5() &&;
  
    template <typename T_Struct24_field5_struct_setter>
    std::vector<int32_t>& set_field5(T_Struct24_field5_struct_setter&& field5_) {
      field5 = std::forward<T_Struct24_field5_struct_setter>(field5_);
      __isset.field5 = true;
      return field5;
    }
  
    int32_t get_field6() const {
      return field6;
    }
  
    int32_t& set_field6(int32_t field6_) {
      field6 = field6_;
      __isset.field6 = true;
      return field6;
    }
    const std::map<std::string, std::string>& get_field7() const&;
    std::map<std::string, std::string> get_field7() &&;
  
    template <typename T_Struct24_field7_struct_setter>
    std::map<std::string, std::string>& set_field7(T_Struct24_field7_struct_setter&& field7_) {
      field7 = std::forward<T_Struct24_field7_struct_setter>(field7_);
      __isset.field7 = true;
      return field7;
    }
    const std::set<int32_t>& get_field8() const&;
    std::set<int32_t> get_field8() &&;
  
    template <typename T_Struct24_field8_struct_setter>
    std::set<int32_t>& set_field8(T_Struct24_field8_struct_setter&& field8_) {
      field8 = std::forward<T_Struct24_field8_struct_setter>(field8_);
      __isset.field8 = true;
      return field8;
    }
    const std::set<int64_t>& get_field9() const&;
    std::set<int64_t> get_field9() &&;
  
    template <typename T_Struct24_field9_struct_setter>
    std::set<int64_t>& set_field9(T_Struct24_field9_struct_setter&& field9_) {
      field9 = std::forward<T_Struct24_field9_struct_setter>(field9_);
      __isset.field9 = true;
      return field9;
    }
    const std::map<int16_t, std::map<bool, float>>& get_field10() const&;
    std::map<int16_t, std::map<bool, float>> get_field10() &&;
  
    template <typename T_Struct24_field10_struct_setter>
    std::map<int16_t, std::map<bool, float>>& set_field10(T_Struct24_field10_struct_setter&& field10_) {
      field10 = std::forward<T_Struct24_field10_struct_setter>(field10_);
      __isset.field10 = true;
      return field10;
    }
  
    const std::string& get_field11() const& {
      return field11;
    }
  
    std::string get_field11() && {
      return std::move(field11);
    }
  
    template <typename T_Struct24_field11_struct_setter>
    std::string& set_field11(T_Struct24_field11_struct_setter&& field11_) {
      field11 = std::forward<T_Struct24_field11_struct_setter>(field11_);
      __isset.field11 = true;
      return field11;
    }
    const std::vector<int64_t>& get_field12() const&;
    std::vector<int64_t> get_field12() &&;
  
    template <typename T_Struct24_field12_struct_setter>
    std::vector<int64_t>& set_field12(T_Struct24_field12_struct_setter&& field12_) {
      field12 = std::forward<T_Struct24_field12_struct_setter>(field12_);
      __isset.field12 = true;
      return field12;
    }
    const std::map<std::set<int64_t>, bool>& get_field13() const&;
    std::map<std::set<int64_t>, bool> get_field13() &&;
  
    template <typename T_Struct24_field13_struct_setter>
    std::map<std::set<int64_t>, bool>& set_field13(T_Struct24_field13_struct_setter&& field13_) {
      field13 = std::forward<T_Struct24_field13_struct_setter>(field13_);
      __isset.field13 = true;
      return field13;
    }
    const std::set<std::string>& get_field14() const&;
    std::set<std::string> get_field14() &&;
  
    template <typename T_Struct24_field14_struct_setter>
    std::set<std::string>& set_field14(T_Struct24_field14_struct_setter&& field14_) {
      field14 = std::forward<T_Struct24_field14_struct_setter>(field14_);
      __isset.field14 = true;
      return field14;
    }
  
    const std::string& get_field15() const& {
      return field15;
    }
  
    std::string get_field15() && {
      return std::move(field15);
    }
  
    template <typename T_Struct24_field15_struct_setter>
    std::string& set_field15(T_Struct24_field15_struct_setter&& field15_) {
      field15 = std::forward<T_Struct24_field15_struct_setter>(field15_);
      __isset.field15 = true;
      return field15;
    }
    const std::set<std::set<int32_t>>& get_field16() const&;
    std::set<std::set<int32_t>> get_field16() &&;
  
    template <typename T_Struct24_field16_struct_setter>
    std::set<std::set<int32_t>>& set_field16(T_Struct24_field16_struct_setter&& field16_) {
      field16 = std::forward<T_Struct24_field16_struct_setter>(field16_);
      __isset.field16 = true;
      return field16;
    }
  
    int32_t get_field17() const {
      return field17;
    }
  
    int32_t& set_field17(int32_t field17_) {
      field17 = field17_;
      __isset.field17 = true;
      return field17;
    }
  
    template <class Protocol_>
    uint32_t 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:
    static void translateFieldName(FOLLY_MAYBE_UNUSED folly::StringPiece _fname, FOLLY_MAYBE_UNUSED int16_t& fid, FOLLY_MAYBE_UNUSED apache::thrift::protocol::TType& _ftype);
  };
  
  void swap(Struct24& a, Struct24& b);
  extern template uint32_t Struct24::read<>(apache::thrift::BinaryProtocolReader*);
  extern template uint32_t Struct24::write<>(apache::thrift::BinaryProtocolWriter*) const;
  extern template uint32_t Struct24::serializedSize<>(apache::thrift::BinaryProtocolWriter const*) const;
  extern template uint32_t Struct24::serializedSizeZC<>(apache::thrift::BinaryProtocolWriter const*) const;
  extern template uint32_t Struct24::read<>(apache::thrift::CompactProtocolReader*);
  extern template uint32_t Struct24::write<>(apache::thrift::CompactProtocolWriter*) const;
  extern template uint32_t Struct24::serializedSize<>(apache::thrift::CompactProtocolWriter const*) const;
  extern template uint32_t Struct24::serializedSizeZC<>(apache::thrift::CompactProtocolWriter const*) const;
  
  }} // example::thrift32
  namespace apache { namespace thrift {
  
  template <> inline void Cpp2Ops< ::example::thrift32::Struct24>::clear( ::example::thrift32::Struct24* obj) {
    return obj->__clear();
  }
  
  template <> inline constexpr apache::thrift::protocol::TType Cpp2Ops< ::example::thrift32::Struct24>::thriftType() {
    return apache::thrift::protocol::T_STRUCT;
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct24>::write(Protocol* proto,  ::example::thrift32::Struct24 const* obj) {
    return obj->write(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct24>::read(Protocol* proto,  ::example::thrift32::Struct24* obj) {
    return obj->read(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct24>::serializedSize(Protocol const* proto,  ::example::thrift32::Struct24 const* obj) {
    return obj->serializedSize(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct24>::serializedSizeZC(Protocol const* proto,  ::example::thrift32::Struct24 const* obj) {
    return obj->serializedSizeZC(proto);
  }
  
  }} // apache::thrift
  namespace example { namespace thrift32 {
  
  class Struct25 : private apache::thrift::detail::st::ComparisonOperators<Struct25> {
   public:
  
    Struct25() {}
    // FragileConstructor for use in initialization lists only
  
    Struct25(apache::thrift::FragileConstructor) {}
  
    Struct25(Struct25&&) = default;
  
    Struct25(const Struct25&) = default;
  
    Struct25& operator=(Struct25&&) = default;
  
    Struct25& operator=(const Struct25&) = default;
    void __clear();
  
    virtual ~Struct25() {}
  
    bool operator==(const Struct25& /* rhs */) const;
  
    bool operator < (const Struct25& rhs) const {
      (void)rhs;
      return false;
    }
  
    template <class Protocol_>
    uint32_t 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:
    static void translateFieldName(FOLLY_MAYBE_UNUSED folly::StringPiece _fname, FOLLY_MAYBE_UNUSED int16_t& fid, FOLLY_MAYBE_UNUSED apache::thrift::protocol::TType& _ftype);
  };
  
  void swap(Struct25& a, Struct25& b);
  extern template uint32_t Struct25::read<>(apache::thrift::BinaryProtocolReader*);
  extern template uint32_t Struct25::write<>(apache::thrift::BinaryProtocolWriter*) const;
  extern template uint32_t Struct25::serializedSize<>(apache::thrift::BinaryProtocolWriter const*) const;
  extern template uint32_t Struct25::serializedSizeZC<>(apache::thrift::BinaryProtocolWriter const*) const;
  extern template uint32_t Struct25::read<>(apache::thrift::CompactProtocolReader*);
  extern template uint32_t Struct25::write<>(apache::thrift::CompactProtocolWriter*) const;
  extern template uint32_t Struct25::serializedSize<>(apache::thrift::CompactProtocolWriter const*) const;
  extern template uint32_t Struct25::serializedSizeZC<>(apache::thrift::CompactProtocolWriter const*) const;
  
  }} // example::thrift32
  namespace apache { namespace thrift {
  
  template <> inline void Cpp2Ops< ::example::thrift32::Struct25>::clear( ::example::thrift32::Struct25* obj) {
    return obj->__clear();
  }
  
  template <> inline constexpr apache::thrift::protocol::TType Cpp2Ops< ::example::thrift32::Struct25>::thriftType() {
    return apache::thrift::protocol::T_STRUCT;
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct25>::write(Protocol* proto,  ::example::thrift32::Struct25 const* obj) {
    return obj->write(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct25>::read(Protocol* proto,  ::example::thrift32::Struct25* obj) {
    return obj->read(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct25>::serializedSize(Protocol const* proto,  ::example::thrift32::Struct25 const* obj) {
    return obj->serializedSize(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct25>::serializedSizeZC(Protocol const* proto,  ::example::thrift32::Struct25 const* obj) {
    return obj->serializedSizeZC(proto);
  }
  
  }} // apache::thrift
  namespace example { namespace thrift32 {
  
  class Struct26 : private apache::thrift::detail::st::ComparisonOperators<Struct26> {
   public:
  
    Struct26() :
        field1(0),
        field2(0),
        field3(0),
        field4(0),
        field5(0),
        field7(0),
        field11(0),
        field15(0),
        field16(0),
        field18(0) {}
    // FragileConstructor for use in initialization lists only
  
    Struct26(apache::thrift::FragileConstructor, int8_t field1__arg, bool field2__arg, double field3__arg, int64_t field4__arg, float field5__arg, std::vector<std::set<int16_t>> field6__arg, bool field7__arg, std::vector<std::set<std::string>> field8__arg, std::map<double, int32_t> field9__arg, std::set<int64_t> field10__arg, int32_t field11__arg,  ::example::thrift32::Struct0 field12__arg, std::set<bool> field13__arg, std::vector<int16_t> field14__arg, double field15__arg, int32_t field16__arg, std::set<std::string> field17__arg, double field18__arg) :
        field1(std::move(field1__arg)),
        field2(std::move(field2__arg)),
        field3(std::move(field3__arg)),
        field4(std::move(field4__arg)),
        field5(std::move(field5__arg)),
        field6(std::move(field6__arg)),
        field7(std::move(field7__arg)),
        field8(std::move(field8__arg)),
        field9(std::move(field9__arg)),
        field10(std::move(field10__arg)),
        field11(std::move(field11__arg)),
        field12(std::move(field12__arg)),
        field13(std::move(field13__arg)),
        field14(std::move(field14__arg)),
        field15(std::move(field15__arg)),
        field16(std::move(field16__arg)),
        field17(std::move(field17__arg)),
        field18(std::move(field18__arg)) {
      __isset.field1 = true;
      __isset.field2 = true;
      __isset.field3 = true;
      __isset.field4 = true;
      __isset.field5 = true;
      __isset.field6 = true;
      __isset.field7 = true;
      __isset.field8 = true;
      __isset.field9 = true;
      __isset.field10 = true;
      __isset.field11 = true;
      __isset.field12 = true;
      __isset.field13 = true;
      __isset.field14 = true;
      __isset.field15 = true;
      __isset.field16 = true;
      __isset.field17 = true;
      __isset.field18 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct26(::apache::thrift::detail::argument_wrapper<1, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct26(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field1 = arg.move();
      __isset.field1 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct26(::apache::thrift::detail::argument_wrapper<2, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct26(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field2 = arg.move();
      __isset.field2 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct26(::apache::thrift::detail::argument_wrapper<3, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct26(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field3 = arg.move();
      __isset.field3 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct26(::apache::thrift::detail::argument_wrapper<4, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct26(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field4 = arg.move();
      __isset.field4 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct26(::apache::thrift::detail::argument_wrapper<5, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct26(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field5 = arg.move();
      __isset.field5 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct26(::apache::thrift::detail::argument_wrapper<6, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct26(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field6 = arg.move();
      __isset.field6 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct26(::apache::thrift::detail::argument_wrapper<7, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct26(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field7 = arg.move();
      __isset.field7 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct26(::apache::thrift::detail::argument_wrapper<8, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct26(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field8 = arg.move();
      __isset.field8 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct26(::apache::thrift::detail::argument_wrapper<9, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct26(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field9 = arg.move();
      __isset.field9 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct26(::apache::thrift::detail::argument_wrapper<10, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct26(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field10 = arg.move();
      __isset.field10 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct26(::apache::thrift::detail::argument_wrapper<11, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct26(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field11 = arg.move();
      __isset.field11 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct26(::apache::thrift::detail::argument_wrapper<12, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct26(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field12 = arg.move();
      __isset.field12 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct26(::apache::thrift::detail::argument_wrapper<13, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct26(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field13 = arg.move();
      __isset.field13 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct26(::apache::thrift::detail::argument_wrapper<14, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct26(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field14 = arg.move();
      __isset.field14 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct26(::apache::thrift::detail::argument_wrapper<15, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct26(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field15 = arg.move();
      __isset.field15 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct26(::apache::thrift::detail::argument_wrapper<16, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct26(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field16 = arg.move();
      __isset.field16 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct26(::apache::thrift::detail::argument_wrapper<17, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct26(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field17 = arg.move();
      __isset.field17 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct26(::apache::thrift::detail::argument_wrapper<18, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct26(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field18 = arg.move();
      __isset.field18 = true;
    }
  
    Struct26(Struct26&&) = default;
  
    Struct26(const Struct26&) = default;
  
    Struct26& operator=(Struct26&&) = default;
  
    Struct26& operator=(const Struct26&) = default;
    void __clear();
  
    virtual ~Struct26() {}
  
    int8_t field1;
    bool field2;
    double field3;
    int64_t field4;
    float field5;
    std::vector<std::set<int16_t>> field6;
    bool field7;
    std::vector<std::set<std::string>> field8;
    std::map<double, int32_t> field9;
    std::set<int64_t> field10;
    int32_t field11;
     ::example::thrift32::Struct0 field12;
    std::set<bool> field13;
    std::vector<int16_t> field14;
    double field15;
    int32_t field16;
    std::set<std::string> field17;
    double field18;
  
    struct __isset {
      void __clear() {
        field1 = false;
        field2 = false;
        field3 = false;
        field4 = false;
        field5 = false;
        field6 = false;
        field7 = false;
        field8 = false;
        field9 = false;
        field10 = false;
        field11 = false;
        field12 = false;
        field13 = false;
        field14 = false;
        field15 = false;
        field16 = false;
        field17 = false;
        field18 = false;
      }
  
      bool field1 = false;
      bool field2 = false;
      bool field3 = false;
      bool field4 = false;
      bool field5 = false;
      bool field6 = false;
      bool field7 = false;
      bool field8 = false;
      bool field9 = false;
      bool field10 = false;
      bool field11 = false;
      bool field12 = false;
      bool field13 = false;
      bool field14 = false;
      bool field15 = false;
      bool field16 = false;
      bool field17 = false;
      bool field18 = false;
    } __isset;
    bool operator==(const Struct26& rhs) const;
  
    bool operator < (const Struct26& rhs) const {
      if (!(field1 == rhs.field1)) {
        return field1 < rhs.field1;
      }
      if (!(field2 == rhs.field2)) {
        return field2 < rhs.field2;
      }
      if (!(field3 == rhs.field3)) {
        return field3 < rhs.field3;
      }
      if (!(field4 == rhs.field4)) {
        return field4 < rhs.field4;
      }
      if (!(field5 == rhs.field5)) {
        return field5 < rhs.field5;
      }
      if (!(field6 == rhs.field6)) {
        return field6 < rhs.field6;
      }
      if (!(field7 == rhs.field7)) {
        return field7 < rhs.field7;
      }
      if (!(field8 == rhs.field8)) {
        return field8 < rhs.field8;
      }
      if (!(field9 == rhs.field9)) {
        return field9 < rhs.field9;
      }
      if (!(field10 == rhs.field10)) {
        return field10 < rhs.field10;
      }
      if (!(field11 == rhs.field11)) {
        return field11 < rhs.field11;
      }
      if (!(field12 == rhs.field12)) {
        return field12 < rhs.field12;
      }
      if (!(field13 == rhs.field13)) {
        return field13 < rhs.field13;
      }
      if (!(field14 == rhs.field14)) {
        return field14 < rhs.field14;
      }
      if (!(field15 == rhs.field15)) {
        return field15 < rhs.field15;
      }
      if (!(field16 == rhs.field16)) {
        return field16 < rhs.field16;
      }
      if (!(field17 == rhs.field17)) {
        return field17 < rhs.field17;
      }
      if (!(field18 == rhs.field18)) {
        return field18 < rhs.field18;
      }
      (void)rhs;
      return false;
    }
  
    int8_t get_field1() const {
      return field1;
    }
  
    int8_t& set_field1(int8_t field1_) {
      field1 = field1_;
      __isset.field1 = true;
      return field1;
    }
  
    bool get_field2() const {
      return field2;
    }
  
    bool& set_field2(bool field2_) {
      field2 = field2_;
      __isset.field2 = true;
      return field2;
    }
  
    double get_field3() const {
      return field3;
    }
  
    double& set_field3(double field3_) {
      field3 = field3_;
      __isset.field3 = true;
      return field3;
    }
  
    int64_t get_field4() const {
      return field4;
    }
  
    int64_t& set_field4(int64_t field4_) {
      field4 = field4_;
      __isset.field4 = true;
      return field4;
    }
  
    float get_field5() const {
      return field5;
    }
  
    float& set_field5(float field5_) {
      field5 = field5_;
      __isset.field5 = true;
      return field5;
    }
    const std::vector<std::set<int16_t>>& get_field6() const&;
    std::vector<std::set<int16_t>> get_field6() &&;
  
    template <typename T_Struct26_field6_struct_setter>
    std::vector<std::set<int16_t>>& set_field6(T_Struct26_field6_struct_setter&& field6_) {
      field6 = std::forward<T_Struct26_field6_struct_setter>(field6_);
      __isset.field6 = true;
      return field6;
    }
  
    bool get_field7() const {
      return field7;
    }
  
    bool& set_field7(bool field7_) {
      field7 = field7_;
      __isset.field7 = true;
      return field7;
    }
    const std::vector<std::set<std::string>>& get_field8() const&;
    std::vector<std::set<std::string>> get_field8() &&;
  
    template <typename T_Struct26_field8_struct_setter>
    std::vector<std::set<std::string>>& set_field8(T_Struct26_field8_struct_setter&& field8_) {
      field8 = std::forward<T_Struct26_field8_struct_setter>(field8_);
      __isset.field8 = true;
      return field8;
    }
    const std::map<double, int32_t>& get_field9() const&;
    std::map<double, int32_t> get_field9() &&;
  
    template <typename T_Struct26_field9_struct_setter>
    std::map<double, int32_t>& set_field9(T_Struct26_field9_struct_setter&& field9_) {
      field9 = std::forward<T_Struct26_field9_struct_setter>(field9_);
      __isset.field9 = true;
      return field9;
    }
    const std::set<int64_t>& get_field10() const&;
    std::set<int64_t> get_field10() &&;
  
    template <typename T_Struct26_field10_struct_setter>
    std::set<int64_t>& set_field10(T_Struct26_field10_struct_setter&& field10_) {
      field10 = std::forward<T_Struct26_field10_struct_setter>(field10_);
      __isset.field10 = true;
      return field10;
    }
  
    int32_t get_field11() const {
      return field11;
    }
  
    int32_t& set_field11(int32_t field11_) {
      field11 = field11_;
      __isset.field11 = true;
      return field11;
    }
    const  ::example::thrift32::Struct0& get_field12() const&;
     ::example::thrift32::Struct0 get_field12() &&;
  
    template <typename T_Struct26_field12_struct_setter>
     ::example::thrift32::Struct0& set_field12(T_Struct26_field12_struct_setter&& field12_) {
      field12 = std::forward<T_Struct26_field12_struct_setter>(field12_);
      __isset.field12 = true;
      return field12;
    }
    const std::set<bool>& get_field13() const&;
    std::set<bool> get_field13() &&;
  
    template <typename T_Struct26_field13_struct_setter>
    std::set<bool>& set_field13(T_Struct26_field13_struct_setter&& field13_) {
      field13 = std::forward<T_Struct26_field13_struct_setter>(field13_);
      __isset.field13 = true;
      return field13;
    }
    const std::vector<int16_t>& get_field14() const&;
    std::vector<int16_t> get_field14() &&;
  
    template <typename T_Struct26_field14_struct_setter>
    std::vector<int16_t>& set_field14(T_Struct26_field14_struct_setter&& field14_) {
      field14 = std::forward<T_Struct26_field14_struct_setter>(field14_);
      __isset.field14 = true;
      return field14;
    }
  
    double get_field15() const {
      return field15;
    }
  
    double& set_field15(double field15_) {
      field15 = field15_;
      __isset.field15 = true;
      return field15;
    }
  
    int32_t get_field16() const {
      return field16;
    }
  
    int32_t& set_field16(int32_t field16_) {
      field16 = field16_;
      __isset.field16 = true;
      return field16;
    }
    const std::set<std::string>& get_field17() const&;
    std::set<std::string> get_field17() &&;
  
    template <typename T_Struct26_field17_struct_setter>
    std::set<std::string>& set_field17(T_Struct26_field17_struct_setter&& field17_) {
      field17 = std::forward<T_Struct26_field17_struct_setter>(field17_);
      __isset.field17 = true;
      return field17;
    }
  
    double get_field18() const {
      return field18;
    }
  
    double& set_field18(double field18_) {
      field18 = field18_;
      __isset.field18 = true;
      return field18;
    }
  
    template <class Protocol_>
    uint32_t 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:
    static void translateFieldName(FOLLY_MAYBE_UNUSED folly::StringPiece _fname, FOLLY_MAYBE_UNUSED int16_t& fid, FOLLY_MAYBE_UNUSED apache::thrift::protocol::TType& _ftype);
  };
  
  void swap(Struct26& a, Struct26& b);
  extern template uint32_t Struct26::read<>(apache::thrift::BinaryProtocolReader*);
  extern template uint32_t Struct26::write<>(apache::thrift::BinaryProtocolWriter*) const;
  extern template uint32_t Struct26::serializedSize<>(apache::thrift::BinaryProtocolWriter const*) const;
  extern template uint32_t Struct26::serializedSizeZC<>(apache::thrift::BinaryProtocolWriter const*) const;
  extern template uint32_t Struct26::read<>(apache::thrift::CompactProtocolReader*);
  extern template uint32_t Struct26::write<>(apache::thrift::CompactProtocolWriter*) const;
  extern template uint32_t Struct26::serializedSize<>(apache::thrift::CompactProtocolWriter const*) const;
  extern template uint32_t Struct26::serializedSizeZC<>(apache::thrift::CompactProtocolWriter const*) const;
  
  }} // example::thrift32
  namespace apache { namespace thrift {
  
  template <> inline void Cpp2Ops< ::example::thrift32::Struct26>::clear( ::example::thrift32::Struct26* obj) {
    return obj->__clear();
  }
  
  template <> inline constexpr apache::thrift::protocol::TType Cpp2Ops< ::example::thrift32::Struct26>::thriftType() {
    return apache::thrift::protocol::T_STRUCT;
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct26>::write(Protocol* proto,  ::example::thrift32::Struct26 const* obj) {
    return obj->write(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct26>::read(Protocol* proto,  ::example::thrift32::Struct26* obj) {
    return obj->read(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct26>::serializedSize(Protocol const* proto,  ::example::thrift32::Struct26 const* obj) {
    return obj->serializedSize(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct26>::serializedSizeZC(Protocol const* proto,  ::example::thrift32::Struct26 const* obj) {
    return obj->serializedSizeZC(proto);
  }
  
  }} // apache::thrift
  namespace example { namespace thrift32 {
  
  class Struct27 : private apache::thrift::detail::st::ComparisonOperators<Struct27> {
   public:
  
    Struct27() :
        field2(0),
        field3(0) {}
    // FragileConstructor for use in initialization lists only
  
    Struct27(apache::thrift::FragileConstructor, std::string field1__arg, bool field2__arg, int16_t field3__arg, std::string field4__arg, std::vector<int16_t> field5__arg) :
        field1(std::move(field1__arg)),
        field2(std::move(field2__arg)),
        field3(std::move(field3__arg)),
        field4(std::move(field4__arg)),
        field5(std::move(field5__arg)) {
      __isset.field1 = true;
      __isset.field2 = true;
      __isset.field3 = true;
      __isset.field4 = true;
      __isset.field5 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct27(::apache::thrift::detail::argument_wrapper<1, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct27(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field1 = arg.move();
      __isset.field1 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct27(::apache::thrift::detail::argument_wrapper<2, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct27(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field2 = arg.move();
      __isset.field2 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct27(::apache::thrift::detail::argument_wrapper<3, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct27(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field3 = arg.move();
      __isset.field3 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct27(::apache::thrift::detail::argument_wrapper<4, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct27(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field4 = arg.move();
      __isset.field4 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct27(::apache::thrift::detail::argument_wrapper<5, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct27(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field5 = arg.move();
      __isset.field5 = true;
    }
  
    Struct27(Struct27&&) = default;
  
    Struct27(const Struct27&) = default;
  
    Struct27& operator=(Struct27&&) = default;
  
    Struct27& operator=(const Struct27&) = default;
    void __clear();
  
    virtual ~Struct27() {}
  
    std::string field1;
    bool field2;
    int16_t field3;
    std::string field4;
    std::vector<int16_t> field5;
  
    struct __isset {
      void __clear() {
        field1 = false;
        field2 = false;
        field3 = false;
        field4 = false;
        field5 = false;
      }
  
      bool field1 = false;
      bool field2 = false;
      bool field3 = false;
      bool field4 = false;
      bool field5 = false;
    } __isset;
    bool operator==(const Struct27& rhs) const;
  
    bool operator < (const Struct27& rhs) const {
      if (!(field1 == rhs.field1)) {
        return field1 < rhs.field1;
      }
      if (!(field2 == rhs.field2)) {
        return field2 < rhs.field2;
      }
      if (!(field3 == rhs.field3)) {
        return field3 < rhs.field3;
      }
      if (!(field4 == rhs.field4)) {
        return field4 < rhs.field4;
      }
      if (!(field5 == rhs.field5)) {
        return field5 < rhs.field5;
      }
      (void)rhs;
      return false;
    }
  
    const std::string& get_field1() const& {
      return field1;
    }
  
    std::string get_field1() && {
      return std::move(field1);
    }
  
    template <typename T_Struct27_field1_struct_setter>
    std::string& set_field1(T_Struct27_field1_struct_setter&& field1_) {
      field1 = std::forward<T_Struct27_field1_struct_setter>(field1_);
      __isset.field1 = true;
      return field1;
    }
  
    bool get_field2() const {
      return field2;
    }
  
    bool& set_field2(bool field2_) {
      field2 = field2_;
      __isset.field2 = true;
      return field2;
    }
  
    int16_t get_field3() const {
      return field3;
    }
  
    int16_t& set_field3(int16_t field3_) {
      field3 = field3_;
      __isset.field3 = true;
      return field3;
    }
  
    const std::string& get_field4() const& {
      return field4;
    }
  
    std::string get_field4() && {
      return std::move(field4);
    }
  
    template <typename T_Struct27_field4_struct_setter>
    std::string& set_field4(T_Struct27_field4_struct_setter&& field4_) {
      field4 = std::forward<T_Struct27_field4_struct_setter>(field4_);
      __isset.field4 = true;
      return field4;
    }
    const std::vector<int16_t>& get_field5() const&;
    std::vector<int16_t> get_field5() &&;
  
    template <typename T_Struct27_field5_struct_setter>
    std::vector<int16_t>& set_field5(T_Struct27_field5_struct_setter&& field5_) {
      field5 = std::forward<T_Struct27_field5_struct_setter>(field5_);
      __isset.field5 = true;
      return field5;
    }
  
    template <class Protocol_>
    uint32_t 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:
    static void translateFieldName(FOLLY_MAYBE_UNUSED folly::StringPiece _fname, FOLLY_MAYBE_UNUSED int16_t& fid, FOLLY_MAYBE_UNUSED apache::thrift::protocol::TType& _ftype);
  };
  
  void swap(Struct27& a, Struct27& b);
  extern template uint32_t Struct27::read<>(apache::thrift::BinaryProtocolReader*);
  extern template uint32_t Struct27::write<>(apache::thrift::BinaryProtocolWriter*) const;
  extern template uint32_t Struct27::serializedSize<>(apache::thrift::BinaryProtocolWriter const*) const;
  extern template uint32_t Struct27::serializedSizeZC<>(apache::thrift::BinaryProtocolWriter const*) const;
  extern template uint32_t Struct27::read<>(apache::thrift::CompactProtocolReader*);
  extern template uint32_t Struct27::write<>(apache::thrift::CompactProtocolWriter*) const;
  extern template uint32_t Struct27::serializedSize<>(apache::thrift::CompactProtocolWriter const*) const;
  extern template uint32_t Struct27::serializedSizeZC<>(apache::thrift::CompactProtocolWriter const*) const;
  
  }} // example::thrift32
  namespace apache { namespace thrift {
  
  template <> inline void Cpp2Ops< ::example::thrift32::Struct27>::clear( ::example::thrift32::Struct27* obj) {
    return obj->__clear();
  }
  
  template <> inline constexpr apache::thrift::protocol::TType Cpp2Ops< ::example::thrift32::Struct27>::thriftType() {
    return apache::thrift::protocol::T_STRUCT;
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct27>::write(Protocol* proto,  ::example::thrift32::Struct27 const* obj) {
    return obj->write(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct27>::read(Protocol* proto,  ::example::thrift32::Struct27* obj) {
    return obj->read(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct27>::serializedSize(Protocol const* proto,  ::example::thrift32::Struct27 const* obj) {
    return obj->serializedSize(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct27>::serializedSizeZC(Protocol const* proto,  ::example::thrift32::Struct27 const* obj) {
    return obj->serializedSizeZC(proto);
  }
  
  }} // apache::thrift
  namespace example { namespace thrift32 {
  
  class Struct28 : private apache::thrift::detail::st::ComparisonOperators<Struct28> {
   public:
  
    Struct28() :
        field1(0),
        field3(0),
        field6(0),
        field8(0),
        field9(0),
        field10(0) {}
    // FragileConstructor for use in initialization lists only
  
    Struct28(apache::thrift::FragileConstructor, int64_t field1__arg, std::map<int16_t, bool> field2__arg, double field3__arg, std::vector<int16_t> field4__arg, std::vector<double> field5__arg, int64_t field6__arg, std::vector<float> field7__arg, float field8__arg, double field9__arg, bool field10__arg,  ::example::thrift32::Struct0 field11__arg, std::string field12__arg, std::vector<int64_t> field13__arg) :
        field1(std::move(field1__arg)),
        field2(std::move(field2__arg)),
        field3(std::move(field3__arg)),
        field4(std::move(field4__arg)),
        field5(std::move(field5__arg)),
        field6(std::move(field6__arg)),
        field7(std::move(field7__arg)),
        field8(std::move(field8__arg)),
        field9(std::move(field9__arg)),
        field10(std::move(field10__arg)),
        field11(std::move(field11__arg)),
        field12(std::move(field12__arg)),
        field13(std::move(field13__arg)) {
      __isset.field1 = true;
      __isset.field2 = true;
      __isset.field3 = true;
      __isset.field4 = true;
      __isset.field5 = true;
      __isset.field6 = true;
      __isset.field7 = true;
      __isset.field8 = true;
      __isset.field9 = true;
      __isset.field10 = true;
      __isset.field11 = true;
      __isset.field12 = true;
      __isset.field13 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct28(::apache::thrift::detail::argument_wrapper<1, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct28(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field1 = arg.move();
      __isset.field1 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct28(::apache::thrift::detail::argument_wrapper<2, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct28(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field2 = arg.move();
      __isset.field2 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct28(::apache::thrift::detail::argument_wrapper<3, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct28(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field3 = arg.move();
      __isset.field3 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct28(::apache::thrift::detail::argument_wrapper<4, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct28(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field4 = arg.move();
      __isset.field4 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct28(::apache::thrift::detail::argument_wrapper<5, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct28(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field5 = arg.move();
      __isset.field5 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct28(::apache::thrift::detail::argument_wrapper<6, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct28(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field6 = arg.move();
      __isset.field6 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct28(::apache::thrift::detail::argument_wrapper<7, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct28(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field7 = arg.move();
      __isset.field7 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct28(::apache::thrift::detail::argument_wrapper<8, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct28(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field8 = arg.move();
      __isset.field8 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct28(::apache::thrift::detail::argument_wrapper<9, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct28(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field9 = arg.move();
      __isset.field9 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct28(::apache::thrift::detail::argument_wrapper<10, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct28(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field10 = arg.move();
      __isset.field10 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct28(::apache::thrift::detail::argument_wrapper<11, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct28(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field11 = arg.move();
      __isset.field11 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct28(::apache::thrift::detail::argument_wrapper<12, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct28(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field12 = arg.move();
      __isset.field12 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct28(::apache::thrift::detail::argument_wrapper<13, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct28(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field13 = arg.move();
      __isset.field13 = true;
    }
  
    Struct28(Struct28&&) = default;
  
    Struct28(const Struct28&) = default;
  
    Struct28& operator=(Struct28&&) = default;
  
    Struct28& operator=(const Struct28&) = default;
    void __clear();
  
    virtual ~Struct28() {}
  
    int64_t field1;
    std::map<int16_t, bool> field2;
    double field3;
    std::vector<int16_t> field4;
    std::vector<double> field5;
    int64_t field6;
    std::vector<float> field7;
    float field8;
    double field9;
    bool field10;
     ::example::thrift32::Struct0 field11;
    std::string field12;
    std::vector<int64_t> field13;
  
    struct __isset {
      void __clear() {
        field1 = false;
        field2 = false;
        field3 = false;
        field4 = false;
        field5 = false;
        field6 = false;
        field7 = false;
        field8 = false;
        field9 = false;
        field10 = false;
        field11 = false;
        field12 = false;
        field13 = false;
      }
  
      bool field1 = false;
      bool field2 = false;
      bool field3 = false;
      bool field4 = false;
      bool field5 = false;
      bool field6 = false;
      bool field7 = false;
      bool field8 = false;
      bool field9 = false;
      bool field10 = false;
      bool field11 = false;
      bool field12 = false;
      bool field13 = false;
    } __isset;
    bool operator==(const Struct28& rhs) const;
  
    bool operator < (const Struct28& rhs) const {
      if (!(field1 == rhs.field1)) {
        return field1 < rhs.field1;
      }
      if (!(field2 == rhs.field2)) {
        return field2 < rhs.field2;
      }
      if (!(field3 == rhs.field3)) {
        return field3 < rhs.field3;
      }
      if (!(field4 == rhs.field4)) {
        return field4 < rhs.field4;
      }
      if (!(field5 == rhs.field5)) {
        return field5 < rhs.field5;
      }
      if (!(field6 == rhs.field6)) {
        return field6 < rhs.field6;
      }
      if (!(field7 == rhs.field7)) {
        return field7 < rhs.field7;
      }
      if (!(field8 == rhs.field8)) {
        return field8 < rhs.field8;
      }
      if (!(field9 == rhs.field9)) {
        return field9 < rhs.field9;
      }
      if (!(field10 == rhs.field10)) {
        return field10 < rhs.field10;
      }
      if (!(field11 == rhs.field11)) {
        return field11 < rhs.field11;
      }
      if (!(field12 == rhs.field12)) {
        return field12 < rhs.field12;
      }
      if (!(field13 == rhs.field13)) {
        return field13 < rhs.field13;
      }
      (void)rhs;
      return false;
    }
  
    int64_t get_field1() const {
      return field1;
    }
  
    int64_t& set_field1(int64_t field1_) {
      field1 = field1_;
      __isset.field1 = true;
      return field1;
    }
    const std::map<int16_t, bool>& get_field2() const&;
    std::map<int16_t, bool> get_field2() &&;
  
    template <typename T_Struct28_field2_struct_setter>
    std::map<int16_t, bool>& set_field2(T_Struct28_field2_struct_setter&& field2_) {
      field2 = std::forward<T_Struct28_field2_struct_setter>(field2_);
      __isset.field2 = true;
      return field2;
    }
  
    double get_field3() const {
      return field3;
    }
  
    double& set_field3(double field3_) {
      field3 = field3_;
      __isset.field3 = true;
      return field3;
    }
    const std::vector<int16_t>& get_field4() const&;
    std::vector<int16_t> get_field4() &&;
  
    template <typename T_Struct28_field4_struct_setter>
    std::vector<int16_t>& set_field4(T_Struct28_field4_struct_setter&& field4_) {
      field4 = std::forward<T_Struct28_field4_struct_setter>(field4_);
      __isset.field4 = true;
      return field4;
    }
    const std::vector<double>& get_field5() const&;
    std::vector<double> get_field5() &&;
  
    template <typename T_Struct28_field5_struct_setter>
    std::vector<double>& set_field5(T_Struct28_field5_struct_setter&& field5_) {
      field5 = std::forward<T_Struct28_field5_struct_setter>(field5_);
      __isset.field5 = true;
      return field5;
    }
  
    int64_t get_field6() const {
      return field6;
    }
  
    int64_t& set_field6(int64_t field6_) {
      field6 = field6_;
      __isset.field6 = true;
      return field6;
    }
    const std::vector<float>& get_field7() const&;
    std::vector<float> get_field7() &&;
  
    template <typename T_Struct28_field7_struct_setter>
    std::vector<float>& set_field7(T_Struct28_field7_struct_setter&& field7_) {
      field7 = std::forward<T_Struct28_field7_struct_setter>(field7_);
      __isset.field7 = true;
      return field7;
    }
  
    float get_field8() const {
      return field8;
    }
  
    float& set_field8(float field8_) {
      field8 = field8_;
      __isset.field8 = true;
      return field8;
    }
  
    double get_field9() const {
      return field9;
    }
  
    double& set_field9(double field9_) {
      field9 = field9_;
      __isset.field9 = true;
      return field9;
    }
  
    bool get_field10() const {
      return field10;
    }
  
    bool& set_field10(bool field10_) {
      field10 = field10_;
      __isset.field10 = true;
      return field10;
    }
    const  ::example::thrift32::Struct0& get_field11() const&;
     ::example::thrift32::Struct0 get_field11() &&;
  
    template <typename T_Struct28_field11_struct_setter>
     ::example::thrift32::Struct0& set_field11(T_Struct28_field11_struct_setter&& field11_) {
      field11 = std::forward<T_Struct28_field11_struct_setter>(field11_);
      __isset.field11 = true;
      return field11;
    }
  
    const std::string& get_field12() const& {
      return field12;
    }
  
    std::string get_field12() && {
      return std::move(field12);
    }
  
    template <typename T_Struct28_field12_struct_setter>
    std::string& set_field12(T_Struct28_field12_struct_setter&& field12_) {
      field12 = std::forward<T_Struct28_field12_struct_setter>(field12_);
      __isset.field12 = true;
      return field12;
    }
    const std::vector<int64_t>& get_field13() const&;
    std::vector<int64_t> get_field13() &&;
  
    template <typename T_Struct28_field13_struct_setter>
    std::vector<int64_t>& set_field13(T_Struct28_field13_struct_setter&& field13_) {
      field13 = std::forward<T_Struct28_field13_struct_setter>(field13_);
      __isset.field13 = true;
      return field13;
    }
  
    template <class Protocol_>
    uint32_t 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:
    static void translateFieldName(FOLLY_MAYBE_UNUSED folly::StringPiece _fname, FOLLY_MAYBE_UNUSED int16_t& fid, FOLLY_MAYBE_UNUSED apache::thrift::protocol::TType& _ftype);
  };
  
  void swap(Struct28& a, Struct28& b);
  extern template uint32_t Struct28::read<>(apache::thrift::BinaryProtocolReader*);
  extern template uint32_t Struct28::write<>(apache::thrift::BinaryProtocolWriter*) const;
  extern template uint32_t Struct28::serializedSize<>(apache::thrift::BinaryProtocolWriter const*) const;
  extern template uint32_t Struct28::serializedSizeZC<>(apache::thrift::BinaryProtocolWriter const*) const;
  extern template uint32_t Struct28::read<>(apache::thrift::CompactProtocolReader*);
  extern template uint32_t Struct28::write<>(apache::thrift::CompactProtocolWriter*) const;
  extern template uint32_t Struct28::serializedSize<>(apache::thrift::CompactProtocolWriter const*) const;
  extern template uint32_t Struct28::serializedSizeZC<>(apache::thrift::CompactProtocolWriter const*) const;
  
  }} // example::thrift32
  namespace apache { namespace thrift {
  
  template <> inline void Cpp2Ops< ::example::thrift32::Struct28>::clear( ::example::thrift32::Struct28* obj) {
    return obj->__clear();
  }
  
  template <> inline constexpr apache::thrift::protocol::TType Cpp2Ops< ::example::thrift32::Struct28>::thriftType() {
    return apache::thrift::protocol::T_STRUCT;
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct28>::write(Protocol* proto,  ::example::thrift32::Struct28 const* obj) {
    return obj->write(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct28>::read(Protocol* proto,  ::example::thrift32::Struct28* obj) {
    return obj->read(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct28>::serializedSize(Protocol const* proto,  ::example::thrift32::Struct28 const* obj) {
    return obj->serializedSize(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct28>::serializedSizeZC(Protocol const* proto,  ::example::thrift32::Struct28 const* obj) {
    return obj->serializedSizeZC(proto);
  }
  
  }} // apache::thrift
  namespace example { namespace thrift32 {
  
  class Struct29 : private apache::thrift::detail::st::ComparisonOperators<Struct29> {
   public:
  
    Struct29() :
        field2(0),
        field7(0),
        field10(0),
        field12(0),
        field13(0),
        field14(0),
        field15(0),
        field17(0),
        field18(0),
        field21(0),
        field23(0),
        field25(0),
        field27(0),
        field30(0),
        field33(0),
        field34(0),
        field36(0) {}
    // FragileConstructor for use in initialization lists only
  
    Struct29(apache::thrift::FragileConstructor, std::set<std::map<int16_t,  ::example::thrift32::Struct1>> field1__arg, int8_t field2__arg, std::map<int16_t, int32_t> field3__arg,  ::example::thrift32::Struct2 field4__arg, std::set<std::set< ::example::thrift32::Struct17>> field5__arg, std::vector<std::string> field6__arg, float field7__arg, std::set<int32_t> field8__arg, std::vector<std::string> field9__arg, int64_t field10__arg, std::vector<int64_t> field11__arg, double field12__arg, bool field13__arg, float field14__arg, int8_t field15__arg, std::vector<std::string> field16__arg, int16_t field17__arg, int8_t field18__arg, std::map<bool, float> field19__arg, std::vector<float> field20__arg, int16_t field21__arg, std::map<std::string,  ::example::thrift32::Struct0> field22__arg, double field23__arg,  ::example::thrift32::Struct1 field24__arg, int32_t field25__arg,  ::example::thrift32::Struct0 field26__arg, bool field27__arg, std::set<std::set<std::string>> field28__arg,  ::example::thrift32::Struct3 field29__arg, int8_t field30__arg, std::vector<float> field31__arg, std::vector<double> field32__arg, bool field33__arg, int64_t field34__arg, std::string field35__arg, float field36__arg) :
        field1(std::move(field1__arg)),
        field2(std::move(field2__arg)),
        field3(std::move(field3__arg)),
        field4(std::move(field4__arg)),
        field5(std::move(field5__arg)),
        field6(std::move(field6__arg)),
        field7(std::move(field7__arg)),
        field8(std::move(field8__arg)),
        field9(std::move(field9__arg)),
        field10(std::move(field10__arg)),
        field11(std::move(field11__arg)),
        field12(std::move(field12__arg)),
        field13(std::move(field13__arg)),
        field14(std::move(field14__arg)),
        field15(std::move(field15__arg)),
        field16(std::move(field16__arg)),
        field17(std::move(field17__arg)),
        field18(std::move(field18__arg)),
        field19(std::move(field19__arg)),
        field20(std::move(field20__arg)),
        field21(std::move(field21__arg)),
        field22(std::move(field22__arg)),
        field23(std::move(field23__arg)),
        field24(std::move(field24__arg)),
        field25(std::move(field25__arg)),
        field26(std::move(field26__arg)),
        field27(std::move(field27__arg)),
        field28(std::move(field28__arg)),
        field29(std::move(field29__arg)),
        field30(std::move(field30__arg)),
        field31(std::move(field31__arg)),
        field32(std::move(field32__arg)),
        field33(std::move(field33__arg)),
        field34(std::move(field34__arg)),
        field35(std::move(field35__arg)),
        field36(std::move(field36__arg)) {
      __isset.field1 = true;
      __isset.field2 = true;
      __isset.field3 = true;
      __isset.field4 = true;
      __isset.field5 = true;
      __isset.field6 = true;
      __isset.field7 = true;
      __isset.field8 = true;
      __isset.field9 = true;
      __isset.field10 = true;
      __isset.field11 = true;
      __isset.field12 = true;
      __isset.field13 = true;
      __isset.field14 = true;
      __isset.field15 = true;
      __isset.field16 = true;
      __isset.field17 = true;
      __isset.field18 = true;
      __isset.field19 = true;
      __isset.field20 = true;
      __isset.field21 = true;
      __isset.field22 = true;
      __isset.field23 = true;
      __isset.field24 = true;
      __isset.field25 = true;
      __isset.field26 = true;
      __isset.field27 = true;
      __isset.field28 = true;
      __isset.field29 = true;
      __isset.field30 = true;
      __isset.field31 = true;
      __isset.field32 = true;
      __isset.field33 = true;
      __isset.field34 = true;
      __isset.field35 = true;
      __isset.field36 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct29(::apache::thrift::detail::argument_wrapper<1, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct29(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field1 = arg.move();
      __isset.field1 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct29(::apache::thrift::detail::argument_wrapper<2, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct29(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field2 = arg.move();
      __isset.field2 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct29(::apache::thrift::detail::argument_wrapper<3, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct29(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field3 = arg.move();
      __isset.field3 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct29(::apache::thrift::detail::argument_wrapper<4, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct29(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field4 = arg.move();
      __isset.field4 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct29(::apache::thrift::detail::argument_wrapper<5, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct29(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field5 = arg.move();
      __isset.field5 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct29(::apache::thrift::detail::argument_wrapper<6, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct29(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field6 = arg.move();
      __isset.field6 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct29(::apache::thrift::detail::argument_wrapper<7, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct29(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field7 = arg.move();
      __isset.field7 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct29(::apache::thrift::detail::argument_wrapper<8, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct29(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field8 = arg.move();
      __isset.field8 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct29(::apache::thrift::detail::argument_wrapper<9, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct29(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field9 = arg.move();
      __isset.field9 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct29(::apache::thrift::detail::argument_wrapper<10, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct29(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field10 = arg.move();
      __isset.field10 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct29(::apache::thrift::detail::argument_wrapper<11, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct29(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field11 = arg.move();
      __isset.field11 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct29(::apache::thrift::detail::argument_wrapper<12, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct29(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field12 = arg.move();
      __isset.field12 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct29(::apache::thrift::detail::argument_wrapper<13, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct29(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field13 = arg.move();
      __isset.field13 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct29(::apache::thrift::detail::argument_wrapper<14, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct29(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field14 = arg.move();
      __isset.field14 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct29(::apache::thrift::detail::argument_wrapper<15, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct29(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field15 = arg.move();
      __isset.field15 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct29(::apache::thrift::detail::argument_wrapper<16, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct29(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field16 = arg.move();
      __isset.field16 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct29(::apache::thrift::detail::argument_wrapper<17, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct29(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field17 = arg.move();
      __isset.field17 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct29(::apache::thrift::detail::argument_wrapper<18, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct29(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field18 = arg.move();
      __isset.field18 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct29(::apache::thrift::detail::argument_wrapper<19, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct29(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field19 = arg.move();
      __isset.field19 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct29(::apache::thrift::detail::argument_wrapper<20, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct29(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field20 = arg.move();
      __isset.field20 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct29(::apache::thrift::detail::argument_wrapper<21, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct29(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field21 = arg.move();
      __isset.field21 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct29(::apache::thrift::detail::argument_wrapper<22, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct29(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field22 = arg.move();
      __isset.field22 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct29(::apache::thrift::detail::argument_wrapper<23, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct29(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field23 = arg.move();
      __isset.field23 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct29(::apache::thrift::detail::argument_wrapper<24, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct29(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field24 = arg.move();
      __isset.field24 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct29(::apache::thrift::detail::argument_wrapper<25, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct29(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field25 = arg.move();
      __isset.field25 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct29(::apache::thrift::detail::argument_wrapper<26, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct29(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field26 = arg.move();
      __isset.field26 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct29(::apache::thrift::detail::argument_wrapper<27, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct29(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field27 = arg.move();
      __isset.field27 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct29(::apache::thrift::detail::argument_wrapper<28, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct29(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field28 = arg.move();
      __isset.field28 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct29(::apache::thrift::detail::argument_wrapper<29, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct29(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field29 = arg.move();
      __isset.field29 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct29(::apache::thrift::detail::argument_wrapper<30, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct29(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field30 = arg.move();
      __isset.field30 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct29(::apache::thrift::detail::argument_wrapper<31, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct29(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field31 = arg.move();
      __isset.field31 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct29(::apache::thrift::detail::argument_wrapper<32, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct29(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field32 = arg.move();
      __isset.field32 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct29(::apache::thrift::detail::argument_wrapper<33, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct29(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field33 = arg.move();
      __isset.field33 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct29(::apache::thrift::detail::argument_wrapper<34, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct29(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field34 = arg.move();
      __isset.field34 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct29(::apache::thrift::detail::argument_wrapper<35, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct29(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field35 = arg.move();
      __isset.field35 = true;
    }
    template <typename T__ThriftWrappedArgument__Ctor, typename... Args__ThriftWrappedArgument__Ctor>
    Struct29(::apache::thrift::detail::argument_wrapper<36, T__ThriftWrappedArgument__Ctor> arg, Args__ThriftWrappedArgument__Ctor&&... args):
      Struct29(std::forward<Args__ThriftWrappedArgument__Ctor>(args)...)
    {
      field36 = arg.move();
      __isset.field36 = true;
    }
  
    Struct29(Struct29&&) = default;
  
    Struct29(const Struct29&) = default;
  
    Struct29& operator=(Struct29&&) = default;
  
    Struct29& operator=(const Struct29&) = default;
    void __clear();
  
    virtual ~Struct29() {}
  
    std::set<std::map<int16_t,  ::example::thrift32::Struct1>> field1;
    int8_t field2;
    std::map<int16_t, int32_t> field3;
     ::example::thrift32::Struct2 field4;
    std::set<std::set< ::example::thrift32::Struct17>> field5;
    std::vector<std::string> field6;
    float field7;
    std::set<int32_t> field8;
    std::vector<std::string> field9;
    int64_t field10;
    std::vector<int64_t> field11;
    double field12;
    bool field13;
    float field14;
    int8_t field15;
    std::vector<std::string> field16;
    int16_t field17;
    int8_t field18;
    std::map<bool, float> field19;
    std::vector<float> field20;
    int16_t field21;
    std::map<std::string,  ::example::thrift32::Struct0> field22;
    double field23;
     ::example::thrift32::Struct1 field24;
    int32_t field25;
     ::example::thrift32::Struct0 field26;
    bool field27;
    std::set<std::set<std::string>> field28;
     ::example::thrift32::Struct3 field29;
    int8_t field30;
    std::vector<float> field31;
    std::vector<double> field32;
    bool field33;
    int64_t field34;
    std::string field35;
    float field36;
  
    struct __isset {
      void __clear() {
        field1 = false;
        field2 = false;
        field3 = false;
        field4 = false;
        field5 = false;
        field6 = false;
        field7 = false;
        field8 = false;
        field9 = false;
        field10 = false;
        field11 = false;
        field12 = false;
        field13 = false;
        field14 = false;
        field15 = false;
        field16 = false;
        field17 = false;
        field18 = false;
        field19 = false;
        field20 = false;
        field21 = false;
        field22 = false;
        field23 = false;
        field24 = false;
        field25 = false;
        field26 = false;
        field27 = false;
        field28 = false;
        field29 = false;
        field30 = false;
        field31 = false;
        field32 = false;
        field33 = false;
        field34 = false;
        field35 = false;
        field36 = false;
      }
  
      bool field1 = false;
      bool field2 = false;
      bool field3 = false;
      bool field4 = false;
      bool field5 = false;
      bool field6 = false;
      bool field7 = false;
      bool field8 = false;
      bool field9 = false;
      bool field10 = false;
      bool field11 = false;
      bool field12 = false;
      bool field13 = false;
      bool field14 = false;
      bool field15 = false;
      bool field16 = false;
      bool field17 = false;
      bool field18 = false;
      bool field19 = false;
      bool field20 = false;
      bool field21 = false;
      bool field22 = false;
      bool field23 = false;
      bool field24 = false;
      bool field25 = false;
      bool field26 = false;
      bool field27 = false;
      bool field28 = false;
      bool field29 = false;
      bool field30 = false;
      bool field31 = false;
      bool field32 = false;
      bool field33 = false;
      bool field34 = false;
      bool field35 = false;
      bool field36 = false;
    } __isset;
    bool operator==(const Struct29& rhs) const;
  
    bool operator < (const Struct29& rhs) const {
      if (!(field1 == rhs.field1)) {
        return field1 < rhs.field1;
      }
      if (!(field2 == rhs.field2)) {
        return field2 < rhs.field2;
      }
      if (!(field3 == rhs.field3)) {
        return field3 < rhs.field3;
      }
      if (!(field4 == rhs.field4)) {
        return field4 < rhs.field4;
      }
      if (!(field5 == rhs.field5)) {
        return field5 < rhs.field5;
      }
      if (!(field6 == rhs.field6)) {
        return field6 < rhs.field6;
      }
      if (!(field7 == rhs.field7)) {
        return field7 < rhs.field7;
      }
      if (!(field8 == rhs.field8)) {
        return field8 < rhs.field8;
      }
      if (!(field9 == rhs.field9)) {
        return field9 < rhs.field9;
      }
      if (!(field10 == rhs.field10)) {
        return field10 < rhs.field10;
      }
      if (!(field11 == rhs.field11)) {
        return field11 < rhs.field11;
      }
      if (!(field12 == rhs.field12)) {
        return field12 < rhs.field12;
      }
      if (!(field13 == rhs.field13)) {
        return field13 < rhs.field13;
      }
      if (!(field14 == rhs.field14)) {
        return field14 < rhs.field14;
      }
      if (!(field15 == rhs.field15)) {
        return field15 < rhs.field15;
      }
      if (!(field16 == rhs.field16)) {
        return field16 < rhs.field16;
      }
      if (!(field17 == rhs.field17)) {
        return field17 < rhs.field17;
      }
      if (!(field18 == rhs.field18)) {
        return field18 < rhs.field18;
      }
      if (!(field19 == rhs.field19)) {
        return field19 < rhs.field19;
      }
      if (!(field20 == rhs.field20)) {
        return field20 < rhs.field20;
      }
      if (!(field21 == rhs.field21)) {
        return field21 < rhs.field21;
      }
      if (!(field22 == rhs.field22)) {
        return field22 < rhs.field22;
      }
      if (!(field23 == rhs.field23)) {
        return field23 < rhs.field23;
      }
      if (!(field24 == rhs.field24)) {
        return field24 < rhs.field24;
      }
      if (!(field25 == rhs.field25)) {
        return field25 < rhs.field25;
      }
      if (!(field26 == rhs.field26)) {
        return field26 < rhs.field26;
      }
      if (!(field27 == rhs.field27)) {
        return field27 < rhs.field27;
      }
      if (!(field28 == rhs.field28)) {
        return field28 < rhs.field28;
      }
      if (!(field29 == rhs.field29)) {
        return field29 < rhs.field29;
      }
      if (!(field30 == rhs.field30)) {
        return field30 < rhs.field30;
      }
      if (!(field31 == rhs.field31)) {
        return field31 < rhs.field31;
      }
      if (!(field32 == rhs.field32)) {
        return field32 < rhs.field32;
      }
      if (!(field33 == rhs.field33)) {
        return field33 < rhs.field33;
      }
      if (!(field34 == rhs.field34)) {
        return field34 < rhs.field34;
      }
      if (!(field35 == rhs.field35)) {
        return field35 < rhs.field35;
      }
      if (!(field36 == rhs.field36)) {
        return field36 < rhs.field36;
      }
      (void)rhs;
      return false;
    }
    const std::set<std::map<int16_t,  ::example::thrift32::Struct1>>& get_field1() const&;
    std::set<std::map<int16_t,  ::example::thrift32::Struct1>> get_field1() &&;
  
    template <typename T_Struct29_field1_struct_setter>
    std::set<std::map<int16_t,  ::example::thrift32::Struct1>>& set_field1(T_Struct29_field1_struct_setter&& field1_) {
      field1 = std::forward<T_Struct29_field1_struct_setter>(field1_);
      __isset.field1 = true;
      return field1;
    }
  
    int8_t get_field2() const {
      return field2;
    }
  
    int8_t& set_field2(int8_t field2_) {
      field2 = field2_;
      __isset.field2 = true;
      return field2;
    }
    const std::map<int16_t, int32_t>& get_field3() const&;
    std::map<int16_t, int32_t> get_field3() &&;
  
    template <typename T_Struct29_field3_struct_setter>
    std::map<int16_t, int32_t>& set_field3(T_Struct29_field3_struct_setter&& field3_) {
      field3 = std::forward<T_Struct29_field3_struct_setter>(field3_);
      __isset.field3 = true;
      return field3;
    }
    const  ::example::thrift32::Struct2& get_field4() const&;
     ::example::thrift32::Struct2 get_field4() &&;
  
    template <typename T_Struct29_field4_struct_setter>
     ::example::thrift32::Struct2& set_field4(T_Struct29_field4_struct_setter&& field4_) {
      field4 = std::forward<T_Struct29_field4_struct_setter>(field4_);
      __isset.field4 = true;
      return field4;
    }
    const std::set<std::set< ::example::thrift32::Struct17>>& get_field5() const&;
    std::set<std::set< ::example::thrift32::Struct17>> get_field5() &&;
  
    template <typename T_Struct29_field5_struct_setter>
    std::set<std::set< ::example::thrift32::Struct17>>& set_field5(T_Struct29_field5_struct_setter&& field5_) {
      field5 = std::forward<T_Struct29_field5_struct_setter>(field5_);
      __isset.field5 = true;
      return field5;
    }
    const std::vector<std::string>& get_field6() const&;
    std::vector<std::string> get_field6() &&;
  
    template <typename T_Struct29_field6_struct_setter>
    std::vector<std::string>& set_field6(T_Struct29_field6_struct_setter&& field6_) {
      field6 = std::forward<T_Struct29_field6_struct_setter>(field6_);
      __isset.field6 = true;
      return field6;
    }
  
    float get_field7() const {
      return field7;
    }
  
    float& set_field7(float field7_) {
      field7 = field7_;
      __isset.field7 = true;
      return field7;
    }
    const std::set<int32_t>& get_field8() const&;
    std::set<int32_t> get_field8() &&;
  
    template <typename T_Struct29_field8_struct_setter>
    std::set<int32_t>& set_field8(T_Struct29_field8_struct_setter&& field8_) {
      field8 = std::forward<T_Struct29_field8_struct_setter>(field8_);
      __isset.field8 = true;
      return field8;
    }
    const std::vector<std::string>& get_field9() const&;
    std::vector<std::string> get_field9() &&;
  
    template <typename T_Struct29_field9_struct_setter>
    std::vector<std::string>& set_field9(T_Struct29_field9_struct_setter&& field9_) {
      field9 = std::forward<T_Struct29_field9_struct_setter>(field9_);
      __isset.field9 = true;
      return field9;
    }
  
    int64_t get_field10() const {
      return field10;
    }
  
    int64_t& set_field10(int64_t field10_) {
      field10 = field10_;
      __isset.field10 = true;
      return field10;
    }
    const std::vector<int64_t>& get_field11() const&;
    std::vector<int64_t> get_field11() &&;
  
    template <typename T_Struct29_field11_struct_setter>
    std::vector<int64_t>& set_field11(T_Struct29_field11_struct_setter&& field11_) {
      field11 = std::forward<T_Struct29_field11_struct_setter>(field11_);
      __isset.field11 = true;
      return field11;
    }
  
    double get_field12() const {
      return field12;
    }
  
    double& set_field12(double field12_) {
      field12 = field12_;
      __isset.field12 = true;
      return field12;
    }
  
    bool get_field13() const {
      return field13;
    }
  
    bool& set_field13(bool field13_) {
      field13 = field13_;
      __isset.field13 = true;
      return field13;
    }
  
    float get_field14() const {
      return field14;
    }
  
    float& set_field14(float field14_) {
      field14 = field14_;
      __isset.field14 = true;
      return field14;
    }
  
    int8_t get_field15() const {
      return field15;
    }
  
    int8_t& set_field15(int8_t field15_) {
      field15 = field15_;
      __isset.field15 = true;
      return field15;
    }
    const std::vector<std::string>& get_field16() const&;
    std::vector<std::string> get_field16() &&;
  
    template <typename T_Struct29_field16_struct_setter>
    std::vector<std::string>& set_field16(T_Struct29_field16_struct_setter&& field16_) {
      field16 = std::forward<T_Struct29_field16_struct_setter>(field16_);
      __isset.field16 = true;
      return field16;
    }
  
    int16_t get_field17() const {
      return field17;
    }
  
    int16_t& set_field17(int16_t field17_) {
      field17 = field17_;
      __isset.field17 = true;
      return field17;
    }
  
    int8_t get_field18() const {
      return field18;
    }
  
    int8_t& set_field18(int8_t field18_) {
      field18 = field18_;
      __isset.field18 = true;
      return field18;
    }
    const std::map<bool, float>& get_field19() const&;
    std::map<bool, float> get_field19() &&;
  
    template <typename T_Struct29_field19_struct_setter>
    std::map<bool, float>& set_field19(T_Struct29_field19_struct_setter&& field19_) {
      field19 = std::forward<T_Struct29_field19_struct_setter>(field19_);
      __isset.field19 = true;
      return field19;
    }
    const std::vector<float>& get_field20() const&;
    std::vector<float> get_field20() &&;
  
    template <typename T_Struct29_field20_struct_setter>
    std::vector<float>& set_field20(T_Struct29_field20_struct_setter&& field20_) {
      field20 = std::forward<T_Struct29_field20_struct_setter>(field20_);
      __isset.field20 = true;
      return field20;
    }
  
    int16_t get_field21() const {
      return field21;
    }
  
    int16_t& set_field21(int16_t field21_) {
      field21 = field21_;
      __isset.field21 = true;
      return field21;
    }
    const std::map<std::string,  ::example::thrift32::Struct0>& get_field22() const&;
    std::map<std::string,  ::example::thrift32::Struct0> get_field22() &&;
  
    template <typename T_Struct29_field22_struct_setter>
    std::map<std::string,  ::example::thrift32::Struct0>& set_field22(T_Struct29_field22_struct_setter&& field22_) {
      field22 = std::forward<T_Struct29_field22_struct_setter>(field22_);
      __isset.field22 = true;
      return field22;
    }
  
    double get_field23() const {
      return field23;
    }
  
    double& set_field23(double field23_) {
      field23 = field23_;
      __isset.field23 = true;
      return field23;
    }
    const  ::example::thrift32::Struct1& get_field24() const&;
     ::example::thrift32::Struct1 get_field24() &&;
  
    template <typename T_Struct29_field24_struct_setter>
     ::example::thrift32::Struct1& set_field24(T_Struct29_field24_struct_setter&& field24_) {
      field24 = std::forward<T_Struct29_field24_struct_setter>(field24_);
      __isset.field24 = true;
      return field24;
    }
  
    int32_t get_field25() const {
      return field25;
    }
  
    int32_t& set_field25(int32_t field25_) {
      field25 = field25_;
      __isset.field25 = true;
      return field25;
    }
    const  ::example::thrift32::Struct0& get_field26() const&;
     ::example::thrift32::Struct0 get_field26() &&;
  
    template <typename T_Struct29_field26_struct_setter>
     ::example::thrift32::Struct0& set_field26(T_Struct29_field26_struct_setter&& field26_) {
      field26 = std::forward<T_Struct29_field26_struct_setter>(field26_);
      __isset.field26 = true;
      return field26;
    }
  
    bool get_field27() const {
      return field27;
    }
  
    bool& set_field27(bool field27_) {
      field27 = field27_;
      __isset.field27 = true;
      return field27;
    }
    const std::set<std::set<std::string>>& get_field28() const&;
    std::set<std::set<std::string>> get_field28() &&;
  
    template <typename T_Struct29_field28_struct_setter>
    std::set<std::set<std::string>>& set_field28(T_Struct29_field28_struct_setter&& field28_) {
      field28 = std::forward<T_Struct29_field28_struct_setter>(field28_);
      __isset.field28 = true;
      return field28;
    }
    const  ::example::thrift32::Struct3& get_field29() const&;
     ::example::thrift32::Struct3 get_field29() &&;
  
    template <typename T_Struct29_field29_struct_setter>
     ::example::thrift32::Struct3& set_field29(T_Struct29_field29_struct_setter&& field29_) {
      field29 = std::forward<T_Struct29_field29_struct_setter>(field29_);
      __isset.field29 = true;
      return field29;
    }
  
    int8_t get_field30() const {
      return field30;
    }
  
    int8_t& set_field30(int8_t field30_) {
      field30 = field30_;
      __isset.field30 = true;
      return field30;
    }
    const std::vector<float>& get_field31() const&;
    std::vector<float> get_field31() &&;
  
    template <typename T_Struct29_field31_struct_setter>
    std::vector<float>& set_field31(T_Struct29_field31_struct_setter&& field31_) {
      field31 = std::forward<T_Struct29_field31_struct_setter>(field31_);
      __isset.field31 = true;
      return field31;
    }
    const std::vector<double>& get_field32() const&;
    std::vector<double> get_field32() &&;
  
    template <typename T_Struct29_field32_struct_setter>
    std::vector<double>& set_field32(T_Struct29_field32_struct_setter&& field32_) {
      field32 = std::forward<T_Struct29_field32_struct_setter>(field32_);
      __isset.field32 = true;
      return field32;
    }
  
    bool get_field33() const {
      return field33;
    }
  
    bool& set_field33(bool field33_) {
      field33 = field33_;
      __isset.field33 = true;
      return field33;
    }
  
    int64_t get_field34() const {
      return field34;
    }
  
    int64_t& set_field34(int64_t field34_) {
      field34 = field34_;
      __isset.field34 = true;
      return field34;
    }
  
    const std::string& get_field35() const& {
      return field35;
    }
  
    std::string get_field35() && {
      return std::move(field35);
    }
  
    template <typename T_Struct29_field35_struct_setter>
    std::string& set_field35(T_Struct29_field35_struct_setter&& field35_) {
      field35 = std::forward<T_Struct29_field35_struct_setter>(field35_);
      __isset.field35 = true;
      return field35;
    }
  
    float get_field36() const {
      return field36;
    }
  
    float& set_field36(float field36_) {
      field36 = field36_;
      __isset.field36 = true;
      return field36;
    }
  
    template <class Protocol_>
    uint32_t 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:
    static void translateFieldName(FOLLY_MAYBE_UNUSED folly::StringPiece _fname, FOLLY_MAYBE_UNUSED int16_t& fid, FOLLY_MAYBE_UNUSED apache::thrift::protocol::TType& _ftype);
  };
  
  void swap(Struct29& a, Struct29& b);
  extern template uint32_t Struct29::read<>(apache::thrift::BinaryProtocolReader*);
  extern template uint32_t Struct29::write<>(apache::thrift::BinaryProtocolWriter*) const;
  extern template uint32_t Struct29::serializedSize<>(apache::thrift::BinaryProtocolWriter const*) const;
  extern template uint32_t Struct29::serializedSizeZC<>(apache::thrift::BinaryProtocolWriter const*) const;
  extern template uint32_t Struct29::read<>(apache::thrift::CompactProtocolReader*);
  extern template uint32_t Struct29::write<>(apache::thrift::CompactProtocolWriter*) const;
  extern template uint32_t Struct29::serializedSize<>(apache::thrift::CompactProtocolWriter const*) const;
  extern template uint32_t Struct29::serializedSizeZC<>(apache::thrift::CompactProtocolWriter const*) const;
  
  }} // example::thrift32
  namespace apache { namespace thrift {
  
  template <> inline void Cpp2Ops< ::example::thrift32::Struct29>::clear( ::example::thrift32::Struct29* obj) {
    return obj->__clear();
  }
  
  template <> inline constexpr apache::thrift::protocol::TType Cpp2Ops< ::example::thrift32::Struct29>::thriftType() {
    return apache::thrift::protocol::T_STRUCT;
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct29>::write(Protocol* proto,  ::example::thrift32::Struct29 const* obj) {
    return obj->write(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct29>::read(Protocol* proto,  ::example::thrift32::Struct29* obj) {
    return obj->read(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct29>::serializedSize(Protocol const* proto,  ::example::thrift32::Struct29 const* obj) {
    return obj->serializedSize(proto);
  }
  
  template <> template <class Protocol> uint32_t Cpp2Ops< ::example::thrift32::Struct29>::serializedSizeZC(Protocol const* proto,  ::example::thrift32::Struct29 const* obj) {
    return obj->serializedSizeZC(proto);
  }
  
  }} // apache::thrift
  namespace example { namespace thrift32 {
  
  }} // example::thrift32
  