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

#include  "thrift/compiler/test/fixtures/fatal/gen-cpp2/reflection_dep_B_fatal_types.h"
#include  "thrift/compiler/test/fixtures/fatal/gen-cpp2/reflection_dep_C_fatal_types.h"

#include "thrift/compiler/test/fixtures/fatal/gen-cpp2/module_types.h"
#include "thrift/compiler/test/fixtures/fatal/gen-cpp2/module_fatal.h"

#include <fatal/type/enum.h>
#include <fatal/type/variant_traits.h>

#include <type_traits>

namespace test_cpp2::cpp_reflection {

namespace __fbthrift_refl {
namespace __fbthrift_refl_impl = ::apache::thrift::detail::reflection_impl;
class union1_tenum_traits {
 public:
  using type = ::test_cpp2::cpp_reflection::union1::Type;

 private:
  struct __fbthrift_value_ui {
    using name = __fbthrift_strings_module::__fbthrift_hash_d3ef7de562f9a4a34a9a0b05a112955fdecdd0102c3faae5eeb03a195091a5e4;
    using value = std::integral_constant<type, type::ui>;
    using annotations = __fbthrift_refl_impl::no_annotations;
  };

  struct __fbthrift_value_ud {
    using name = __fbthrift_strings_module::__fbthrift_hash_f0a85e81a4cdc5b0ffa6b6bae7015c00d3cc730d040c955859d3b797aaba3ce9;
    using value = std::integral_constant<type, type::ud>;
    using annotations = __fbthrift_refl_impl::no_annotations;
  };

  struct __fbthrift_value_us {
    using name = __fbthrift_strings_module::__fbthrift_hash_79adb2a2fce5c6ba215fe5f27f532d4e7edbac4b6a5e09e1ef3a08084a904621;
    using value = std::integral_constant<type, type::us>;
    using annotations = __fbthrift_refl_impl::no_annotations;
  };

  struct __fbthrift_value_ue {
    using name = __fbthrift_strings_module::__fbthrift_hash_85acc813ca3f42681de514657891e97b6ebd7aa4bd2673d2b5f82694b40c6c8f;
    using value = std::integral_constant<type, type::ue>;
    using annotations = __fbthrift_refl_impl::no_annotations;
  };

  struct __fbthrift_member {
    using ui = __fbthrift_value_ui;
    using ud = __fbthrift_value_ud;
    using us = __fbthrift_value_us;
    using ue = __fbthrift_value_ue;
  };

 public:
  using name = __fbthrift_strings_module::Type;
  using member = __fbthrift_member;
  using fields = ::fatal::list<
      member::ui,
      member::ud,
      member::us,
      member::ue
  >;

  using annotations = __fbthrift_refl_impl::no_annotations;

  static char const *to_string(type e, char const *fallback) {
    switch (e) {
      case type::ui: return "ui";
      case type::ud: return "ud";
      case type::us: return "us";
      case type::ue: return "ue";
      default: return fallback;
    }
  }
};

class union1_variant_traits {
 private:
  struct __fbthrift_ids {
    using ui = std::integral_constant<::test_cpp2::cpp_reflection::union1::Type, ::test_cpp2::cpp_reflection::union1::Type::ui>;
    using ud = std::integral_constant<::test_cpp2::cpp_reflection::union1::Type, ::test_cpp2::cpp_reflection::union1::Type::ud>;
    using us = std::integral_constant<::test_cpp2::cpp_reflection::union1::Type, ::test_cpp2::cpp_reflection::union1::Type::us>;
    using ue = std::integral_constant<::test_cpp2::cpp_reflection::union1::Type, ::test_cpp2::cpp_reflection::union1::Type::ue>;
  };

  struct __fbthrift_member_ui {
    using name = __fbthrift_strings_module::__fbthrift_hash_d3ef7de562f9a4a34a9a0b05a112955fdecdd0102c3faae5eeb03a195091a5e4;
    using tag = ::apache::thrift::ident::ui;
    static constexpr ::apache::thrift::field_id_t id = 1;
    using type_class = ::apache::thrift::type_class::integral;
    struct setter {
      template <typename... Args>
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union1 &variant, Args &&...args) const {
        return variant.set_ui(std::forward<Args>(args)...);
      }
    };
    struct getter {
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union1 const &variant) const {
        return variant.get_ui();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union1 &variant) const {
        return variant.mutable_ui();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union1 &&variant) const {
        return std::move(variant).move_ui();
      }
    };
  };
  struct __fbthrift_member_ud {
    using name = __fbthrift_strings_module::__fbthrift_hash_f0a85e81a4cdc5b0ffa6b6bae7015c00d3cc730d040c955859d3b797aaba3ce9;
    using tag = ::apache::thrift::ident::ud;
    static constexpr ::apache::thrift::field_id_t id = 3;
    using type_class = ::apache::thrift::type_class::floating_point;
    struct setter {
      template <typename... Args>
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union1 &variant, Args &&...args) const {
        return variant.set_ud(std::forward<Args>(args)...);
      }
    };
    struct getter {
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union1 const &variant) const {
        return variant.get_ud();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union1 &variant) const {
        return variant.mutable_ud();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union1 &&variant) const {
        return std::move(variant).move_ud();
      }
    };
  };
  struct __fbthrift_member_us {
    using name = __fbthrift_strings_module::__fbthrift_hash_79adb2a2fce5c6ba215fe5f27f532d4e7edbac4b6a5e09e1ef3a08084a904621;
    using tag = ::apache::thrift::ident::us;
    static constexpr ::apache::thrift::field_id_t id = 5;
    using type_class = ::apache::thrift::type_class::string;
    struct setter {
      template <typename... Args>
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union1 &variant, Args &&...args) const {
        return variant.set_us(std::forward<Args>(args)...);
      }
    };
    struct getter {
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union1 const &variant) const {
        return variant.get_us();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union1 &variant) const {
        return variant.mutable_us();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union1 &&variant) const {
        return std::move(variant).move_us();
      }
    };
  };
  struct __fbthrift_member_ue {
    using name = __fbthrift_strings_module::__fbthrift_hash_85acc813ca3f42681de514657891e97b6ebd7aa4bd2673d2b5f82694b40c6c8f;
    using tag = ::apache::thrift::ident::ue;
    static constexpr ::apache::thrift::field_id_t id = 7;
    using type_class = ::apache::thrift::type_class::enumeration;
    struct setter {
      template <typename... Args>
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union1 &variant, Args &&...args) const {
        return variant.set_ue(std::forward<Args>(args)...);
      }
    };
    struct getter {
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union1 const &variant) const {
        return variant.get_ue();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union1 &variant) const {
        return variant.mutable_ue();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union1 &&variant) const {
        return std::move(variant).move_ue();
      }
    };
  };

 public:
  using type = ::test_cpp2::cpp_reflection::union1;
  using name = __fbthrift_strings_module::union1;
  using id = type::Type;
  using ids = __fbthrift_ids;
  using descriptors = ::fatal::list<
      ::fatal::variant_member_descriptor<
          ::std::int32_t,
           __fbthrift_ids::ui,
          __fbthrift_member_ui::getter,
          __fbthrift_member_ui::setter,
          ::apache::thrift::reflected_variant_member_metadata<__fbthrift_member_ui>>,
      ::fatal::variant_member_descriptor<
          double,
           __fbthrift_ids::ud,
          __fbthrift_member_ud::getter,
          __fbthrift_member_ud::setter,
          ::apache::thrift::reflected_variant_member_metadata<__fbthrift_member_ud>>,
      ::fatal::variant_member_descriptor<
          ::std::string,
           __fbthrift_ids::us,
          __fbthrift_member_us::getter,
          __fbthrift_member_us::setter,
          ::apache::thrift::reflected_variant_member_metadata<__fbthrift_member_us>>,
      ::fatal::variant_member_descriptor<
          ::test_cpp2::cpp_reflection::enum1,
           __fbthrift_ids::ue,
          __fbthrift_member_ue::getter,
          __fbthrift_member_ue::setter,
          ::apache::thrift::reflected_variant_member_metadata<__fbthrift_member_ue>>
  >;

  using annotations = __fbthrift_refl_impl::no_annotations;

  static id get_id(type const &variant) {
    return variant.getType();
  }

  static bool empty(type const &variant) {
    return variant.getType() == id::__EMPTY__;
  }

  static void clear(type &variant) {
    return apache::thrift::clear(variant);
  }
};
class union2_tenum_traits {
 public:
  using type = ::test_cpp2::cpp_reflection::union2::Type;

 private:
  struct __fbthrift_value_ui_2 {
    using name = __fbthrift_strings_module::__fbthrift_hash_497628310b36454ee3c06bb4744bfbf5c3cebf94d600e9a1620d67fd4b61d850;
    using value = std::integral_constant<type, type::ui_2>;
    using annotations = __fbthrift_refl_impl::no_annotations;
  };

  struct __fbthrift_value_ud_2 {
    using name = __fbthrift_strings_module::__fbthrift_hash_4cb122443fdcc93ce02d0854f1bcf045042abde666a2a2cb80ca70374f4a0930;
    using value = std::integral_constant<type, type::ud_2>;
    using annotations = __fbthrift_refl_impl::no_annotations;
  };

  struct __fbthrift_value_us_2 {
    using name = __fbthrift_strings_module::__fbthrift_hash_80bd95dcdc13bec67066fba5d2acd08024cc8ffd55f03138a4951bb85f354248;
    using value = std::integral_constant<type, type::us_2>;
    using annotations = __fbthrift_refl_impl::no_annotations;
  };

  struct __fbthrift_value_ue_2 {
    using name = __fbthrift_strings_module::__fbthrift_hash_13009491225878db05f406520b14390fe348bed9c4c2f8de4ef0a6f2932b6b74;
    using value = std::integral_constant<type, type::ue_2>;
    using annotations = __fbthrift_refl_impl::no_annotations;
  };

  struct __fbthrift_member {
    using ui_2 = __fbthrift_value_ui_2;
    using ud_2 = __fbthrift_value_ud_2;
    using us_2 = __fbthrift_value_us_2;
    using ue_2 = __fbthrift_value_ue_2;
  };

 public:
  using name = __fbthrift_strings_module::Type;
  using member = __fbthrift_member;
  using fields = ::fatal::list<
      member::ui_2,
      member::ud_2,
      member::us_2,
      member::ue_2
  >;

  using annotations = __fbthrift_refl_impl::no_annotations;

  static char const *to_string(type e, char const *fallback) {
    switch (e) {
      case type::ui_2: return "ui_2";
      case type::ud_2: return "ud_2";
      case type::us_2: return "us_2";
      case type::ue_2: return "ue_2";
      default: return fallback;
    }
  }
};

class union2_variant_traits {
 private:
  struct __fbthrift_ids {
    using ui_2 = std::integral_constant<::test_cpp2::cpp_reflection::union2::Type, ::test_cpp2::cpp_reflection::union2::Type::ui_2>;
    using ud_2 = std::integral_constant<::test_cpp2::cpp_reflection::union2::Type, ::test_cpp2::cpp_reflection::union2::Type::ud_2>;
    using us_2 = std::integral_constant<::test_cpp2::cpp_reflection::union2::Type, ::test_cpp2::cpp_reflection::union2::Type::us_2>;
    using ue_2 = std::integral_constant<::test_cpp2::cpp_reflection::union2::Type, ::test_cpp2::cpp_reflection::union2::Type::ue_2>;
  };

  struct __fbthrift_member_ui_2 {
    using name = __fbthrift_strings_module::__fbthrift_hash_497628310b36454ee3c06bb4744bfbf5c3cebf94d600e9a1620d67fd4b61d850;
    using tag = ::apache::thrift::ident::ui_2;
    static constexpr ::apache::thrift::field_id_t id = 1;
    using type_class = ::apache::thrift::type_class::integral;
    struct setter {
      template <typename... Args>
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union2 &variant, Args &&...args) const {
        return variant.set_ui_2(std::forward<Args>(args)...);
      }
    };
    struct getter {
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union2 const &variant) const {
        return variant.get_ui_2();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union2 &variant) const {
        return variant.mutable_ui_2();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union2 &&variant) const {
        return std::move(variant).move_ui_2();
      }
    };
  };
  struct __fbthrift_member_ud_2 {
    using name = __fbthrift_strings_module::__fbthrift_hash_4cb122443fdcc93ce02d0854f1bcf045042abde666a2a2cb80ca70374f4a0930;
    using tag = ::apache::thrift::ident::ud_2;
    static constexpr ::apache::thrift::field_id_t id = 2;
    using type_class = ::apache::thrift::type_class::floating_point;
    struct setter {
      template <typename... Args>
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union2 &variant, Args &&...args) const {
        return variant.set_ud_2(std::forward<Args>(args)...);
      }
    };
    struct getter {
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union2 const &variant) const {
        return variant.get_ud_2();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union2 &variant) const {
        return variant.mutable_ud_2();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union2 &&variant) const {
        return std::move(variant).move_ud_2();
      }
    };
  };
  struct __fbthrift_member_us_2 {
    using name = __fbthrift_strings_module::__fbthrift_hash_80bd95dcdc13bec67066fba5d2acd08024cc8ffd55f03138a4951bb85f354248;
    using tag = ::apache::thrift::ident::us_2;
    static constexpr ::apache::thrift::field_id_t id = 3;
    using type_class = ::apache::thrift::type_class::string;
    struct setter {
      template <typename... Args>
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union2 &variant, Args &&...args) const {
        return variant.set_us_2(std::forward<Args>(args)...);
      }
    };
    struct getter {
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union2 const &variant) const {
        return variant.get_us_2();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union2 &variant) const {
        return variant.mutable_us_2();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union2 &&variant) const {
        return std::move(variant).move_us_2();
      }
    };
  };
  struct __fbthrift_member_ue_2 {
    using name = __fbthrift_strings_module::__fbthrift_hash_13009491225878db05f406520b14390fe348bed9c4c2f8de4ef0a6f2932b6b74;
    using tag = ::apache::thrift::ident::ue_2;
    static constexpr ::apache::thrift::field_id_t id = 4;
    using type_class = ::apache::thrift::type_class::enumeration;
    struct setter {
      template <typename... Args>
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union2 &variant, Args &&...args) const {
        return variant.set_ue_2(std::forward<Args>(args)...);
      }
    };
    struct getter {
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union2 const &variant) const {
        return variant.get_ue_2();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union2 &variant) const {
        return variant.mutable_ue_2();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union2 &&variant) const {
        return std::move(variant).move_ue_2();
      }
    };
  };

 public:
  using type = ::test_cpp2::cpp_reflection::union2;
  using name = __fbthrift_strings_module::union2;
  using id = type::Type;
  using ids = __fbthrift_ids;
  using descriptors = ::fatal::list<
      ::fatal::variant_member_descriptor<
          ::std::int32_t,
           __fbthrift_ids::ui_2,
          __fbthrift_member_ui_2::getter,
          __fbthrift_member_ui_2::setter,
          ::apache::thrift::reflected_variant_member_metadata<__fbthrift_member_ui_2>>,
      ::fatal::variant_member_descriptor<
          double,
           __fbthrift_ids::ud_2,
          __fbthrift_member_ud_2::getter,
          __fbthrift_member_ud_2::setter,
          ::apache::thrift::reflected_variant_member_metadata<__fbthrift_member_ud_2>>,
      ::fatal::variant_member_descriptor<
          ::std::string,
           __fbthrift_ids::us_2,
          __fbthrift_member_us_2::getter,
          __fbthrift_member_us_2::setter,
          ::apache::thrift::reflected_variant_member_metadata<__fbthrift_member_us_2>>,
      ::fatal::variant_member_descriptor<
          ::test_cpp2::cpp_reflection::enum1,
           __fbthrift_ids::ue_2,
          __fbthrift_member_ue_2::getter,
          __fbthrift_member_ue_2::setter,
          ::apache::thrift::reflected_variant_member_metadata<__fbthrift_member_ue_2>>
  >;

  using annotations = __fbthrift_refl_impl::no_annotations;

  static id get_id(type const &variant) {
    return variant.getType();
  }

  static bool empty(type const &variant) {
    return variant.getType() == id::__EMPTY__;
  }

  static void clear(type &variant) {
    return apache::thrift::clear(variant);
  }
};
class union3_tenum_traits {
 public:
  using type = ::test_cpp2::cpp_reflection::union3::Type;

 private:
  struct __fbthrift_value_ui_3 {
    using name = __fbthrift_strings_module::__fbthrift_hash_d41376c43861639db2ca279ddb2f7954772a666a9606ce6eac17a6b243dd4876;
    using value = std::integral_constant<type, type::ui_3>;
    using annotations = __fbthrift_refl_impl::no_annotations;
  };

  struct __fbthrift_value_ud_3 {
    using name = __fbthrift_strings_module::__fbthrift_hash_7829368593e3b9447417533a3a4e6889f618e7f0b9d7d36f5757bd8a6f0197ed;
    using value = std::integral_constant<type, type::ud_3>;
    using annotations = __fbthrift_refl_impl::no_annotations;
  };

  struct __fbthrift_value_us_3 {
    using name = __fbthrift_strings_module::__fbthrift_hash_c33849b4e01fee9484569654c522b031dd13986d15225cd70e29ec883629fc30;
    using value = std::integral_constant<type, type::us_3>;
    using annotations = __fbthrift_refl_impl::no_annotations;
  };

  struct __fbthrift_value_ue_3 {
    using name = __fbthrift_strings_module::__fbthrift_hash_e5fec08b647c2ff2233c3b2beac96b38cd76a6d9baba07a35c27786104a69b58;
    using value = std::integral_constant<type, type::ue_3>;
    using annotations = __fbthrift_refl_impl::no_annotations;
  };

  struct __fbthrift_member {
    using ui_3 = __fbthrift_value_ui_3;
    using ud_3 = __fbthrift_value_ud_3;
    using us_3 = __fbthrift_value_us_3;
    using ue_3 = __fbthrift_value_ue_3;
  };

 public:
  using name = __fbthrift_strings_module::Type;
  using member = __fbthrift_member;
  using fields = ::fatal::list<
      member::ui_3,
      member::ud_3,
      member::us_3,
      member::ue_3
  >;

  using annotations = __fbthrift_refl_impl::no_annotations;

  static char const *to_string(type e, char const *fallback) {
    switch (e) {
      case type::ui_3: return "ui_3";
      case type::ud_3: return "ud_3";
      case type::us_3: return "us_3";
      case type::ue_3: return "ue_3";
      default: return fallback;
    }
  }
};

class union3_variant_traits {
 private:
  struct __fbthrift_ids {
    using ui_3 = std::integral_constant<::test_cpp2::cpp_reflection::union3::Type, ::test_cpp2::cpp_reflection::union3::Type::ui_3>;
    using ud_3 = std::integral_constant<::test_cpp2::cpp_reflection::union3::Type, ::test_cpp2::cpp_reflection::union3::Type::ud_3>;
    using us_3 = std::integral_constant<::test_cpp2::cpp_reflection::union3::Type, ::test_cpp2::cpp_reflection::union3::Type::us_3>;
    using ue_3 = std::integral_constant<::test_cpp2::cpp_reflection::union3::Type, ::test_cpp2::cpp_reflection::union3::Type::ue_3>;
  };

  struct __fbthrift_member_ui_3 {
    using name = __fbthrift_strings_module::__fbthrift_hash_d41376c43861639db2ca279ddb2f7954772a666a9606ce6eac17a6b243dd4876;
    using tag = ::apache::thrift::ident::ui_3;
    static constexpr ::apache::thrift::field_id_t id = 1;
    using type_class = ::apache::thrift::type_class::integral;
    struct setter {
      template <typename... Args>
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union3 &variant, Args &&...args) const {
        return variant.set_ui_3(std::forward<Args>(args)...);
      }
    };
    struct getter {
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union3 const &variant) const {
        return variant.get_ui_3();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union3 &variant) const {
        return variant.mutable_ui_3();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union3 &&variant) const {
        return std::move(variant).move_ui_3();
      }
    };
  };
  struct __fbthrift_member_ud_3 {
    using name = __fbthrift_strings_module::__fbthrift_hash_7829368593e3b9447417533a3a4e6889f618e7f0b9d7d36f5757bd8a6f0197ed;
    using tag = ::apache::thrift::ident::ud_3;
    static constexpr ::apache::thrift::field_id_t id = 2;
    using type_class = ::apache::thrift::type_class::floating_point;
    struct setter {
      template <typename... Args>
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union3 &variant, Args &&...args) const {
        return variant.set_ud_3(std::forward<Args>(args)...);
      }
    };
    struct getter {
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union3 const &variant) const {
        return variant.get_ud_3();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union3 &variant) const {
        return variant.mutable_ud_3();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union3 &&variant) const {
        return std::move(variant).move_ud_3();
      }
    };
  };
  struct __fbthrift_member_us_3 {
    using name = __fbthrift_strings_module::__fbthrift_hash_c33849b4e01fee9484569654c522b031dd13986d15225cd70e29ec883629fc30;
    using tag = ::apache::thrift::ident::us_3;
    static constexpr ::apache::thrift::field_id_t id = 3;
    using type_class = ::apache::thrift::type_class::string;
    struct setter {
      template <typename... Args>
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union3 &variant, Args &&...args) const {
        return variant.set_us_3(std::forward<Args>(args)...);
      }
    };
    struct getter {
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union3 const &variant) const {
        return variant.get_us_3();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union3 &variant) const {
        return variant.mutable_us_3();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union3 &&variant) const {
        return std::move(variant).move_us_3();
      }
    };
  };
  struct __fbthrift_member_ue_3 {
    using name = __fbthrift_strings_module::__fbthrift_hash_e5fec08b647c2ff2233c3b2beac96b38cd76a6d9baba07a35c27786104a69b58;
    using tag = ::apache::thrift::ident::ue_3;
    static constexpr ::apache::thrift::field_id_t id = 4;
    using type_class = ::apache::thrift::type_class::enumeration;
    struct setter {
      template <typename... Args>
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union3 &variant, Args &&...args) const {
        return variant.set_ue_3(std::forward<Args>(args)...);
      }
    };
    struct getter {
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union3 const &variant) const {
        return variant.get_ue_3();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union3 &variant) const {
        return variant.mutable_ue_3();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union3 &&variant) const {
        return std::move(variant).move_ue_3();
      }
    };
  };

 public:
  using type = ::test_cpp2::cpp_reflection::union3;
  using name = __fbthrift_strings_module::union3;
  using id = type::Type;
  using ids = __fbthrift_ids;
  using descriptors = ::fatal::list<
      ::fatal::variant_member_descriptor<
          ::std::int32_t,
           __fbthrift_ids::ui_3,
          __fbthrift_member_ui_3::getter,
          __fbthrift_member_ui_3::setter,
          ::apache::thrift::reflected_variant_member_metadata<__fbthrift_member_ui_3>>,
      ::fatal::variant_member_descriptor<
          double,
           __fbthrift_ids::ud_3,
          __fbthrift_member_ud_3::getter,
          __fbthrift_member_ud_3::setter,
          ::apache::thrift::reflected_variant_member_metadata<__fbthrift_member_ud_3>>,
      ::fatal::variant_member_descriptor<
          ::std::string,
           __fbthrift_ids::us_3,
          __fbthrift_member_us_3::getter,
          __fbthrift_member_us_3::setter,
          ::apache::thrift::reflected_variant_member_metadata<__fbthrift_member_us_3>>,
      ::fatal::variant_member_descriptor<
          ::test_cpp2::cpp_reflection::enum1,
           __fbthrift_ids::ue_3,
          __fbthrift_member_ue_3::getter,
          __fbthrift_member_ue_3::setter,
          ::apache::thrift::reflected_variant_member_metadata<__fbthrift_member_ue_3>>
  >;

  using annotations = __fbthrift_refl_impl::no_annotations;

  static id get_id(type const &variant) {
    return variant.getType();
  }

  static bool empty(type const &variant) {
    return variant.getType() == id::__EMPTY__;
  }

  static void clear(type &variant) {
    return apache::thrift::clear(variant);
  }
};
class unionA_tenum_traits {
 public:
  using type = ::test_cpp2::cpp_reflection::unionA::Type;

 private:
  struct __fbthrift_value_i {
    using name = __fbthrift_strings_module::__fbthrift_hash_de7d1b721a1e0632b7cf04edf5032c8ecffa9f9a08492152b926f1a5a7e765d7;
    using value = std::integral_constant<type, type::i>;
    using annotations = __fbthrift_refl_impl::no_annotations;
  };

  struct __fbthrift_value_d {
    using name = __fbthrift_strings_module::__fbthrift_hash_18ac3e7343f016890c510e93f935261169d9e3f565436429830faf0934f4f8e4;
    using value = std::integral_constant<type, type::d>;
    using annotations = __fbthrift_refl_impl::no_annotations;
  };

  struct __fbthrift_value_s {
    using name = __fbthrift_strings_module::__fbthrift_hash_043a718774c572bd8a25adbeb1bfcd5c0256ae11cecf9f9c3f925d0e52beaf89;
    using value = std::integral_constant<type, type::s>;
    using annotations = __fbthrift_refl_impl::no_annotations;
  };

  struct __fbthrift_value_e {
    using name = __fbthrift_strings_module::__fbthrift_hash_3f79bb7b435b05321651daefd374cdc681dc06faa65e374e38337b88ca046dea;
    using value = std::integral_constant<type, type::e>;
    using annotations = __fbthrift_refl_impl::no_annotations;
  };

  struct __fbthrift_value_a {
    using name = __fbthrift_strings_module::__fbthrift_hash_ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb;
    using value = std::integral_constant<type, type::a>;
    using annotations = __fbthrift_refl_impl::no_annotations;
  };

  struct __fbthrift_member {
    using i = __fbthrift_value_i;
    using d = __fbthrift_value_d;
    using s = __fbthrift_value_s;
    using e = __fbthrift_value_e;
    using a = __fbthrift_value_a;
  };

 public:
  using name = __fbthrift_strings_module::Type;
  using member = __fbthrift_member;
  using fields = ::fatal::list<
      member::i,
      member::d,
      member::s,
      member::e,
      member::a
  >;

  using annotations = __fbthrift_refl_impl::no_annotations;

  static char const *to_string(type e, char const *fallback) {
    switch (e) {
      case type::i: return "i";
      case type::d: return "d";
      case type::s: return "s";
      case type::e: return "e";
      case type::a: return "a";
      default: return fallback;
    }
  }
};

class unionA_variant_traits {
 private:
  struct __fbthrift_ids {
    using i = std::integral_constant<::test_cpp2::cpp_reflection::unionA::Type, ::test_cpp2::cpp_reflection::unionA::Type::i>;
    using d = std::integral_constant<::test_cpp2::cpp_reflection::unionA::Type, ::test_cpp2::cpp_reflection::unionA::Type::d>;
    using s = std::integral_constant<::test_cpp2::cpp_reflection::unionA::Type, ::test_cpp2::cpp_reflection::unionA::Type::s>;
    using e = std::integral_constant<::test_cpp2::cpp_reflection::unionA::Type, ::test_cpp2::cpp_reflection::unionA::Type::e>;
    using a = std::integral_constant<::test_cpp2::cpp_reflection::unionA::Type, ::test_cpp2::cpp_reflection::unionA::Type::a>;
  };

  struct __fbthrift_member_i {
    using name = __fbthrift_strings_module::__fbthrift_hash_de7d1b721a1e0632b7cf04edf5032c8ecffa9f9a08492152b926f1a5a7e765d7;
    using tag = ::apache::thrift::ident::i;
    static constexpr ::apache::thrift::field_id_t id = 1;
    using type_class = ::apache::thrift::type_class::integral;
    struct setter {
      template <typename... Args>
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::unionA &variant, Args &&...args) const {
        return variant.set_i(std::forward<Args>(args)...);
      }
    };
    struct getter {
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::unionA const &variant) const {
        return variant.get_i();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::unionA &variant) const {
        return variant.mutable_i();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::unionA &&variant) const {
        return std::move(variant).move_i();
      }
    };
  };
  struct __fbthrift_member_d {
    using name = __fbthrift_strings_module::__fbthrift_hash_18ac3e7343f016890c510e93f935261169d9e3f565436429830faf0934f4f8e4;
    using tag = ::apache::thrift::ident::d;
    static constexpr ::apache::thrift::field_id_t id = 2;
    using type_class = ::apache::thrift::type_class::floating_point;
    struct setter {
      template <typename... Args>
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::unionA &variant, Args &&...args) const {
        return variant.set_d(std::forward<Args>(args)...);
      }
    };
    struct getter {
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::unionA const &variant) const {
        return variant.get_d();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::unionA &variant) const {
        return variant.mutable_d();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::unionA &&variant) const {
        return std::move(variant).move_d();
      }
    };
  };
  struct __fbthrift_member_s {
    using name = __fbthrift_strings_module::__fbthrift_hash_043a718774c572bd8a25adbeb1bfcd5c0256ae11cecf9f9c3f925d0e52beaf89;
    using tag = ::apache::thrift::ident::s;
    static constexpr ::apache::thrift::field_id_t id = 3;
    using type_class = ::apache::thrift::type_class::string;
    struct setter {
      template <typename... Args>
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::unionA &variant, Args &&...args) const {
        return variant.set_s(std::forward<Args>(args)...);
      }
    };
    struct getter {
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::unionA const &variant) const {
        return variant.get_s();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::unionA &variant) const {
        return variant.mutable_s();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::unionA &&variant) const {
        return std::move(variant).move_s();
      }
    };
  };
  struct __fbthrift_member_e {
    using name = __fbthrift_strings_module::__fbthrift_hash_3f79bb7b435b05321651daefd374cdc681dc06faa65e374e38337b88ca046dea;
    using tag = ::apache::thrift::ident::e;
    static constexpr ::apache::thrift::field_id_t id = 4;
    using type_class = ::apache::thrift::type_class::enumeration;
    struct setter {
      template <typename... Args>
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::unionA &variant, Args &&...args) const {
        return variant.set_e(std::forward<Args>(args)...);
      }
    };
    struct getter {
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::unionA const &variant) const {
        return variant.get_e();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::unionA &variant) const {
        return variant.mutable_e();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::unionA &&variant) const {
        return std::move(variant).move_e();
      }
    };
  };
  struct __fbthrift_member_a {
    using name = __fbthrift_strings_module::__fbthrift_hash_ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb;
    using tag = ::apache::thrift::ident::a;
    static constexpr ::apache::thrift::field_id_t id = 5;
    using type_class = ::apache::thrift::type_class::structure;
    struct setter {
      template <typename... Args>
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::unionA &variant, Args &&...args) const {
        return variant.set_a(std::forward<Args>(args)...);
      }
    };
    struct getter {
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::unionA const &variant) const {
        return variant.get_a();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::unionA &variant) const {
        return variant.mutable_a();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::unionA &&variant) const {
        return std::move(variant).move_a();
      }
    };
  };

 public:
  using type = ::test_cpp2::cpp_reflection::unionA;
  using name = __fbthrift_strings_module::unionA;
  using id = type::Type;
  using ids = __fbthrift_ids;
  using descriptors = ::fatal::list<
      ::fatal::variant_member_descriptor<
          ::std::int32_t,
           __fbthrift_ids::i,
          __fbthrift_member_i::getter,
          __fbthrift_member_i::setter,
          ::apache::thrift::reflected_variant_member_metadata<__fbthrift_member_i>>,
      ::fatal::variant_member_descriptor<
          double,
           __fbthrift_ids::d,
          __fbthrift_member_d::getter,
          __fbthrift_member_d::setter,
          ::apache::thrift::reflected_variant_member_metadata<__fbthrift_member_d>>,
      ::fatal::variant_member_descriptor<
          ::std::string,
           __fbthrift_ids::s,
          __fbthrift_member_s::getter,
          __fbthrift_member_s::setter,
          ::apache::thrift::reflected_variant_member_metadata<__fbthrift_member_s>>,
      ::fatal::variant_member_descriptor<
          ::test_cpp2::cpp_reflection::enum1,
           __fbthrift_ids::e,
          __fbthrift_member_e::getter,
          __fbthrift_member_e::setter,
          ::apache::thrift::reflected_variant_member_metadata<__fbthrift_member_e>>,
      ::fatal::variant_member_descriptor<
          ::test_cpp2::cpp_reflection::structA,
           __fbthrift_ids::a,
          __fbthrift_member_a::getter,
          __fbthrift_member_a::setter,
          ::apache::thrift::reflected_variant_member_metadata<__fbthrift_member_a>>
  >;

  class annotations {
    struct __fbthrift_keys {
      using another_annotation = __fbthrift_strings_module::another_annotation;
      using sample_annotation = __fbthrift_strings_module::sample_annotation;
    };

    struct __fbthrift_values {
      using another_annotation = ::fatal::sequence<char, 's', 'o', 'm', 'e', ' ', 'm', 'o', 'r', 'e', ' ', 't', 'e', 'x', 't'>;
      using sample_annotation = ::fatal::sequence<char, 's', 'o', 'm', 'e', ' ', 't', 'e', 'x', 't', ' ', 'h', 'e', 'r', 'e'>;
    };

   public:
    using keys = __fbthrift_keys;
    using values = __fbthrift_values;
    using map = ::fatal::list<
        ::apache::thrift::annotation<keys::another_annotation, values::another_annotation>,
        ::apache::thrift::annotation<keys::sample_annotation, values::sample_annotation>
    >;
  };

  static id get_id(type const &variant) {
    return variant.getType();
  }

  static bool empty(type const &variant) {
    return variant.getType() == id::__EMPTY__;
  }

  static void clear(type &variant) {
    return apache::thrift::clear(variant);
  }
};
class union_with_special_names_tenum_traits {
 public:
  using type = ::test_cpp2::cpp_reflection::union_with_special_names::Type;

 private:
  struct __fbthrift_value_get {
    using name = __fbthrift_strings_module::__fbthrift_hash_2998b3232d29e8dc5a78d97a32ce83f556f3ed31b057077503df05641dd79158;
    using value = std::integral_constant<type, type::get>;
    using annotations = __fbthrift_refl_impl::no_annotations;
  };

  struct __fbthrift_value_getter {
    using name = __fbthrift_strings_module::__fbthrift_hash_d665a09c95ebbc703485c7ba5384857536ca16f6c11fdd054e61c7dd81780731;
    using value = std::integral_constant<type, type::getter>;
    using annotations = __fbthrift_refl_impl::no_annotations;
  };

  struct __fbthrift_value_lists {
    using name = __fbthrift_strings_module::__fbthrift_hash_4c14c4a453f98de4bd1c972fea7850adb52822c5823e5da287085165afcf2020;
    using value = std::integral_constant<type, type::lists>;
    using annotations = __fbthrift_refl_impl::no_annotations;
  };

  struct __fbthrift_value_maps {
    using name = __fbthrift_strings_module::__fbthrift_hash_325392e8dd2826a53a9a35b7a7f8d71683cd27ebc2c73fee85dab673bc909b67;
    using value = std::integral_constant<type, type::maps>;
    using annotations = __fbthrift_refl_impl::no_annotations;
  };

  struct __fbthrift_value_name {
    using name = __fbthrift_strings_module::__fbthrift_hash_82a3537ff0dbce7eec35d69edc3a189ee6f17d82f353a553f9aa96cb0be3ce89;
    using value = std::integral_constant<type, type::name>;
    using annotations = __fbthrift_refl_impl::no_annotations;
  };

  struct __fbthrift_value_name_to_value {
    using name = __fbthrift_strings_module::__fbthrift_hash_f1fe8005943a7730e9a95f7262952d9717a6f43a21d1b55daeb44de82fe4aac6;
    using value = std::integral_constant<type, type::name_to_value>;
    using annotations = __fbthrift_refl_impl::no_annotations;
  };

  struct __fbthrift_value_names {
    using name = __fbthrift_strings_module::__fbthrift_hash_aeb24056810d3d1f1e8afee61a0bc0028556eb0fb49a215ae5eb1b970cad0315;
    using value = std::integral_constant<type, type::names>;
    using annotations = __fbthrift_refl_impl::no_annotations;
  };

  struct __fbthrift_value_prefix_tree {
    using name = __fbthrift_strings_module::__fbthrift_hash_73e6f38f012472999e156878234ad5221469eb764ff0d39af613e045fdfe8c1e;
    using value = std::integral_constant<type, type::prefix_tree>;
    using annotations = __fbthrift_refl_impl::no_annotations;
  };

  struct __fbthrift_value_sets {
    using name = __fbthrift_strings_module::__fbthrift_hash_82c6db3dbf4ab47132dfd1d9d1bf8525edccb48512c8647b7a2067e0417537c0;
    using value = std::integral_constant<type, type::sets>;
    using annotations = __fbthrift_refl_impl::no_annotations;
  };

  struct __fbthrift_value_setter {
    using name = __fbthrift_strings_module::__fbthrift_hash_bab6f4cdfe399488eecf37176422c2f336b814c3b5f3d174987098ebb289f1fc;
    using value = std::integral_constant<type, type::setter>;
    using annotations = __fbthrift_refl_impl::no_annotations;
  };

  struct __fbthrift_value_str {
    using name = __fbthrift_strings_module::__fbthrift_hash_8c25cb3686462e9a86d2883c5688a22fe738b0bbc85f458d2d2b5f3f667c6d5a;
    using value = std::integral_constant<type, type::str>;
    using annotations = __fbthrift_refl_impl::no_annotations;
  };

  struct __fbthrift_value_strings {
    using name = __fbthrift_strings_module::__fbthrift_hash_e967d16dae74a49b5e0e051225c5dac0d76e5e38f13dd1628028cbce108c25b6;
    using value = std::integral_constant<type, type::strings>;
    using annotations = __fbthrift_refl_impl::no_annotations;
  };

  struct __fbthrift_value_type {
    using name = __fbthrift_strings_module::__fbthrift_hash_1303c06b0b014d0ce7b988ab173a13f31227d417058ff4bbe6f8c222b4ad913c;
    using value = std::integral_constant<type, type::type>;
    using annotations = __fbthrift_refl_impl::no_annotations;
  };

  struct __fbthrift_value_value {
    using name = __fbthrift_strings_module::__fbthrift_hash_cd42404d52ad55ccfa9aca4adc828aa5800ad9d385a0671fbcbf724118320619;
    using value = std::integral_constant<type, type::value>;
    using annotations = __fbthrift_refl_impl::no_annotations;
  };

  struct __fbthrift_value_value_to_name {
    using name = __fbthrift_strings_module::__fbthrift_hash_144043bd95cdcc1f080ed3a117286f0b33b4738179cbcd0384c6ba14f086965e;
    using value = std::integral_constant<type, type::value_to_name>;
    using annotations = __fbthrift_refl_impl::no_annotations;
  };

  struct __fbthrift_value_values {
    using name = __fbthrift_strings_module::__fbthrift_hash_89445ea08b55421faa49919a5fd272e9a520f701b479d6084847e161ca5b7711;
    using value = std::integral_constant<type, type::values>;
    using annotations = __fbthrift_refl_impl::no_annotations;
  };

  struct __fbthrift_value_id {
    using name = __fbthrift_strings_module::__fbthrift_hash_a56145270ce6b3bebd1dd012b73948677dd618d496488bc608a3cb43ce3547dd;
    using value = std::integral_constant<type, type::id>;
    using annotations = __fbthrift_refl_impl::no_annotations;
  };

  struct __fbthrift_value_ids {
    using name = __fbthrift_strings_module::__fbthrift_hash_23466067f626bf8a3ae1a39cdf81f31303220b331b5064c6e00662dcc34deaaf;
    using value = std::integral_constant<type, type::ids>;
    using annotations = __fbthrift_refl_impl::no_annotations;
  };

  struct __fbthrift_value_descriptor {
    using name = __fbthrift_strings_module::__fbthrift_hash_194b520dc30384b3fc233e123778835e2adc362d91c6e33015ed3db2379d7ea1;
    using value = std::integral_constant<type, type::descriptor>;
    using annotations = __fbthrift_refl_impl::no_annotations;
  };

  struct __fbthrift_value_descriptors {
    using name = __fbthrift_strings_module::__fbthrift_hash_12b2fdc0a0ffd6ce4b7d74d080cd8dcb1c60b6e8f365fb46ac511c46cc31f1c1;
    using value = std::integral_constant<type, type::descriptors>;
    using annotations = __fbthrift_refl_impl::no_annotations;
  };

  struct __fbthrift_value_key {
    using name = __fbthrift_strings_module::__fbthrift_hash_2c70e12b7a0646f92279f427c7b38e7334d8e5389cff167a1dc30e73f826b683;
    using value = std::integral_constant<type, type::key>;
    using annotations = __fbthrift_refl_impl::no_annotations;
  };

  struct __fbthrift_value_keys {
    using name = __fbthrift_strings_module::__fbthrift_hash_48a53f0774c8ceff574a1fdcb0d470dbd382b3db273cff4344b6d39d5379c923;
    using value = std::integral_constant<type, type::keys>;
    using annotations = __fbthrift_refl_impl::no_annotations;
  };

  struct __fbthrift_value_annotation {
    using name = __fbthrift_strings_module::__fbthrift_hash_82264186375a8f31cd4bf73c2862777622f7616b039abfb62fb7c7eea19f9d07;
    using value = std::integral_constant<type, type::annotation>;
    using annotations = __fbthrift_refl_impl::no_annotations;
  };

  struct __fbthrift_value_annotations {
    using name = __fbthrift_strings_module::__fbthrift_hash_295df243c6a33994c30b6e16aea7ce6155a24b44514ec956d7a09ae0a4cb0411;
    using value = std::integral_constant<type, type::annotations>;
    using annotations = __fbthrift_refl_impl::no_annotations;
  };

  struct __fbthrift_value_member {
    using name = __fbthrift_strings_module::__fbthrift_hash_e31ab643c44f7a0ec824b59d1194d60dac334200d845e61d2d289daa0f087ea4;
    using value = std::integral_constant<type, type::member>;
    using annotations = __fbthrift_refl_impl::no_annotations;
  };

  struct __fbthrift_value_members {
    using name = __fbthrift_strings_module::__fbthrift_hash_17373ca1c7634a4be4a13861a891abd975ec916caab8f3dcf5142fa4997d0b96;
    using value = std::integral_constant<type, type::members>;
    using annotations = __fbthrift_refl_impl::no_annotations;
  };

  struct __fbthrift_value_field {
    using name = __fbthrift_strings_module::__fbthrift_hash_c0d2856b74d0df05b9d4456b177950351bd88e98b77f12574dfb7a911acee0d0;
    using value = std::integral_constant<type, type::field>;
    using annotations = __fbthrift_refl_impl::no_annotations;
  };

  struct __fbthrift_value_fields {
    using name = __fbthrift_strings_module::__fbthrift_hash_bfe5d697162d90298c67c1933908741be8395838aa230408e04710909c576806;
    using value = std::integral_constant<type, type::fields>;
    using annotations = __fbthrift_refl_impl::no_annotations;
  };

  struct __fbthrift_member {
    using get = __fbthrift_value_get;
    using getter = __fbthrift_value_getter;
    using lists = __fbthrift_value_lists;
    using maps = __fbthrift_value_maps;
    using name = __fbthrift_value_name;
    using name_to_value = __fbthrift_value_name_to_value;
    using names = __fbthrift_value_names;
    using prefix_tree = __fbthrift_value_prefix_tree;
    using sets = __fbthrift_value_sets;
    using setter = __fbthrift_value_setter;
    using str = __fbthrift_value_str;
    using strings = __fbthrift_value_strings;
    using type = __fbthrift_value_type;
    using value = __fbthrift_value_value;
    using value_to_name = __fbthrift_value_value_to_name;
    using values = __fbthrift_value_values;
    using id = __fbthrift_value_id;
    using ids = __fbthrift_value_ids;
    using descriptor = __fbthrift_value_descriptor;
    using descriptors = __fbthrift_value_descriptors;
    using key = __fbthrift_value_key;
    using keys = __fbthrift_value_keys;
    using annotation = __fbthrift_value_annotation;
    using annotations = __fbthrift_value_annotations;
    using member = __fbthrift_value_member;
    using members = __fbthrift_value_members;
    using field = __fbthrift_value_field;
    using fields = __fbthrift_value_fields;
  };

 public:
  using name = __fbthrift_strings_module::Type;
  using member = __fbthrift_member;
  using fields = ::fatal::list<
      member::get,
      member::getter,
      member::lists,
      member::maps,
      member::name,
      member::name_to_value,
      member::names,
      member::prefix_tree,
      member::sets,
      member::setter,
      member::str,
      member::strings,
      member::type,
      member::value,
      member::value_to_name,
      member::values,
      member::id,
      member::ids,
      member::descriptor,
      member::descriptors,
      member::key,
      member::keys,
      member::annotation,
      member::annotations,
      member::member,
      member::members,
      member::field,
      member::fields
  >;

  using annotations = __fbthrift_refl_impl::no_annotations;

  static char const *to_string(type e, char const *fallback) {
    switch (e) {
      case type::get: return "get";
      case type::getter: return "getter";
      case type::lists: return "lists";
      case type::maps: return "maps";
      case type::name: return "name";
      case type::name_to_value: return "name_to_value";
      case type::names: return "names";
      case type::prefix_tree: return "prefix_tree";
      case type::sets: return "sets";
      case type::setter: return "setter";
      case type::str: return "str";
      case type::strings: return "strings";
      case type::type: return "type";
      case type::value: return "value";
      case type::value_to_name: return "value_to_name";
      case type::values: return "values";
      case type::id: return "id";
      case type::ids: return "ids";
      case type::descriptor: return "descriptor";
      case type::descriptors: return "descriptors";
      case type::key: return "key";
      case type::keys: return "keys";
      case type::annotation: return "annotation";
      case type::annotations: return "annotations";
      case type::member: return "member";
      case type::members: return "members";
      case type::field: return "field";
      case type::fields: return "fields";
      default: return fallback;
    }
  }
};

class union_with_special_names_variant_traits {
 private:
  struct __fbthrift_ids {
    using get = std::integral_constant<::test_cpp2::cpp_reflection::union_with_special_names::Type, ::test_cpp2::cpp_reflection::union_with_special_names::Type::get>;
    using getter = std::integral_constant<::test_cpp2::cpp_reflection::union_with_special_names::Type, ::test_cpp2::cpp_reflection::union_with_special_names::Type::getter>;
    using lists = std::integral_constant<::test_cpp2::cpp_reflection::union_with_special_names::Type, ::test_cpp2::cpp_reflection::union_with_special_names::Type::lists>;
    using maps = std::integral_constant<::test_cpp2::cpp_reflection::union_with_special_names::Type, ::test_cpp2::cpp_reflection::union_with_special_names::Type::maps>;
    using name = std::integral_constant<::test_cpp2::cpp_reflection::union_with_special_names::Type, ::test_cpp2::cpp_reflection::union_with_special_names::Type::name>;
    using name_to_value = std::integral_constant<::test_cpp2::cpp_reflection::union_with_special_names::Type, ::test_cpp2::cpp_reflection::union_with_special_names::Type::name_to_value>;
    using names = std::integral_constant<::test_cpp2::cpp_reflection::union_with_special_names::Type, ::test_cpp2::cpp_reflection::union_with_special_names::Type::names>;
    using prefix_tree = std::integral_constant<::test_cpp2::cpp_reflection::union_with_special_names::Type, ::test_cpp2::cpp_reflection::union_with_special_names::Type::prefix_tree>;
    using sets = std::integral_constant<::test_cpp2::cpp_reflection::union_with_special_names::Type, ::test_cpp2::cpp_reflection::union_with_special_names::Type::sets>;
    using setter = std::integral_constant<::test_cpp2::cpp_reflection::union_with_special_names::Type, ::test_cpp2::cpp_reflection::union_with_special_names::Type::setter>;
    using str = std::integral_constant<::test_cpp2::cpp_reflection::union_with_special_names::Type, ::test_cpp2::cpp_reflection::union_with_special_names::Type::str>;
    using strings = std::integral_constant<::test_cpp2::cpp_reflection::union_with_special_names::Type, ::test_cpp2::cpp_reflection::union_with_special_names::Type::strings>;
    using type = std::integral_constant<::test_cpp2::cpp_reflection::union_with_special_names::Type, ::test_cpp2::cpp_reflection::union_with_special_names::Type::type>;
    using value = std::integral_constant<::test_cpp2::cpp_reflection::union_with_special_names::Type, ::test_cpp2::cpp_reflection::union_with_special_names::Type::value>;
    using value_to_name = std::integral_constant<::test_cpp2::cpp_reflection::union_with_special_names::Type, ::test_cpp2::cpp_reflection::union_with_special_names::Type::value_to_name>;
    using values = std::integral_constant<::test_cpp2::cpp_reflection::union_with_special_names::Type, ::test_cpp2::cpp_reflection::union_with_special_names::Type::values>;
    using id = std::integral_constant<::test_cpp2::cpp_reflection::union_with_special_names::Type, ::test_cpp2::cpp_reflection::union_with_special_names::Type::id>;
    using ids = std::integral_constant<::test_cpp2::cpp_reflection::union_with_special_names::Type, ::test_cpp2::cpp_reflection::union_with_special_names::Type::ids>;
    using descriptor = std::integral_constant<::test_cpp2::cpp_reflection::union_with_special_names::Type, ::test_cpp2::cpp_reflection::union_with_special_names::Type::descriptor>;
    using descriptors = std::integral_constant<::test_cpp2::cpp_reflection::union_with_special_names::Type, ::test_cpp2::cpp_reflection::union_with_special_names::Type::descriptors>;
    using key = std::integral_constant<::test_cpp2::cpp_reflection::union_with_special_names::Type, ::test_cpp2::cpp_reflection::union_with_special_names::Type::key>;
    using keys = std::integral_constant<::test_cpp2::cpp_reflection::union_with_special_names::Type, ::test_cpp2::cpp_reflection::union_with_special_names::Type::keys>;
    using annotation = std::integral_constant<::test_cpp2::cpp_reflection::union_with_special_names::Type, ::test_cpp2::cpp_reflection::union_with_special_names::Type::annotation>;
    using annotations = std::integral_constant<::test_cpp2::cpp_reflection::union_with_special_names::Type, ::test_cpp2::cpp_reflection::union_with_special_names::Type::annotations>;
    using member = std::integral_constant<::test_cpp2::cpp_reflection::union_with_special_names::Type, ::test_cpp2::cpp_reflection::union_with_special_names::Type::member>;
    using members = std::integral_constant<::test_cpp2::cpp_reflection::union_with_special_names::Type, ::test_cpp2::cpp_reflection::union_with_special_names::Type::members>;
    using field = std::integral_constant<::test_cpp2::cpp_reflection::union_with_special_names::Type, ::test_cpp2::cpp_reflection::union_with_special_names::Type::field>;
    using fields = std::integral_constant<::test_cpp2::cpp_reflection::union_with_special_names::Type, ::test_cpp2::cpp_reflection::union_with_special_names::Type::fields>;
  };

  struct __fbthrift_member_get {
    using name = __fbthrift_strings_module::__fbthrift_hash_2998b3232d29e8dc5a78d97a32ce83f556f3ed31b057077503df05641dd79158;
    using tag = ::apache::thrift::ident::get;
    static constexpr ::apache::thrift::field_id_t id = 1;
    using type_class = ::apache::thrift::type_class::integral;
    struct setter {
      template <typename... Args>
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &variant, Args &&...args) const {
        return variant.set_get(std::forward<Args>(args)...);
      }
    };
    struct getter {
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names const &variant) const {
        return variant.get_get();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &variant) const {
        return variant.mutable_get();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &&variant) const {
        return std::move(variant).move_get();
      }
    };
  };
  struct __fbthrift_member_getter {
    using name = __fbthrift_strings_module::__fbthrift_hash_d665a09c95ebbc703485c7ba5384857536ca16f6c11fdd054e61c7dd81780731;
    using tag = ::apache::thrift::ident::getter;
    static constexpr ::apache::thrift::field_id_t id = 2;
    using type_class = ::apache::thrift::type_class::integral;
    struct setter {
      template <typename... Args>
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &variant, Args &&...args) const {
        return variant.set_getter(std::forward<Args>(args)...);
      }
    };
    struct getter {
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names const &variant) const {
        return variant.get_getter();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &variant) const {
        return variant.mutable_getter();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &&variant) const {
        return std::move(variant).move_getter();
      }
    };
  };
  struct __fbthrift_member_lists {
    using name = __fbthrift_strings_module::__fbthrift_hash_4c14c4a453f98de4bd1c972fea7850adb52822c5823e5da287085165afcf2020;
    using tag = ::apache::thrift::ident::lists;
    static constexpr ::apache::thrift::field_id_t id = 3;
    using type_class = ::apache::thrift::type_class::integral;
    struct setter {
      template <typename... Args>
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &variant, Args &&...args) const {
        return variant.set_lists(std::forward<Args>(args)...);
      }
    };
    struct getter {
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names const &variant) const {
        return variant.get_lists();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &variant) const {
        return variant.mutable_lists();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &&variant) const {
        return std::move(variant).move_lists();
      }
    };
  };
  struct __fbthrift_member_maps {
    using name = __fbthrift_strings_module::__fbthrift_hash_325392e8dd2826a53a9a35b7a7f8d71683cd27ebc2c73fee85dab673bc909b67;
    using tag = ::apache::thrift::ident::maps;
    static constexpr ::apache::thrift::field_id_t id = 4;
    using type_class = ::apache::thrift::type_class::integral;
    struct setter {
      template <typename... Args>
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &variant, Args &&...args) const {
        return variant.set_maps(std::forward<Args>(args)...);
      }
    };
    struct getter {
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names const &variant) const {
        return variant.get_maps();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &variant) const {
        return variant.mutable_maps();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &&variant) const {
        return std::move(variant).move_maps();
      }
    };
  };
  struct __fbthrift_member_name {
    using name = __fbthrift_strings_module::__fbthrift_hash_82a3537ff0dbce7eec35d69edc3a189ee6f17d82f353a553f9aa96cb0be3ce89;
    using tag = ::apache::thrift::ident::name;
    static constexpr ::apache::thrift::field_id_t id = 5;
    using type_class = ::apache::thrift::type_class::integral;
    struct setter {
      template <typename... Args>
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &variant, Args &&...args) const {
        return variant.set_name(std::forward<Args>(args)...);
      }
    };
    struct getter {
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names const &variant) const {
        return variant.get_name();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &variant) const {
        return variant.mutable_name();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &&variant) const {
        return std::move(variant).move_name();
      }
    };
  };
  struct __fbthrift_member_name_to_value {
    using name = __fbthrift_strings_module::__fbthrift_hash_f1fe8005943a7730e9a95f7262952d9717a6f43a21d1b55daeb44de82fe4aac6;
    using tag = ::apache::thrift::ident::name_to_value;
    static constexpr ::apache::thrift::field_id_t id = 6;
    using type_class = ::apache::thrift::type_class::integral;
    struct setter {
      template <typename... Args>
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &variant, Args &&...args) const {
        return variant.set_name_to_value(std::forward<Args>(args)...);
      }
    };
    struct getter {
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names const &variant) const {
        return variant.get_name_to_value();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &variant) const {
        return variant.mutable_name_to_value();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &&variant) const {
        return std::move(variant).move_name_to_value();
      }
    };
  };
  struct __fbthrift_member_names {
    using name = __fbthrift_strings_module::__fbthrift_hash_aeb24056810d3d1f1e8afee61a0bc0028556eb0fb49a215ae5eb1b970cad0315;
    using tag = ::apache::thrift::ident::names;
    static constexpr ::apache::thrift::field_id_t id = 7;
    using type_class = ::apache::thrift::type_class::integral;
    struct setter {
      template <typename... Args>
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &variant, Args &&...args) const {
        return variant.set_names(std::forward<Args>(args)...);
      }
    };
    struct getter {
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names const &variant) const {
        return variant.get_names();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &variant) const {
        return variant.mutable_names();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &&variant) const {
        return std::move(variant).move_names();
      }
    };
  };
  struct __fbthrift_member_prefix_tree {
    using name = __fbthrift_strings_module::__fbthrift_hash_73e6f38f012472999e156878234ad5221469eb764ff0d39af613e045fdfe8c1e;
    using tag = ::apache::thrift::ident::prefix_tree;
    static constexpr ::apache::thrift::field_id_t id = 8;
    using type_class = ::apache::thrift::type_class::integral;
    struct setter {
      template <typename... Args>
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &variant, Args &&...args) const {
        return variant.set_prefix_tree(std::forward<Args>(args)...);
      }
    };
    struct getter {
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names const &variant) const {
        return variant.get_prefix_tree();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &variant) const {
        return variant.mutable_prefix_tree();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &&variant) const {
        return std::move(variant).move_prefix_tree();
      }
    };
  };
  struct __fbthrift_member_sets {
    using name = __fbthrift_strings_module::__fbthrift_hash_82c6db3dbf4ab47132dfd1d9d1bf8525edccb48512c8647b7a2067e0417537c0;
    using tag = ::apache::thrift::ident::sets;
    static constexpr ::apache::thrift::field_id_t id = 9;
    using type_class = ::apache::thrift::type_class::integral;
    struct setter {
      template <typename... Args>
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &variant, Args &&...args) const {
        return variant.set_sets(std::forward<Args>(args)...);
      }
    };
    struct getter {
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names const &variant) const {
        return variant.get_sets();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &variant) const {
        return variant.mutable_sets();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &&variant) const {
        return std::move(variant).move_sets();
      }
    };
  };
  struct __fbthrift_member_setter {
    using name = __fbthrift_strings_module::__fbthrift_hash_bab6f4cdfe399488eecf37176422c2f336b814c3b5f3d174987098ebb289f1fc;
    using tag = ::apache::thrift::ident::setter;
    static constexpr ::apache::thrift::field_id_t id = 10;
    using type_class = ::apache::thrift::type_class::integral;
    struct setter {
      template <typename... Args>
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &variant, Args &&...args) const {
        return variant.set_setter(std::forward<Args>(args)...);
      }
    };
    struct getter {
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names const &variant) const {
        return variant.get_setter();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &variant) const {
        return variant.mutable_setter();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &&variant) const {
        return std::move(variant).move_setter();
      }
    };
  };
  struct __fbthrift_member_str {
    using name = __fbthrift_strings_module::__fbthrift_hash_8c25cb3686462e9a86d2883c5688a22fe738b0bbc85f458d2d2b5f3f667c6d5a;
    using tag = ::apache::thrift::ident::str;
    static constexpr ::apache::thrift::field_id_t id = 11;
    using type_class = ::apache::thrift::type_class::integral;
    struct setter {
      template <typename... Args>
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &variant, Args &&...args) const {
        return variant.set_str(std::forward<Args>(args)...);
      }
    };
    struct getter {
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names const &variant) const {
        return variant.get_str();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &variant) const {
        return variant.mutable_str();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &&variant) const {
        return std::move(variant).move_str();
      }
    };
  };
  struct __fbthrift_member_strings {
    using name = __fbthrift_strings_module::__fbthrift_hash_e967d16dae74a49b5e0e051225c5dac0d76e5e38f13dd1628028cbce108c25b6;
    using tag = ::apache::thrift::ident::strings;
    static constexpr ::apache::thrift::field_id_t id = 12;
    using type_class = ::apache::thrift::type_class::integral;
    struct setter {
      template <typename... Args>
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &variant, Args &&...args) const {
        return variant.set_strings(std::forward<Args>(args)...);
      }
    };
    struct getter {
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names const &variant) const {
        return variant.get_strings();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &variant) const {
        return variant.mutable_strings();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &&variant) const {
        return std::move(variant).move_strings();
      }
    };
  };
  struct __fbthrift_member_type {
    using name = __fbthrift_strings_module::__fbthrift_hash_1303c06b0b014d0ce7b988ab173a13f31227d417058ff4bbe6f8c222b4ad913c;
    using tag = ::apache::thrift::ident::type;
    static constexpr ::apache::thrift::field_id_t id = 13;
    using type_class = ::apache::thrift::type_class::integral;
    struct setter {
      template <typename... Args>
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &variant, Args &&...args) const {
        return variant.set_type(std::forward<Args>(args)...);
      }
    };
    struct getter {
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names const &variant) const {
        return variant.get_type();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &variant) const {
        return variant.mutable_type();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &&variant) const {
        return std::move(variant).move_type();
      }
    };
  };
  struct __fbthrift_member_value {
    using name = __fbthrift_strings_module::__fbthrift_hash_cd42404d52ad55ccfa9aca4adc828aa5800ad9d385a0671fbcbf724118320619;
    using tag = ::apache::thrift::ident::value;
    static constexpr ::apache::thrift::field_id_t id = 14;
    using type_class = ::apache::thrift::type_class::integral;
    struct setter {
      template <typename... Args>
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &variant, Args &&...args) const {
        return variant.set_value(std::forward<Args>(args)...);
      }
    };
    struct getter {
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names const &variant) const {
        return variant.get_value();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &variant) const {
        return variant.mutable_value();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &&variant) const {
        return std::move(variant).move_value();
      }
    };
  };
  struct __fbthrift_member_value_to_name {
    using name = __fbthrift_strings_module::__fbthrift_hash_144043bd95cdcc1f080ed3a117286f0b33b4738179cbcd0384c6ba14f086965e;
    using tag = ::apache::thrift::ident::value_to_name;
    static constexpr ::apache::thrift::field_id_t id = 15;
    using type_class = ::apache::thrift::type_class::integral;
    struct setter {
      template <typename... Args>
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &variant, Args &&...args) const {
        return variant.set_value_to_name(std::forward<Args>(args)...);
      }
    };
    struct getter {
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names const &variant) const {
        return variant.get_value_to_name();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &variant) const {
        return variant.mutable_value_to_name();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &&variant) const {
        return std::move(variant).move_value_to_name();
      }
    };
  };
  struct __fbthrift_member_values {
    using name = __fbthrift_strings_module::__fbthrift_hash_89445ea08b55421faa49919a5fd272e9a520f701b479d6084847e161ca5b7711;
    using tag = ::apache::thrift::ident::values;
    static constexpr ::apache::thrift::field_id_t id = 16;
    using type_class = ::apache::thrift::type_class::integral;
    struct setter {
      template <typename... Args>
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &variant, Args &&...args) const {
        return variant.set_values(std::forward<Args>(args)...);
      }
    };
    struct getter {
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names const &variant) const {
        return variant.get_values();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &variant) const {
        return variant.mutable_values();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &&variant) const {
        return std::move(variant).move_values();
      }
    };
  };
  struct __fbthrift_member_id {
    using name = __fbthrift_strings_module::__fbthrift_hash_a56145270ce6b3bebd1dd012b73948677dd618d496488bc608a3cb43ce3547dd;
    using tag = ::apache::thrift::ident::id;
    static constexpr ::apache::thrift::field_id_t id = 17;
    using type_class = ::apache::thrift::type_class::integral;
    struct setter {
      template <typename... Args>
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &variant, Args &&...args) const {
        return variant.set_id(std::forward<Args>(args)...);
      }
    };
    struct getter {
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names const &variant) const {
        return variant.get_id();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &variant) const {
        return variant.mutable_id();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &&variant) const {
        return std::move(variant).move_id();
      }
    };
  };
  struct __fbthrift_member_ids {
    using name = __fbthrift_strings_module::__fbthrift_hash_23466067f626bf8a3ae1a39cdf81f31303220b331b5064c6e00662dcc34deaaf;
    using tag = ::apache::thrift::ident::ids;
    static constexpr ::apache::thrift::field_id_t id = 18;
    using type_class = ::apache::thrift::type_class::integral;
    struct setter {
      template <typename... Args>
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &variant, Args &&...args) const {
        return variant.set_ids(std::forward<Args>(args)...);
      }
    };
    struct getter {
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names const &variant) const {
        return variant.get_ids();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &variant) const {
        return variant.mutable_ids();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &&variant) const {
        return std::move(variant).move_ids();
      }
    };
  };
  struct __fbthrift_member_descriptor {
    using name = __fbthrift_strings_module::__fbthrift_hash_194b520dc30384b3fc233e123778835e2adc362d91c6e33015ed3db2379d7ea1;
    using tag = ::apache::thrift::ident::descriptor;
    static constexpr ::apache::thrift::field_id_t id = 19;
    using type_class = ::apache::thrift::type_class::integral;
    struct setter {
      template <typename... Args>
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &variant, Args &&...args) const {
        return variant.set_descriptor(std::forward<Args>(args)...);
      }
    };
    struct getter {
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names const &variant) const {
        return variant.get_descriptor();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &variant) const {
        return variant.mutable_descriptor();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &&variant) const {
        return std::move(variant).move_descriptor();
      }
    };
  };
  struct __fbthrift_member_descriptors {
    using name = __fbthrift_strings_module::__fbthrift_hash_12b2fdc0a0ffd6ce4b7d74d080cd8dcb1c60b6e8f365fb46ac511c46cc31f1c1;
    using tag = ::apache::thrift::ident::descriptors;
    static constexpr ::apache::thrift::field_id_t id = 20;
    using type_class = ::apache::thrift::type_class::integral;
    struct setter {
      template <typename... Args>
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &variant, Args &&...args) const {
        return variant.set_descriptors(std::forward<Args>(args)...);
      }
    };
    struct getter {
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names const &variant) const {
        return variant.get_descriptors();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &variant) const {
        return variant.mutable_descriptors();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &&variant) const {
        return std::move(variant).move_descriptors();
      }
    };
  };
  struct __fbthrift_member_key {
    using name = __fbthrift_strings_module::__fbthrift_hash_2c70e12b7a0646f92279f427c7b38e7334d8e5389cff167a1dc30e73f826b683;
    using tag = ::apache::thrift::ident::key;
    static constexpr ::apache::thrift::field_id_t id = 21;
    using type_class = ::apache::thrift::type_class::integral;
    struct setter {
      template <typename... Args>
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &variant, Args &&...args) const {
        return variant.set_key(std::forward<Args>(args)...);
      }
    };
    struct getter {
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names const &variant) const {
        return variant.get_key();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &variant) const {
        return variant.mutable_key();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &&variant) const {
        return std::move(variant).move_key();
      }
    };
  };
  struct __fbthrift_member_keys {
    using name = __fbthrift_strings_module::__fbthrift_hash_48a53f0774c8ceff574a1fdcb0d470dbd382b3db273cff4344b6d39d5379c923;
    using tag = ::apache::thrift::ident::keys;
    static constexpr ::apache::thrift::field_id_t id = 22;
    using type_class = ::apache::thrift::type_class::integral;
    struct setter {
      template <typename... Args>
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &variant, Args &&...args) const {
        return variant.set_keys(std::forward<Args>(args)...);
      }
    };
    struct getter {
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names const &variant) const {
        return variant.get_keys();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &variant) const {
        return variant.mutable_keys();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &&variant) const {
        return std::move(variant).move_keys();
      }
    };
  };
  struct __fbthrift_member_annotation {
    using name = __fbthrift_strings_module::__fbthrift_hash_82264186375a8f31cd4bf73c2862777622f7616b039abfb62fb7c7eea19f9d07;
    using tag = ::apache::thrift::ident::annotation;
    static constexpr ::apache::thrift::field_id_t id = 23;
    using type_class = ::apache::thrift::type_class::integral;
    struct setter {
      template <typename... Args>
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &variant, Args &&...args) const {
        return variant.set_annotation(std::forward<Args>(args)...);
      }
    };
    struct getter {
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names const &variant) const {
        return variant.get_annotation();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &variant) const {
        return variant.mutable_annotation();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &&variant) const {
        return std::move(variant).move_annotation();
      }
    };
  };
  struct __fbthrift_member_annotations {
    using name = __fbthrift_strings_module::__fbthrift_hash_295df243c6a33994c30b6e16aea7ce6155a24b44514ec956d7a09ae0a4cb0411;
    using tag = ::apache::thrift::ident::annotations;
    static constexpr ::apache::thrift::field_id_t id = 24;
    using type_class = ::apache::thrift::type_class::integral;
    struct setter {
      template <typename... Args>
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &variant, Args &&...args) const {
        return variant.set_annotations(std::forward<Args>(args)...);
      }
    };
    struct getter {
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names const &variant) const {
        return variant.get_annotations();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &variant) const {
        return variant.mutable_annotations();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &&variant) const {
        return std::move(variant).move_annotations();
      }
    };
  };
  struct __fbthrift_member_member {
    using name = __fbthrift_strings_module::__fbthrift_hash_e31ab643c44f7a0ec824b59d1194d60dac334200d845e61d2d289daa0f087ea4;
    using tag = ::apache::thrift::ident::member;
    static constexpr ::apache::thrift::field_id_t id = 25;
    using type_class = ::apache::thrift::type_class::integral;
    struct setter {
      template <typename... Args>
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &variant, Args &&...args) const {
        return variant.set_member(std::forward<Args>(args)...);
      }
    };
    struct getter {
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names const &variant) const {
        return variant.get_member();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &variant) const {
        return variant.mutable_member();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &&variant) const {
        return std::move(variant).move_member();
      }
    };
  };
  struct __fbthrift_member_members {
    using name = __fbthrift_strings_module::__fbthrift_hash_17373ca1c7634a4be4a13861a891abd975ec916caab8f3dcf5142fa4997d0b96;
    using tag = ::apache::thrift::ident::members;
    static constexpr ::apache::thrift::field_id_t id = 26;
    using type_class = ::apache::thrift::type_class::integral;
    struct setter {
      template <typename... Args>
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &variant, Args &&...args) const {
        return variant.set_members(std::forward<Args>(args)...);
      }
    };
    struct getter {
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names const &variant) const {
        return variant.get_members();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &variant) const {
        return variant.mutable_members();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &&variant) const {
        return std::move(variant).move_members();
      }
    };
  };
  struct __fbthrift_member_field {
    using name = __fbthrift_strings_module::__fbthrift_hash_c0d2856b74d0df05b9d4456b177950351bd88e98b77f12574dfb7a911acee0d0;
    using tag = ::apache::thrift::ident::field;
    static constexpr ::apache::thrift::field_id_t id = 27;
    using type_class = ::apache::thrift::type_class::integral;
    struct setter {
      template <typename... Args>
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &variant, Args &&...args) const {
        return variant.set_field(std::forward<Args>(args)...);
      }
    };
    struct getter {
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names const &variant) const {
        return variant.get_field();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &variant) const {
        return variant.mutable_field();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &&variant) const {
        return std::move(variant).move_field();
      }
    };
  };
  struct __fbthrift_member_fields {
    using name = __fbthrift_strings_module::__fbthrift_hash_bfe5d697162d90298c67c1933908741be8395838aa230408e04710909c576806;
    using tag = ::apache::thrift::ident::fields;
    static constexpr ::apache::thrift::field_id_t id = 28;
    using type_class = ::apache::thrift::type_class::integral;
    struct setter {
      template <typename... Args>
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &variant, Args &&...args) const {
        return variant.set_fields(std::forward<Args>(args)...);
      }
    };
    struct getter {
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names const &variant) const {
        return variant.get_fields();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &variant) const {
        return variant.mutable_fields();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::union_with_special_names &&variant) const {
        return std::move(variant).move_fields();
      }
    };
  };

 public:
  using type = ::test_cpp2::cpp_reflection::union_with_special_names;
  using name = __fbthrift_strings_module::union_with_special_names;
  using id = type::Type;
  using ids = __fbthrift_ids;
  using descriptors = ::fatal::list<
      ::fatal::variant_member_descriptor<
          ::std::int32_t,
           __fbthrift_ids::get,
          __fbthrift_member_get::getter,
          __fbthrift_member_get::setter,
          ::apache::thrift::reflected_variant_member_metadata<__fbthrift_member_get>>,
      ::fatal::variant_member_descriptor<
          ::std::int32_t,
           __fbthrift_ids::getter,
          __fbthrift_member_getter::getter,
          __fbthrift_member_getter::setter,
          ::apache::thrift::reflected_variant_member_metadata<__fbthrift_member_getter>>,
      ::fatal::variant_member_descriptor<
          ::std::int32_t,
           __fbthrift_ids::lists,
          __fbthrift_member_lists::getter,
          __fbthrift_member_lists::setter,
          ::apache::thrift::reflected_variant_member_metadata<__fbthrift_member_lists>>,
      ::fatal::variant_member_descriptor<
          ::std::int32_t,
           __fbthrift_ids::maps,
          __fbthrift_member_maps::getter,
          __fbthrift_member_maps::setter,
          ::apache::thrift::reflected_variant_member_metadata<__fbthrift_member_maps>>,
      ::fatal::variant_member_descriptor<
          ::std::int32_t,
           __fbthrift_ids::name,
          __fbthrift_member_name::getter,
          __fbthrift_member_name::setter,
          ::apache::thrift::reflected_variant_member_metadata<__fbthrift_member_name>>,
      ::fatal::variant_member_descriptor<
          ::std::int32_t,
           __fbthrift_ids::name_to_value,
          __fbthrift_member_name_to_value::getter,
          __fbthrift_member_name_to_value::setter,
          ::apache::thrift::reflected_variant_member_metadata<__fbthrift_member_name_to_value>>,
      ::fatal::variant_member_descriptor<
          ::std::int32_t,
           __fbthrift_ids::names,
          __fbthrift_member_names::getter,
          __fbthrift_member_names::setter,
          ::apache::thrift::reflected_variant_member_metadata<__fbthrift_member_names>>,
      ::fatal::variant_member_descriptor<
          ::std::int32_t,
           __fbthrift_ids::prefix_tree,
          __fbthrift_member_prefix_tree::getter,
          __fbthrift_member_prefix_tree::setter,
          ::apache::thrift::reflected_variant_member_metadata<__fbthrift_member_prefix_tree>>,
      ::fatal::variant_member_descriptor<
          ::std::int32_t,
           __fbthrift_ids::sets,
          __fbthrift_member_sets::getter,
          __fbthrift_member_sets::setter,
          ::apache::thrift::reflected_variant_member_metadata<__fbthrift_member_sets>>,
      ::fatal::variant_member_descriptor<
          ::std::int32_t,
           __fbthrift_ids::setter,
          __fbthrift_member_setter::getter,
          __fbthrift_member_setter::setter,
          ::apache::thrift::reflected_variant_member_metadata<__fbthrift_member_setter>>,
      ::fatal::variant_member_descriptor<
          ::std::int32_t,
           __fbthrift_ids::str,
          __fbthrift_member_str::getter,
          __fbthrift_member_str::setter,
          ::apache::thrift::reflected_variant_member_metadata<__fbthrift_member_str>>,
      ::fatal::variant_member_descriptor<
          ::std::int32_t,
           __fbthrift_ids::strings,
          __fbthrift_member_strings::getter,
          __fbthrift_member_strings::setter,
          ::apache::thrift::reflected_variant_member_metadata<__fbthrift_member_strings>>,
      ::fatal::variant_member_descriptor<
          ::std::int32_t,
           __fbthrift_ids::type,
          __fbthrift_member_type::getter,
          __fbthrift_member_type::setter,
          ::apache::thrift::reflected_variant_member_metadata<__fbthrift_member_type>>,
      ::fatal::variant_member_descriptor<
          ::std::int32_t,
           __fbthrift_ids::value,
          __fbthrift_member_value::getter,
          __fbthrift_member_value::setter,
          ::apache::thrift::reflected_variant_member_metadata<__fbthrift_member_value>>,
      ::fatal::variant_member_descriptor<
          ::std::int32_t,
           __fbthrift_ids::value_to_name,
          __fbthrift_member_value_to_name::getter,
          __fbthrift_member_value_to_name::setter,
          ::apache::thrift::reflected_variant_member_metadata<__fbthrift_member_value_to_name>>,
      ::fatal::variant_member_descriptor<
          ::std::int32_t,
           __fbthrift_ids::values,
          __fbthrift_member_values::getter,
          __fbthrift_member_values::setter,
          ::apache::thrift::reflected_variant_member_metadata<__fbthrift_member_values>>,
      ::fatal::variant_member_descriptor<
          ::std::int32_t,
           __fbthrift_ids::id,
          __fbthrift_member_id::getter,
          __fbthrift_member_id::setter,
          ::apache::thrift::reflected_variant_member_metadata<__fbthrift_member_id>>,
      ::fatal::variant_member_descriptor<
          ::std::int32_t,
           __fbthrift_ids::ids,
          __fbthrift_member_ids::getter,
          __fbthrift_member_ids::setter,
          ::apache::thrift::reflected_variant_member_metadata<__fbthrift_member_ids>>,
      ::fatal::variant_member_descriptor<
          ::std::int32_t,
           __fbthrift_ids::descriptor,
          __fbthrift_member_descriptor::getter,
          __fbthrift_member_descriptor::setter,
          ::apache::thrift::reflected_variant_member_metadata<__fbthrift_member_descriptor>>,
      ::fatal::variant_member_descriptor<
          ::std::int32_t,
           __fbthrift_ids::descriptors,
          __fbthrift_member_descriptors::getter,
          __fbthrift_member_descriptors::setter,
          ::apache::thrift::reflected_variant_member_metadata<__fbthrift_member_descriptors>>,
      ::fatal::variant_member_descriptor<
          ::std::int32_t,
           __fbthrift_ids::key,
          __fbthrift_member_key::getter,
          __fbthrift_member_key::setter,
          ::apache::thrift::reflected_variant_member_metadata<__fbthrift_member_key>>,
      ::fatal::variant_member_descriptor<
          ::std::int32_t,
           __fbthrift_ids::keys,
          __fbthrift_member_keys::getter,
          __fbthrift_member_keys::setter,
          ::apache::thrift::reflected_variant_member_metadata<__fbthrift_member_keys>>,
      ::fatal::variant_member_descriptor<
          ::std::int32_t,
           __fbthrift_ids::annotation,
          __fbthrift_member_annotation::getter,
          __fbthrift_member_annotation::setter,
          ::apache::thrift::reflected_variant_member_metadata<__fbthrift_member_annotation>>,
      ::fatal::variant_member_descriptor<
          ::std::int32_t,
           __fbthrift_ids::annotations,
          __fbthrift_member_annotations::getter,
          __fbthrift_member_annotations::setter,
          ::apache::thrift::reflected_variant_member_metadata<__fbthrift_member_annotations>>,
      ::fatal::variant_member_descriptor<
          ::std::int32_t,
           __fbthrift_ids::member,
          __fbthrift_member_member::getter,
          __fbthrift_member_member::setter,
          ::apache::thrift::reflected_variant_member_metadata<__fbthrift_member_member>>,
      ::fatal::variant_member_descriptor<
          ::std::int32_t,
           __fbthrift_ids::members,
          __fbthrift_member_members::getter,
          __fbthrift_member_members::setter,
          ::apache::thrift::reflected_variant_member_metadata<__fbthrift_member_members>>,
      ::fatal::variant_member_descriptor<
          ::std::int32_t,
           __fbthrift_ids::field,
          __fbthrift_member_field::getter,
          __fbthrift_member_field::setter,
          ::apache::thrift::reflected_variant_member_metadata<__fbthrift_member_field>>,
      ::fatal::variant_member_descriptor<
          ::std::int32_t,
           __fbthrift_ids::fields,
          __fbthrift_member_fields::getter,
          __fbthrift_member_fields::setter,
          ::apache::thrift::reflected_variant_member_metadata<__fbthrift_member_fields>>
  >;

  using annotations = __fbthrift_refl_impl::no_annotations;

  static id get_id(type const &variant) {
    return variant.getType();
  }

  static bool empty(type const &variant) {
    return variant.getType() == id::__EMPTY__;
  }

  static void clear(type &variant) {
    return apache::thrift::clear(variant);
  }
};
class UnionWithTypedefFieldAdapter_tenum_traits {
 public:
  using type = ::test_cpp2::cpp_reflection::UnionWithTypedefFieldAdapter::Type;

 private:
  struct __fbthrift_value_field {
    using name = __fbthrift_strings_module::__fbthrift_hash_c0d2856b74d0df05b9d4456b177950351bd88e98b77f12574dfb7a911acee0d0;
    using value = std::integral_constant<type, type::field>;
    using annotations = __fbthrift_refl_impl::no_annotations;
  };

  struct __fbthrift_member {
    using field = __fbthrift_value_field;
  };

 public:
  using name = __fbthrift_strings_module::Type;
  using member = __fbthrift_member;
  using fields = ::fatal::list<
      member::field
  >;

  using annotations = __fbthrift_refl_impl::no_annotations;

  static char const *to_string(type e, char const *fallback) {
    switch (e) {
      case type::field: return "field";
      default: return fallback;
    }
  }
};

class UnionWithTypedefFieldAdapter_variant_traits {
 private:
  struct __fbthrift_ids {
    using field = std::integral_constant<::test_cpp2::cpp_reflection::UnionWithTypedefFieldAdapter::Type, ::test_cpp2::cpp_reflection::UnionWithTypedefFieldAdapter::Type::field>;
  };

  struct __fbthrift_member_field {
    using name = __fbthrift_strings_module::__fbthrift_hash_c0d2856b74d0df05b9d4456b177950351bd88e98b77f12574dfb7a911acee0d0;
    using tag = ::apache::thrift::ident::field;
    static constexpr ::apache::thrift::field_id_t id = 1;
    using type_class = ::apache::thrift::type_class::integral;
    struct setter {
      template <typename... Args>
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::UnionWithTypedefFieldAdapter &variant, Args &&...args) const {
        return variant.set_field(std::forward<Args>(args)...);
      }
    };
    struct getter {
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::UnionWithTypedefFieldAdapter const &variant) const {
        return variant.get_field();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::UnionWithTypedefFieldAdapter &variant) const {
        return variant.mutable_field();
      }
      decltype(auto) operator ()(::test_cpp2::cpp_reflection::UnionWithTypedefFieldAdapter &&variant) const {
        return std::move(variant).move_field();
      }
    };
  };

 public:
  using type = ::test_cpp2::cpp_reflection::UnionWithTypedefFieldAdapter;
  using name = __fbthrift_strings_module::UnionWithTypedefFieldAdapter;
  using id = type::Type;
  using ids = __fbthrift_ids;
  using descriptors = ::fatal::list<
      ::fatal::variant_member_descriptor<
          ::test_cpp2::cpp_reflection::I32,
           __fbthrift_ids::field,
          __fbthrift_member_field::getter,
          __fbthrift_member_field::setter,
          ::apache::thrift::reflected_variant_member_metadata<__fbthrift_member_field>>
  >;

  using annotations = __fbthrift_refl_impl::no_annotations;

  static id get_id(type const &variant) {
    return variant.getType();
  }

  static bool empty(type const &variant) {
    return variant.getType() == id::__EMPTY__;
  }

  static void clear(type &variant) {
    return apache::thrift::clear(variant);
  }
};
} // __fbthrift_refl

FATAL_REGISTER_ENUM_TRAITS(
  __fbthrift_refl::union1_tenum_traits,
  ::apache::thrift::detail::type_common_metadata_impl<
      module_tags::module,
      ::apache::thrift::reflected_annotations<__fbthrift_refl::union1_tenum_traits::annotations>,
      static_cast<::apache::thrift::legacy_type_id_t>(0ull)
  >
);
FATAL_REGISTER_VARIANT_TRAITS(
  __fbthrift_refl::union1_variant_traits,
  ::apache::thrift::detail::type_common_metadata_impl<
      module_tags::module,
      ::apache::thrift::reflected_annotations<__fbthrift_refl::union1_variant_traits::annotations>,
      static_cast<::apache::thrift::legacy_type_id_t>(15193987089687821868ull)
  >
);
FATAL_REGISTER_ENUM_TRAITS(
  __fbthrift_refl::union2_tenum_traits,
  ::apache::thrift::detail::type_common_metadata_impl<
      module_tags::module,
      ::apache::thrift::reflected_annotations<__fbthrift_refl::union2_tenum_traits::annotations>,
      static_cast<::apache::thrift::legacy_type_id_t>(0ull)
  >
);
FATAL_REGISTER_VARIANT_TRAITS(
  __fbthrift_refl::union2_variant_traits,
  ::apache::thrift::detail::type_common_metadata_impl<
      module_tags::module,
      ::apache::thrift::reflected_annotations<__fbthrift_refl::union2_variant_traits::annotations>,
      static_cast<::apache::thrift::legacy_type_id_t>(7436399996138825996ull)
  >
);
FATAL_REGISTER_ENUM_TRAITS(
  __fbthrift_refl::union3_tenum_traits,
  ::apache::thrift::detail::type_common_metadata_impl<
      module_tags::module,
      ::apache::thrift::reflected_annotations<__fbthrift_refl::union3_tenum_traits::annotations>,
      static_cast<::apache::thrift::legacy_type_id_t>(0ull)
  >
);
FATAL_REGISTER_VARIANT_TRAITS(
  __fbthrift_refl::union3_variant_traits,
  ::apache::thrift::detail::type_common_metadata_impl<
      module_tags::module,
      ::apache::thrift::reflected_annotations<__fbthrift_refl::union3_variant_traits::annotations>,
      static_cast<::apache::thrift::legacy_type_id_t>(12630661616538286124ull)
  >
);
FATAL_REGISTER_ENUM_TRAITS(
  __fbthrift_refl::unionA_tenum_traits,
  ::apache::thrift::detail::type_common_metadata_impl<
      module_tags::module,
      ::apache::thrift::reflected_annotations<__fbthrift_refl::unionA_tenum_traits::annotations>,
      static_cast<::apache::thrift::legacy_type_id_t>(0ull)
  >
);
FATAL_REGISTER_VARIANT_TRAITS(
  __fbthrift_refl::unionA_variant_traits,
  ::apache::thrift::detail::type_common_metadata_impl<
      module_tags::module,
      ::apache::thrift::reflected_annotations<__fbthrift_refl::unionA_variant_traits::annotations>,
      static_cast<::apache::thrift::legacy_type_id_t>(15005039916229430860ull)
  >
);
FATAL_REGISTER_ENUM_TRAITS(
  __fbthrift_refl::union_with_special_names_tenum_traits,
  ::apache::thrift::detail::type_common_metadata_impl<
      module_tags::module,
      ::apache::thrift::reflected_annotations<__fbthrift_refl::union_with_special_names_tenum_traits::annotations>,
      static_cast<::apache::thrift::legacy_type_id_t>(0ull)
  >
);
FATAL_REGISTER_VARIANT_TRAITS(
  __fbthrift_refl::union_with_special_names_variant_traits,
  ::apache::thrift::detail::type_common_metadata_impl<
      module_tags::module,
      ::apache::thrift::reflected_annotations<__fbthrift_refl::union_with_special_names_variant_traits::annotations>,
      static_cast<::apache::thrift::legacy_type_id_t>(13162369197726992076ull)
  >
);
FATAL_REGISTER_ENUM_TRAITS(
  __fbthrift_refl::UnionWithTypedefFieldAdapter_tenum_traits,
  ::apache::thrift::detail::type_common_metadata_impl<
      module_tags::module,
      ::apache::thrift::reflected_annotations<__fbthrift_refl::UnionWithTypedefFieldAdapter_tenum_traits::annotations>,
      static_cast<::apache::thrift::legacy_type_id_t>(0ull)
  >
);
FATAL_REGISTER_VARIANT_TRAITS(
  __fbthrift_refl::UnionWithTypedefFieldAdapter_variant_traits,
  ::apache::thrift::detail::type_common_metadata_impl<
      module_tags::module,
      ::apache::thrift::reflected_annotations<__fbthrift_refl::UnionWithTypedefFieldAdapter_variant_traits::annotations>,
      static_cast<::apache::thrift::legacy_type_id_t>(10841541077214060908ull)
  >
);
} // namespace test_cpp2::cpp_reflection
