1 /**
2  * Autogenerated by Thrift for src/module.thrift
3  *
4  * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
5  *  @generated @nocommit
6  */
7 #pragma once
8 
9 #include <thrift/lib/cpp2/gen/module_types_h.h>
10 
11 
12 #include "thrift/compiler/test/fixtures/fatal/gen-cpp2/reflection_dep_B_types.h"
13 #include "thrift/compiler/test/fixtures/fatal/gen-cpp2/reflection_dep_C_types.h"
14 #include "thrift/test/fatal_custom_types.h"
15 
16 namespace apache {
17 namespace thrift {
18 namespace tag {
19 struct ui;
20 struct ud;
21 struct us;
22 struct ue;
23 struct ui_2;
24 struct ud_2;
25 struct us_2;
26 struct ue_2;
27 struct ui_3;
28 struct ud_3;
29 struct us_3;
30 struct ue_3;
31 struct a;
32 struct b;
33 struct i;
34 struct d;
35 struct s;
36 struct e;
37 struct a;
38 struct c;
39 struct d;
40 struct a;
41 struct b;
42 struct c;
43 struct d;
44 struct e;
45 struct f;
46 struct g;
47 struct h;
48 struct i;
49 struct j;
50 struct j1;
51 struct j2;
52 struct j3;
53 struct k;
54 struct k1;
55 struct k2;
56 struct k3;
57 struct l;
58 struct l1;
59 struct l2;
60 struct l3;
61 struct m1;
62 struct m2;
63 struct m3;
64 struct n1;
65 struct n2;
66 struct n3;
67 struct o1;
68 struct o2;
69 struct o3;
70 struct field0;
71 struct field1;
72 struct field2;
73 struct field3;
74 struct field4;
75 struct field5;
76 struct fieldA;
77 struct fieldB;
78 struct fieldC;
79 struct fieldD;
80 struct fieldE;
81 struct fieldF;
82 struct fieldG;
83 struct fieldA;
84 struct fieldB;
85 struct fieldC;
86 struct fieldD;
87 struct fieldE;
88 struct fieldF;
89 struct fieldG;
90 struct fieldH;
91 struct fieldI;
92 struct fieldJ;
93 struct fieldK;
94 struct fieldL;
95 struct fieldM;
96 struct fieldN;
97 struct fieldO;
98 struct fieldP;
99 struct fieldQ;
100 struct fieldR;
101 struct field0;
102 struct field1;
103 struct field2;
104 struct field3;
105 struct field0;
106 struct field1;
107 struct field2;
108 struct field3;
109 struct field4;
110 struct bi;
111 struct b;
112 struct c;
113 struct i_a;
114 struct b;
115 struct c;
116 struct i_a;
117 struct a;
118 struct get;
119 struct getter;
120 struct lists;
121 struct maps;
122 struct name;
123 struct name_to_value;
124 struct names;
125 struct prefix_tree;
126 struct sets;
127 struct setter;
128 struct str;
129 struct strings;
130 struct type;
131 struct value;
132 struct value_to_name;
133 struct values;
134 struct id;
135 struct ids;
136 struct descriptor;
137 struct descriptors;
138 struct key;
139 struct keys;
140 struct annotation;
141 struct annotations;
142 struct member;
143 struct members;
144 struct field;
145 struct fields;
146 struct get;
147 struct getter;
148 struct lists;
149 struct maps;
150 struct name;
151 struct name_to_value;
152 struct names;
153 struct prefix_tree;
154 struct sets;
155 struct setter;
156 struct str;
157 struct strings;
158 struct type;
159 struct value;
160 struct value_to_name;
161 struct values;
162 struct id;
163 struct ids;
164 struct descriptor;
165 struct descriptors;
166 struct key;
167 struct keys;
168 struct annotation;
169 struct annotations;
170 struct member;
171 struct members;
172 struct field;
173 struct fields;
174 struct real;
175 struct fake;
176 struct number;
177 struct result;
178 struct phrase;
179 } // namespace tag
180 namespace detail {
181 #ifndef APACHE_THRIFT_ACCESSOR_ui
182 #define APACHE_THRIFT_ACCESSOR_ui
183 APACHE_THRIFT_DEFINE_ACCESSOR(ui);
184 #endif
185 #ifndef APACHE_THRIFT_ACCESSOR_ud
186 #define APACHE_THRIFT_ACCESSOR_ud
187 APACHE_THRIFT_DEFINE_ACCESSOR(ud);
188 #endif
189 #ifndef APACHE_THRIFT_ACCESSOR_us
190 #define APACHE_THRIFT_ACCESSOR_us
191 APACHE_THRIFT_DEFINE_ACCESSOR(us);
192 #endif
193 #ifndef APACHE_THRIFT_ACCESSOR_ue
194 #define APACHE_THRIFT_ACCESSOR_ue
195 APACHE_THRIFT_DEFINE_ACCESSOR(ue);
196 #endif
197 #ifndef APACHE_THRIFT_ACCESSOR_ui_2
198 #define APACHE_THRIFT_ACCESSOR_ui_2
199 APACHE_THRIFT_DEFINE_ACCESSOR(ui_2);
200 #endif
201 #ifndef APACHE_THRIFT_ACCESSOR_ud_2
202 #define APACHE_THRIFT_ACCESSOR_ud_2
203 APACHE_THRIFT_DEFINE_ACCESSOR(ud_2);
204 #endif
205 #ifndef APACHE_THRIFT_ACCESSOR_us_2
206 #define APACHE_THRIFT_ACCESSOR_us_2
207 APACHE_THRIFT_DEFINE_ACCESSOR(us_2);
208 #endif
209 #ifndef APACHE_THRIFT_ACCESSOR_ue_2
210 #define APACHE_THRIFT_ACCESSOR_ue_2
211 APACHE_THRIFT_DEFINE_ACCESSOR(ue_2);
212 #endif
213 #ifndef APACHE_THRIFT_ACCESSOR_ui_3
214 #define APACHE_THRIFT_ACCESSOR_ui_3
215 APACHE_THRIFT_DEFINE_ACCESSOR(ui_3);
216 #endif
217 #ifndef APACHE_THRIFT_ACCESSOR_ud_3
218 #define APACHE_THRIFT_ACCESSOR_ud_3
219 APACHE_THRIFT_DEFINE_ACCESSOR(ud_3);
220 #endif
221 #ifndef APACHE_THRIFT_ACCESSOR_us_3
222 #define APACHE_THRIFT_ACCESSOR_us_3
223 APACHE_THRIFT_DEFINE_ACCESSOR(us_3);
224 #endif
225 #ifndef APACHE_THRIFT_ACCESSOR_ue_3
226 #define APACHE_THRIFT_ACCESSOR_ue_3
227 APACHE_THRIFT_DEFINE_ACCESSOR(ue_3);
228 #endif
229 #ifndef APACHE_THRIFT_ACCESSOR_a
230 #define APACHE_THRIFT_ACCESSOR_a
231 APACHE_THRIFT_DEFINE_ACCESSOR(a);
232 #endif
233 #ifndef APACHE_THRIFT_ACCESSOR_b
234 #define APACHE_THRIFT_ACCESSOR_b
235 APACHE_THRIFT_DEFINE_ACCESSOR(b);
236 #endif
237 #ifndef APACHE_THRIFT_ACCESSOR_i
238 #define APACHE_THRIFT_ACCESSOR_i
239 APACHE_THRIFT_DEFINE_ACCESSOR(i);
240 #endif
241 #ifndef APACHE_THRIFT_ACCESSOR_d
242 #define APACHE_THRIFT_ACCESSOR_d
243 APACHE_THRIFT_DEFINE_ACCESSOR(d);
244 #endif
245 #ifndef APACHE_THRIFT_ACCESSOR_s
246 #define APACHE_THRIFT_ACCESSOR_s
247 APACHE_THRIFT_DEFINE_ACCESSOR(s);
248 #endif
249 #ifndef APACHE_THRIFT_ACCESSOR_e
250 #define APACHE_THRIFT_ACCESSOR_e
251 APACHE_THRIFT_DEFINE_ACCESSOR(e);
252 #endif
253 #ifndef APACHE_THRIFT_ACCESSOR_a
254 #define APACHE_THRIFT_ACCESSOR_a
255 APACHE_THRIFT_DEFINE_ACCESSOR(a);
256 #endif
257 #ifndef APACHE_THRIFT_ACCESSOR_c
258 #define APACHE_THRIFT_ACCESSOR_c
259 APACHE_THRIFT_DEFINE_ACCESSOR(c);
260 #endif
261 #ifndef APACHE_THRIFT_ACCESSOR_d
262 #define APACHE_THRIFT_ACCESSOR_d
263 APACHE_THRIFT_DEFINE_ACCESSOR(d);
264 #endif
265 #ifndef APACHE_THRIFT_ACCESSOR_a
266 #define APACHE_THRIFT_ACCESSOR_a
267 APACHE_THRIFT_DEFINE_ACCESSOR(a);
268 #endif
269 #ifndef APACHE_THRIFT_ACCESSOR_b
270 #define APACHE_THRIFT_ACCESSOR_b
271 APACHE_THRIFT_DEFINE_ACCESSOR(b);
272 #endif
273 #ifndef APACHE_THRIFT_ACCESSOR_c
274 #define APACHE_THRIFT_ACCESSOR_c
275 APACHE_THRIFT_DEFINE_ACCESSOR(c);
276 #endif
277 #ifndef APACHE_THRIFT_ACCESSOR_d
278 #define APACHE_THRIFT_ACCESSOR_d
279 APACHE_THRIFT_DEFINE_ACCESSOR(d);
280 #endif
281 #ifndef APACHE_THRIFT_ACCESSOR_e
282 #define APACHE_THRIFT_ACCESSOR_e
283 APACHE_THRIFT_DEFINE_ACCESSOR(e);
284 #endif
285 #ifndef APACHE_THRIFT_ACCESSOR_f
286 #define APACHE_THRIFT_ACCESSOR_f
287 APACHE_THRIFT_DEFINE_ACCESSOR(f);
288 #endif
289 #ifndef APACHE_THRIFT_ACCESSOR_g
290 #define APACHE_THRIFT_ACCESSOR_g
291 APACHE_THRIFT_DEFINE_ACCESSOR(g);
292 #endif
293 #ifndef APACHE_THRIFT_ACCESSOR_h
294 #define APACHE_THRIFT_ACCESSOR_h
295 APACHE_THRIFT_DEFINE_ACCESSOR(h);
296 #endif
297 #ifndef APACHE_THRIFT_ACCESSOR_i
298 #define APACHE_THRIFT_ACCESSOR_i
299 APACHE_THRIFT_DEFINE_ACCESSOR(i);
300 #endif
301 #ifndef APACHE_THRIFT_ACCESSOR_j
302 #define APACHE_THRIFT_ACCESSOR_j
303 APACHE_THRIFT_DEFINE_ACCESSOR(j);
304 #endif
305 #ifndef APACHE_THRIFT_ACCESSOR_j1
306 #define APACHE_THRIFT_ACCESSOR_j1
307 APACHE_THRIFT_DEFINE_ACCESSOR(j1);
308 #endif
309 #ifndef APACHE_THRIFT_ACCESSOR_j2
310 #define APACHE_THRIFT_ACCESSOR_j2
311 APACHE_THRIFT_DEFINE_ACCESSOR(j2);
312 #endif
313 #ifndef APACHE_THRIFT_ACCESSOR_j3
314 #define APACHE_THRIFT_ACCESSOR_j3
315 APACHE_THRIFT_DEFINE_ACCESSOR(j3);
316 #endif
317 #ifndef APACHE_THRIFT_ACCESSOR_k
318 #define APACHE_THRIFT_ACCESSOR_k
319 APACHE_THRIFT_DEFINE_ACCESSOR(k);
320 #endif
321 #ifndef APACHE_THRIFT_ACCESSOR_k1
322 #define APACHE_THRIFT_ACCESSOR_k1
323 APACHE_THRIFT_DEFINE_ACCESSOR(k1);
324 #endif
325 #ifndef APACHE_THRIFT_ACCESSOR_k2
326 #define APACHE_THRIFT_ACCESSOR_k2
327 APACHE_THRIFT_DEFINE_ACCESSOR(k2);
328 #endif
329 #ifndef APACHE_THRIFT_ACCESSOR_k3
330 #define APACHE_THRIFT_ACCESSOR_k3
331 APACHE_THRIFT_DEFINE_ACCESSOR(k3);
332 #endif
333 #ifndef APACHE_THRIFT_ACCESSOR_l
334 #define APACHE_THRIFT_ACCESSOR_l
335 APACHE_THRIFT_DEFINE_ACCESSOR(l);
336 #endif
337 #ifndef APACHE_THRIFT_ACCESSOR_l1
338 #define APACHE_THRIFT_ACCESSOR_l1
339 APACHE_THRIFT_DEFINE_ACCESSOR(l1);
340 #endif
341 #ifndef APACHE_THRIFT_ACCESSOR_l2
342 #define APACHE_THRIFT_ACCESSOR_l2
343 APACHE_THRIFT_DEFINE_ACCESSOR(l2);
344 #endif
345 #ifndef APACHE_THRIFT_ACCESSOR_l3
346 #define APACHE_THRIFT_ACCESSOR_l3
347 APACHE_THRIFT_DEFINE_ACCESSOR(l3);
348 #endif
349 #ifndef APACHE_THRIFT_ACCESSOR_m1
350 #define APACHE_THRIFT_ACCESSOR_m1
351 APACHE_THRIFT_DEFINE_ACCESSOR(m1);
352 #endif
353 #ifndef APACHE_THRIFT_ACCESSOR_m2
354 #define APACHE_THRIFT_ACCESSOR_m2
355 APACHE_THRIFT_DEFINE_ACCESSOR(m2);
356 #endif
357 #ifndef APACHE_THRIFT_ACCESSOR_m3
358 #define APACHE_THRIFT_ACCESSOR_m3
359 APACHE_THRIFT_DEFINE_ACCESSOR(m3);
360 #endif
361 #ifndef APACHE_THRIFT_ACCESSOR_n1
362 #define APACHE_THRIFT_ACCESSOR_n1
363 APACHE_THRIFT_DEFINE_ACCESSOR(n1);
364 #endif
365 #ifndef APACHE_THRIFT_ACCESSOR_n2
366 #define APACHE_THRIFT_ACCESSOR_n2
367 APACHE_THRIFT_DEFINE_ACCESSOR(n2);
368 #endif
369 #ifndef APACHE_THRIFT_ACCESSOR_n3
370 #define APACHE_THRIFT_ACCESSOR_n3
371 APACHE_THRIFT_DEFINE_ACCESSOR(n3);
372 #endif
373 #ifndef APACHE_THRIFT_ACCESSOR_o1
374 #define APACHE_THRIFT_ACCESSOR_o1
375 APACHE_THRIFT_DEFINE_ACCESSOR(o1);
376 #endif
377 #ifndef APACHE_THRIFT_ACCESSOR_o2
378 #define APACHE_THRIFT_ACCESSOR_o2
379 APACHE_THRIFT_DEFINE_ACCESSOR(o2);
380 #endif
381 #ifndef APACHE_THRIFT_ACCESSOR_o3
382 #define APACHE_THRIFT_ACCESSOR_o3
383 APACHE_THRIFT_DEFINE_ACCESSOR(o3);
384 #endif
385 #ifndef APACHE_THRIFT_ACCESSOR_field0
386 #define APACHE_THRIFT_ACCESSOR_field0
387 APACHE_THRIFT_DEFINE_ACCESSOR(field0);
388 #endif
389 #ifndef APACHE_THRIFT_ACCESSOR_field1
390 #define APACHE_THRIFT_ACCESSOR_field1
391 APACHE_THRIFT_DEFINE_ACCESSOR(field1);
392 #endif
393 #ifndef APACHE_THRIFT_ACCESSOR_field2
394 #define APACHE_THRIFT_ACCESSOR_field2
395 APACHE_THRIFT_DEFINE_ACCESSOR(field2);
396 #endif
397 #ifndef APACHE_THRIFT_ACCESSOR_field3
398 #define APACHE_THRIFT_ACCESSOR_field3
399 APACHE_THRIFT_DEFINE_ACCESSOR(field3);
400 #endif
401 #ifndef APACHE_THRIFT_ACCESSOR_field4
402 #define APACHE_THRIFT_ACCESSOR_field4
403 APACHE_THRIFT_DEFINE_ACCESSOR(field4);
404 #endif
405 #ifndef APACHE_THRIFT_ACCESSOR_field5
406 #define APACHE_THRIFT_ACCESSOR_field5
407 APACHE_THRIFT_DEFINE_ACCESSOR(field5);
408 #endif
409 #ifndef APACHE_THRIFT_ACCESSOR_fieldA
410 #define APACHE_THRIFT_ACCESSOR_fieldA
411 APACHE_THRIFT_DEFINE_ACCESSOR(fieldA);
412 #endif
413 #ifndef APACHE_THRIFT_ACCESSOR_fieldB
414 #define APACHE_THRIFT_ACCESSOR_fieldB
415 APACHE_THRIFT_DEFINE_ACCESSOR(fieldB);
416 #endif
417 #ifndef APACHE_THRIFT_ACCESSOR_fieldC
418 #define APACHE_THRIFT_ACCESSOR_fieldC
419 APACHE_THRIFT_DEFINE_ACCESSOR(fieldC);
420 #endif
421 #ifndef APACHE_THRIFT_ACCESSOR_fieldD
422 #define APACHE_THRIFT_ACCESSOR_fieldD
423 APACHE_THRIFT_DEFINE_ACCESSOR(fieldD);
424 #endif
425 #ifndef APACHE_THRIFT_ACCESSOR_fieldE
426 #define APACHE_THRIFT_ACCESSOR_fieldE
427 APACHE_THRIFT_DEFINE_ACCESSOR(fieldE);
428 #endif
429 #ifndef APACHE_THRIFT_ACCESSOR_fieldF
430 #define APACHE_THRIFT_ACCESSOR_fieldF
431 APACHE_THRIFT_DEFINE_ACCESSOR(fieldF);
432 #endif
433 #ifndef APACHE_THRIFT_ACCESSOR_fieldG
434 #define APACHE_THRIFT_ACCESSOR_fieldG
435 APACHE_THRIFT_DEFINE_ACCESSOR(fieldG);
436 #endif
437 #ifndef APACHE_THRIFT_ACCESSOR_fieldA
438 #define APACHE_THRIFT_ACCESSOR_fieldA
439 APACHE_THRIFT_DEFINE_ACCESSOR(fieldA);
440 #endif
441 #ifndef APACHE_THRIFT_ACCESSOR_fieldB
442 #define APACHE_THRIFT_ACCESSOR_fieldB
443 APACHE_THRIFT_DEFINE_ACCESSOR(fieldB);
444 #endif
445 #ifndef APACHE_THRIFT_ACCESSOR_fieldC
446 #define APACHE_THRIFT_ACCESSOR_fieldC
447 APACHE_THRIFT_DEFINE_ACCESSOR(fieldC);
448 #endif
449 #ifndef APACHE_THRIFT_ACCESSOR_fieldD
450 #define APACHE_THRIFT_ACCESSOR_fieldD
451 APACHE_THRIFT_DEFINE_ACCESSOR(fieldD);
452 #endif
453 #ifndef APACHE_THRIFT_ACCESSOR_fieldE
454 #define APACHE_THRIFT_ACCESSOR_fieldE
455 APACHE_THRIFT_DEFINE_ACCESSOR(fieldE);
456 #endif
457 #ifndef APACHE_THRIFT_ACCESSOR_fieldF
458 #define APACHE_THRIFT_ACCESSOR_fieldF
459 APACHE_THRIFT_DEFINE_ACCESSOR(fieldF);
460 #endif
461 #ifndef APACHE_THRIFT_ACCESSOR_fieldG
462 #define APACHE_THRIFT_ACCESSOR_fieldG
463 APACHE_THRIFT_DEFINE_ACCESSOR(fieldG);
464 #endif
465 #ifndef APACHE_THRIFT_ACCESSOR_fieldH
466 #define APACHE_THRIFT_ACCESSOR_fieldH
467 APACHE_THRIFT_DEFINE_ACCESSOR(fieldH);
468 #endif
469 #ifndef APACHE_THRIFT_ACCESSOR_fieldI
470 #define APACHE_THRIFT_ACCESSOR_fieldI
471 APACHE_THRIFT_DEFINE_ACCESSOR(fieldI);
472 #endif
473 #ifndef APACHE_THRIFT_ACCESSOR_fieldJ
474 #define APACHE_THRIFT_ACCESSOR_fieldJ
475 APACHE_THRIFT_DEFINE_ACCESSOR(fieldJ);
476 #endif
477 #ifndef APACHE_THRIFT_ACCESSOR_fieldK
478 #define APACHE_THRIFT_ACCESSOR_fieldK
479 APACHE_THRIFT_DEFINE_ACCESSOR(fieldK);
480 #endif
481 #ifndef APACHE_THRIFT_ACCESSOR_fieldL
482 #define APACHE_THRIFT_ACCESSOR_fieldL
483 APACHE_THRIFT_DEFINE_ACCESSOR(fieldL);
484 #endif
485 #ifndef APACHE_THRIFT_ACCESSOR_fieldM
486 #define APACHE_THRIFT_ACCESSOR_fieldM
487 APACHE_THRIFT_DEFINE_ACCESSOR(fieldM);
488 #endif
489 #ifndef APACHE_THRIFT_ACCESSOR_fieldN
490 #define APACHE_THRIFT_ACCESSOR_fieldN
491 APACHE_THRIFT_DEFINE_ACCESSOR(fieldN);
492 #endif
493 #ifndef APACHE_THRIFT_ACCESSOR_fieldO
494 #define APACHE_THRIFT_ACCESSOR_fieldO
495 APACHE_THRIFT_DEFINE_ACCESSOR(fieldO);
496 #endif
497 #ifndef APACHE_THRIFT_ACCESSOR_fieldP
498 #define APACHE_THRIFT_ACCESSOR_fieldP
499 APACHE_THRIFT_DEFINE_ACCESSOR(fieldP);
500 #endif
501 #ifndef APACHE_THRIFT_ACCESSOR_fieldQ
502 #define APACHE_THRIFT_ACCESSOR_fieldQ
503 APACHE_THRIFT_DEFINE_ACCESSOR(fieldQ);
504 #endif
505 #ifndef APACHE_THRIFT_ACCESSOR_fieldR
506 #define APACHE_THRIFT_ACCESSOR_fieldR
507 APACHE_THRIFT_DEFINE_ACCESSOR(fieldR);
508 #endif
509 #ifndef APACHE_THRIFT_ACCESSOR_field0
510 #define APACHE_THRIFT_ACCESSOR_field0
511 APACHE_THRIFT_DEFINE_ACCESSOR(field0);
512 #endif
513 #ifndef APACHE_THRIFT_ACCESSOR_field1
514 #define APACHE_THRIFT_ACCESSOR_field1
515 APACHE_THRIFT_DEFINE_ACCESSOR(field1);
516 #endif
517 #ifndef APACHE_THRIFT_ACCESSOR_field2
518 #define APACHE_THRIFT_ACCESSOR_field2
519 APACHE_THRIFT_DEFINE_ACCESSOR(field2);
520 #endif
521 #ifndef APACHE_THRIFT_ACCESSOR_field3
522 #define APACHE_THRIFT_ACCESSOR_field3
523 APACHE_THRIFT_DEFINE_ACCESSOR(field3);
524 #endif
525 #ifndef APACHE_THRIFT_ACCESSOR_field0
526 #define APACHE_THRIFT_ACCESSOR_field0
527 APACHE_THRIFT_DEFINE_ACCESSOR(field0);
528 #endif
529 #ifndef APACHE_THRIFT_ACCESSOR_field1
530 #define APACHE_THRIFT_ACCESSOR_field1
531 APACHE_THRIFT_DEFINE_ACCESSOR(field1);
532 #endif
533 #ifndef APACHE_THRIFT_ACCESSOR_field2
534 #define APACHE_THRIFT_ACCESSOR_field2
535 APACHE_THRIFT_DEFINE_ACCESSOR(field2);
536 #endif
537 #ifndef APACHE_THRIFT_ACCESSOR_field3
538 #define APACHE_THRIFT_ACCESSOR_field3
539 APACHE_THRIFT_DEFINE_ACCESSOR(field3);
540 #endif
541 #ifndef APACHE_THRIFT_ACCESSOR_field4
542 #define APACHE_THRIFT_ACCESSOR_field4
543 APACHE_THRIFT_DEFINE_ACCESSOR(field4);
544 #endif
545 #ifndef APACHE_THRIFT_ACCESSOR_bi
546 #define APACHE_THRIFT_ACCESSOR_bi
547 APACHE_THRIFT_DEFINE_ACCESSOR(bi);
548 #endif
549 #ifndef APACHE_THRIFT_ACCESSOR_b
550 #define APACHE_THRIFT_ACCESSOR_b
551 APACHE_THRIFT_DEFINE_ACCESSOR(b);
552 #endif
553 #ifndef APACHE_THRIFT_ACCESSOR_c
554 #define APACHE_THRIFT_ACCESSOR_c
555 APACHE_THRIFT_DEFINE_ACCESSOR(c);
556 #endif
557 #ifndef APACHE_THRIFT_ACCESSOR_i_a
558 #define APACHE_THRIFT_ACCESSOR_i_a
559 APACHE_THRIFT_DEFINE_ACCESSOR(i_a);
560 #endif
561 #ifndef APACHE_THRIFT_ACCESSOR_b
562 #define APACHE_THRIFT_ACCESSOR_b
563 APACHE_THRIFT_DEFINE_ACCESSOR(b);
564 #endif
565 #ifndef APACHE_THRIFT_ACCESSOR_c
566 #define APACHE_THRIFT_ACCESSOR_c
567 APACHE_THRIFT_DEFINE_ACCESSOR(c);
568 #endif
569 #ifndef APACHE_THRIFT_ACCESSOR_i_a
570 #define APACHE_THRIFT_ACCESSOR_i_a
571 APACHE_THRIFT_DEFINE_ACCESSOR(i_a);
572 #endif
573 #ifndef APACHE_THRIFT_ACCESSOR_a
574 #define APACHE_THRIFT_ACCESSOR_a
575 APACHE_THRIFT_DEFINE_ACCESSOR(a);
576 #endif
577 #ifndef APACHE_THRIFT_ACCESSOR_get
578 #define APACHE_THRIFT_ACCESSOR_get
579 APACHE_THRIFT_DEFINE_ACCESSOR(get);
580 #endif
581 #ifndef APACHE_THRIFT_ACCESSOR_getter
582 #define APACHE_THRIFT_ACCESSOR_getter
583 APACHE_THRIFT_DEFINE_ACCESSOR(getter);
584 #endif
585 #ifndef APACHE_THRIFT_ACCESSOR_lists
586 #define APACHE_THRIFT_ACCESSOR_lists
587 APACHE_THRIFT_DEFINE_ACCESSOR(lists);
588 #endif
589 #ifndef APACHE_THRIFT_ACCESSOR_maps
590 #define APACHE_THRIFT_ACCESSOR_maps
591 APACHE_THRIFT_DEFINE_ACCESSOR(maps);
592 #endif
593 #ifndef APACHE_THRIFT_ACCESSOR_name
594 #define APACHE_THRIFT_ACCESSOR_name
595 APACHE_THRIFT_DEFINE_ACCESSOR(name);
596 #endif
597 #ifndef APACHE_THRIFT_ACCESSOR_name_to_value
598 #define APACHE_THRIFT_ACCESSOR_name_to_value
599 APACHE_THRIFT_DEFINE_ACCESSOR(name_to_value);
600 #endif
601 #ifndef APACHE_THRIFT_ACCESSOR_names
602 #define APACHE_THRIFT_ACCESSOR_names
603 APACHE_THRIFT_DEFINE_ACCESSOR(names);
604 #endif
605 #ifndef APACHE_THRIFT_ACCESSOR_prefix_tree
606 #define APACHE_THRIFT_ACCESSOR_prefix_tree
607 APACHE_THRIFT_DEFINE_ACCESSOR(prefix_tree);
608 #endif
609 #ifndef APACHE_THRIFT_ACCESSOR_sets
610 #define APACHE_THRIFT_ACCESSOR_sets
611 APACHE_THRIFT_DEFINE_ACCESSOR(sets);
612 #endif
613 #ifndef APACHE_THRIFT_ACCESSOR_setter
614 #define APACHE_THRIFT_ACCESSOR_setter
615 APACHE_THRIFT_DEFINE_ACCESSOR(setter);
616 #endif
617 #ifndef APACHE_THRIFT_ACCESSOR_str
618 #define APACHE_THRIFT_ACCESSOR_str
619 APACHE_THRIFT_DEFINE_ACCESSOR(str);
620 #endif
621 #ifndef APACHE_THRIFT_ACCESSOR_strings
622 #define APACHE_THRIFT_ACCESSOR_strings
623 APACHE_THRIFT_DEFINE_ACCESSOR(strings);
624 #endif
625 #ifndef APACHE_THRIFT_ACCESSOR_type
626 #define APACHE_THRIFT_ACCESSOR_type
627 APACHE_THRIFT_DEFINE_ACCESSOR(type);
628 #endif
629 #ifndef APACHE_THRIFT_ACCESSOR_value
630 #define APACHE_THRIFT_ACCESSOR_value
631 APACHE_THRIFT_DEFINE_ACCESSOR(value);
632 #endif
633 #ifndef APACHE_THRIFT_ACCESSOR_value_to_name
634 #define APACHE_THRIFT_ACCESSOR_value_to_name
635 APACHE_THRIFT_DEFINE_ACCESSOR(value_to_name);
636 #endif
637 #ifndef APACHE_THRIFT_ACCESSOR_values
638 #define APACHE_THRIFT_ACCESSOR_values
639 APACHE_THRIFT_DEFINE_ACCESSOR(values);
640 #endif
641 #ifndef APACHE_THRIFT_ACCESSOR_id
642 #define APACHE_THRIFT_ACCESSOR_id
643 APACHE_THRIFT_DEFINE_ACCESSOR(id);
644 #endif
645 #ifndef APACHE_THRIFT_ACCESSOR_ids
646 #define APACHE_THRIFT_ACCESSOR_ids
647 APACHE_THRIFT_DEFINE_ACCESSOR(ids);
648 #endif
649 #ifndef APACHE_THRIFT_ACCESSOR_descriptor
650 #define APACHE_THRIFT_ACCESSOR_descriptor
651 APACHE_THRIFT_DEFINE_ACCESSOR(descriptor);
652 #endif
653 #ifndef APACHE_THRIFT_ACCESSOR_descriptors
654 #define APACHE_THRIFT_ACCESSOR_descriptors
655 APACHE_THRIFT_DEFINE_ACCESSOR(descriptors);
656 #endif
657 #ifndef APACHE_THRIFT_ACCESSOR_key
658 #define APACHE_THRIFT_ACCESSOR_key
659 APACHE_THRIFT_DEFINE_ACCESSOR(key);
660 #endif
661 #ifndef APACHE_THRIFT_ACCESSOR_keys
662 #define APACHE_THRIFT_ACCESSOR_keys
663 APACHE_THRIFT_DEFINE_ACCESSOR(keys);
664 #endif
665 #ifndef APACHE_THRIFT_ACCESSOR_annotation
666 #define APACHE_THRIFT_ACCESSOR_annotation
667 APACHE_THRIFT_DEFINE_ACCESSOR(annotation);
668 #endif
669 #ifndef APACHE_THRIFT_ACCESSOR_annotations
670 #define APACHE_THRIFT_ACCESSOR_annotations
671 APACHE_THRIFT_DEFINE_ACCESSOR(annotations);
672 #endif
673 #ifndef APACHE_THRIFT_ACCESSOR_member
674 #define APACHE_THRIFT_ACCESSOR_member
675 APACHE_THRIFT_DEFINE_ACCESSOR(member);
676 #endif
677 #ifndef APACHE_THRIFT_ACCESSOR_members
678 #define APACHE_THRIFT_ACCESSOR_members
679 APACHE_THRIFT_DEFINE_ACCESSOR(members);
680 #endif
681 #ifndef APACHE_THRIFT_ACCESSOR_field
682 #define APACHE_THRIFT_ACCESSOR_field
683 APACHE_THRIFT_DEFINE_ACCESSOR(field);
684 #endif
685 #ifndef APACHE_THRIFT_ACCESSOR_fields
686 #define APACHE_THRIFT_ACCESSOR_fields
687 APACHE_THRIFT_DEFINE_ACCESSOR(fields);
688 #endif
689 #ifndef APACHE_THRIFT_ACCESSOR_get
690 #define APACHE_THRIFT_ACCESSOR_get
691 APACHE_THRIFT_DEFINE_ACCESSOR(get);
692 #endif
693 #ifndef APACHE_THRIFT_ACCESSOR_getter
694 #define APACHE_THRIFT_ACCESSOR_getter
695 APACHE_THRIFT_DEFINE_ACCESSOR(getter);
696 #endif
697 #ifndef APACHE_THRIFT_ACCESSOR_lists
698 #define APACHE_THRIFT_ACCESSOR_lists
699 APACHE_THRIFT_DEFINE_ACCESSOR(lists);
700 #endif
701 #ifndef APACHE_THRIFT_ACCESSOR_maps
702 #define APACHE_THRIFT_ACCESSOR_maps
703 APACHE_THRIFT_DEFINE_ACCESSOR(maps);
704 #endif
705 #ifndef APACHE_THRIFT_ACCESSOR_name
706 #define APACHE_THRIFT_ACCESSOR_name
707 APACHE_THRIFT_DEFINE_ACCESSOR(name);
708 #endif
709 #ifndef APACHE_THRIFT_ACCESSOR_name_to_value
710 #define APACHE_THRIFT_ACCESSOR_name_to_value
711 APACHE_THRIFT_DEFINE_ACCESSOR(name_to_value);
712 #endif
713 #ifndef APACHE_THRIFT_ACCESSOR_names
714 #define APACHE_THRIFT_ACCESSOR_names
715 APACHE_THRIFT_DEFINE_ACCESSOR(names);
716 #endif
717 #ifndef APACHE_THRIFT_ACCESSOR_prefix_tree
718 #define APACHE_THRIFT_ACCESSOR_prefix_tree
719 APACHE_THRIFT_DEFINE_ACCESSOR(prefix_tree);
720 #endif
721 #ifndef APACHE_THRIFT_ACCESSOR_sets
722 #define APACHE_THRIFT_ACCESSOR_sets
723 APACHE_THRIFT_DEFINE_ACCESSOR(sets);
724 #endif
725 #ifndef APACHE_THRIFT_ACCESSOR_setter
726 #define APACHE_THRIFT_ACCESSOR_setter
727 APACHE_THRIFT_DEFINE_ACCESSOR(setter);
728 #endif
729 #ifndef APACHE_THRIFT_ACCESSOR_str
730 #define APACHE_THRIFT_ACCESSOR_str
731 APACHE_THRIFT_DEFINE_ACCESSOR(str);
732 #endif
733 #ifndef APACHE_THRIFT_ACCESSOR_strings
734 #define APACHE_THRIFT_ACCESSOR_strings
735 APACHE_THRIFT_DEFINE_ACCESSOR(strings);
736 #endif
737 #ifndef APACHE_THRIFT_ACCESSOR_type
738 #define APACHE_THRIFT_ACCESSOR_type
739 APACHE_THRIFT_DEFINE_ACCESSOR(type);
740 #endif
741 #ifndef APACHE_THRIFT_ACCESSOR_value
742 #define APACHE_THRIFT_ACCESSOR_value
743 APACHE_THRIFT_DEFINE_ACCESSOR(value);
744 #endif
745 #ifndef APACHE_THRIFT_ACCESSOR_value_to_name
746 #define APACHE_THRIFT_ACCESSOR_value_to_name
747 APACHE_THRIFT_DEFINE_ACCESSOR(value_to_name);
748 #endif
749 #ifndef APACHE_THRIFT_ACCESSOR_values
750 #define APACHE_THRIFT_ACCESSOR_values
751 APACHE_THRIFT_DEFINE_ACCESSOR(values);
752 #endif
753 #ifndef APACHE_THRIFT_ACCESSOR_id
754 #define APACHE_THRIFT_ACCESSOR_id
755 APACHE_THRIFT_DEFINE_ACCESSOR(id);
756 #endif
757 #ifndef APACHE_THRIFT_ACCESSOR_ids
758 #define APACHE_THRIFT_ACCESSOR_ids
759 APACHE_THRIFT_DEFINE_ACCESSOR(ids);
760 #endif
761 #ifndef APACHE_THRIFT_ACCESSOR_descriptor
762 #define APACHE_THRIFT_ACCESSOR_descriptor
763 APACHE_THRIFT_DEFINE_ACCESSOR(descriptor);
764 #endif
765 #ifndef APACHE_THRIFT_ACCESSOR_descriptors
766 #define APACHE_THRIFT_ACCESSOR_descriptors
767 APACHE_THRIFT_DEFINE_ACCESSOR(descriptors);
768 #endif
769 #ifndef APACHE_THRIFT_ACCESSOR_key
770 #define APACHE_THRIFT_ACCESSOR_key
771 APACHE_THRIFT_DEFINE_ACCESSOR(key);
772 #endif
773 #ifndef APACHE_THRIFT_ACCESSOR_keys
774 #define APACHE_THRIFT_ACCESSOR_keys
775 APACHE_THRIFT_DEFINE_ACCESSOR(keys);
776 #endif
777 #ifndef APACHE_THRIFT_ACCESSOR_annotation
778 #define APACHE_THRIFT_ACCESSOR_annotation
779 APACHE_THRIFT_DEFINE_ACCESSOR(annotation);
780 #endif
781 #ifndef APACHE_THRIFT_ACCESSOR_annotations
782 #define APACHE_THRIFT_ACCESSOR_annotations
783 APACHE_THRIFT_DEFINE_ACCESSOR(annotations);
784 #endif
785 #ifndef APACHE_THRIFT_ACCESSOR_member
786 #define APACHE_THRIFT_ACCESSOR_member
787 APACHE_THRIFT_DEFINE_ACCESSOR(member);
788 #endif
789 #ifndef APACHE_THRIFT_ACCESSOR_members
790 #define APACHE_THRIFT_ACCESSOR_members
791 APACHE_THRIFT_DEFINE_ACCESSOR(members);
792 #endif
793 #ifndef APACHE_THRIFT_ACCESSOR_field
794 #define APACHE_THRIFT_ACCESSOR_field
795 APACHE_THRIFT_DEFINE_ACCESSOR(field);
796 #endif
797 #ifndef APACHE_THRIFT_ACCESSOR_fields
798 #define APACHE_THRIFT_ACCESSOR_fields
799 APACHE_THRIFT_DEFINE_ACCESSOR(fields);
800 #endif
801 #ifndef APACHE_THRIFT_ACCESSOR_real
802 #define APACHE_THRIFT_ACCESSOR_real
803 APACHE_THRIFT_DEFINE_ACCESSOR(real);
804 #endif
805 #ifndef APACHE_THRIFT_ACCESSOR_fake
806 #define APACHE_THRIFT_ACCESSOR_fake
807 APACHE_THRIFT_DEFINE_ACCESSOR(fake);
808 #endif
809 #ifndef APACHE_THRIFT_ACCESSOR_number
810 #define APACHE_THRIFT_ACCESSOR_number
811 APACHE_THRIFT_DEFINE_ACCESSOR(number);
812 #endif
813 #ifndef APACHE_THRIFT_ACCESSOR_result
814 #define APACHE_THRIFT_ACCESSOR_result
815 APACHE_THRIFT_DEFINE_ACCESSOR(result);
816 #endif
817 #ifndef APACHE_THRIFT_ACCESSOR_phrase
818 #define APACHE_THRIFT_ACCESSOR_phrase
819 APACHE_THRIFT_DEFINE_ACCESSOR(phrase);
820 #endif
821 } // namespace detail
822 } // namespace thrift
823 } // namespace apache
824 
825 // BEGIN declare_enums
826 namespace test_cpp2 { namespace cpp_reflection {
827 
828 enum class enum1 {
829   field0 = 0,
830   field1 = 1,
831   field2 = 2,
832 };
833 
834 
835 
836 
837 enum class enum2 {
838   field0_2 = 0,
839   field1_2 = 1,
840   field2_2 = 2,
841 };
842 
843 
844 
845 
846 enum class enum3 {
847   field0_3 = 0,
848   field1_3 = 1,
849 };
850 
851 
852 
853 
854 enum class enum_with_special_names {
855   get = 0,
856   getter = 1,
857   lists = 2,
858   maps = 3,
859   name = 4,
860   name_to_value = 5,
861   names = 6,
862   prefix_tree = 7,
863   sets = 8,
864   setter = 9,
865   str = 10,
866   strings = 11,
867   type = 12,
868   value = 13,
869   value_to_name = 14,
870   values = 15,
871   id = 16,
872   ids = 17,
873   descriptor = 18,
874   descriptors = 19,
875   key = 20,
876   keys = 21,
877   annotation = 22,
878   annotations = 23,
879   member = 24,
880   members = 25,
881   field = 26,
882   fields = 27,
883 };
884 
885 
886 
887 
888 }} // test_cpp2::cpp_reflection
889 
890 namespace std {
891 template<> struct hash<::test_cpp2::cpp_reflection::enum1> :
892   ::apache::thrift::detail::enum_hash<::test_cpp2::cpp_reflection::enum1> {};
893 template<> struct hash<::test_cpp2::cpp_reflection::enum2> :
894   ::apache::thrift::detail::enum_hash<::test_cpp2::cpp_reflection::enum2> {};
895 template<> struct hash<::test_cpp2::cpp_reflection::enum3> :
896   ::apache::thrift::detail::enum_hash<::test_cpp2::cpp_reflection::enum3> {};
897 template<> struct hash<::test_cpp2::cpp_reflection::enum_with_special_names> :
898   ::apache::thrift::detail::enum_hash<::test_cpp2::cpp_reflection::enum_with_special_names> {};
899 } // std
900 
901 namespace apache { namespace thrift {
902 
903 
904 template <> struct TEnumDataStorage<::test_cpp2::cpp_reflection::enum1>;
905 
906 template <> struct TEnumTraits<::test_cpp2::cpp_reflection::enum1> {
907   using type = ::test_cpp2::cpp_reflection::enum1;
908 
909   static constexpr std::size_t const size = 3;
910   static folly::Range<type const*> const values;
911   static folly::Range<folly::StringPiece const*> const names;
912 
913   static char const* findName(type value);
914   static bool findValue(char const* name, type* out);
915 
916   static constexpr type min() { return type::field0; }
917   static constexpr type max() { return type::field2; }
918 };
919 
920 
921 template <> struct TEnumDataStorage<::test_cpp2::cpp_reflection::enum2>;
922 
923 template <> struct TEnumTraits<::test_cpp2::cpp_reflection::enum2> {
924   using type = ::test_cpp2::cpp_reflection::enum2;
925 
926   static constexpr std::size_t const size = 3;
927   static folly::Range<type const*> const values;
928   static folly::Range<folly::StringPiece const*> const names;
929 
930   static char const* findName(type value);
931   static bool findValue(char const* name, type* out);
932 
933   static constexpr type min() { return type::field0_2; }
934   static constexpr type max() { return type::field2_2; }
935 };
936 
937 
938 template <> struct TEnumDataStorage<::test_cpp2::cpp_reflection::enum3>;
939 
940 template <> struct TEnumTraits<::test_cpp2::cpp_reflection::enum3> {
941   using type = ::test_cpp2::cpp_reflection::enum3;
942 
943   static constexpr std::size_t const size = 2;
944   static folly::Range<type const*> const values;
945   static folly::Range<folly::StringPiece const*> const names;
946 
947   static char const* findName(type value);
948   static bool findValue(char const* name, type* out);
949 
950   static constexpr type min() { return type::field0_3; }
951   static constexpr type max() { return type::field1_3; }
952 };
953 
954 
955 template <> struct TEnumDataStorage<::test_cpp2::cpp_reflection::enum_with_special_names>;
956 
957 template <> struct TEnumTraits<::test_cpp2::cpp_reflection::enum_with_special_names> {
958   using type = ::test_cpp2::cpp_reflection::enum_with_special_names;
959 
960   static constexpr std::size_t const size = 28;
961   static folly::Range<type const*> const values;
962   static folly::Range<folly::StringPiece const*> const names;
963 
964   static char const* findName(type value);
965   static bool findValue(char const* name, type* out);
966 
967   static constexpr type min() { return type::get; }
968   static constexpr type max() { return type::fields; }
969 };
970 
971 
972 }} // apache::thrift
973 
974 namespace test_cpp2 { namespace cpp_reflection {
975 
976 using _enum1_EnumMapFactory = apache::thrift::detail::TEnumMapFactory<enum1>;
977 [[deprecated("use apache::thrift::util::enumNameSafe, apache::thrift::util::enumName, or apache::thrift::TEnumTraits")]]
978 extern const _enum1_EnumMapFactory::ValuesToNamesMapType _enum1_VALUES_TO_NAMES;
979 [[deprecated("use apache::thrift::TEnumTraits")]]
980 extern const _enum1_EnumMapFactory::NamesToValuesMapType _enum1_NAMES_TO_VALUES;
981 
982 using _enum2_EnumMapFactory = apache::thrift::detail::TEnumMapFactory<enum2>;
983 [[deprecated("use apache::thrift::util::enumNameSafe, apache::thrift::util::enumName, or apache::thrift::TEnumTraits")]]
984 extern const _enum2_EnumMapFactory::ValuesToNamesMapType _enum2_VALUES_TO_NAMES;
985 [[deprecated("use apache::thrift::TEnumTraits")]]
986 extern const _enum2_EnumMapFactory::NamesToValuesMapType _enum2_NAMES_TO_VALUES;
987 
988 using _enum3_EnumMapFactory = apache::thrift::detail::TEnumMapFactory<enum3>;
989 [[deprecated("use apache::thrift::util::enumNameSafe, apache::thrift::util::enumName, or apache::thrift::TEnumTraits")]]
990 extern const _enum3_EnumMapFactory::ValuesToNamesMapType _enum3_VALUES_TO_NAMES;
991 [[deprecated("use apache::thrift::TEnumTraits")]]
992 extern const _enum3_EnumMapFactory::NamesToValuesMapType _enum3_NAMES_TO_VALUES;
993 
994 using _enum_with_special_names_EnumMapFactory = apache::thrift::detail::TEnumMapFactory<enum_with_special_names>;
995 [[deprecated("use apache::thrift::util::enumNameSafe, apache::thrift::util::enumName, or apache::thrift::TEnumTraits")]]
996 extern const _enum_with_special_names_EnumMapFactory::ValuesToNamesMapType _enum_with_special_names_VALUES_TO_NAMES;
997 [[deprecated("use apache::thrift::TEnumTraits")]]
998 extern const _enum_with_special_names_EnumMapFactory::NamesToValuesMapType _enum_with_special_names_NAMES_TO_VALUES;
999 
1000 }} // test_cpp2::cpp_reflection
1001 
1002 // END declare_enums
1003 // BEGIN forward_declare
1004 namespace test_cpp2 { namespace cpp_reflection {
1005 class union1;
1006 class union2;
1007 class union3;
1008 class structA;
1009 class unionA;
1010 class structB;
1011 class structC;
1012 class struct1;
1013 class struct2;
1014 class struct3;
1015 class struct4;
1016 class struct5;
1017 class struct_binary;
1018 class dep_A_struct;
1019 class dep_B_struct;
1020 class annotated;
1021 class union_with_special_names;
1022 class struct_with_special_names;
1023 class struct_with_indirections;
1024 }} // test_cpp2::cpp_reflection
1025 // END forward_declare
1026 // BEGIN typedefs
1027 namespace test_cpp2 { namespace cpp_reflection {
1028 typedef test_cpp_reflection::custom_structA my_structA;
1029 typedef CppFakeI32 FakeI32;
1030 typedef CppHasANumber HasANumber;
1031 typedef CppHasAResult HasAResult;
1032 typedef CppHasAPhrase HasAPhrase;
1033 
1034 }} // test_cpp2::cpp_reflection
1035 // END typedefs
1036 // BEGIN hash_and_equal_to
1037 // END hash_and_equal_to
1038 namespace test_cpp2 { namespace cpp_reflection {
1039 using ::apache::thrift::detail::operator!=;
1040 using ::apache::thrift::detail::operator>;
1041 using ::apache::thrift::detail::operator<=;
1042 using ::apache::thrift::detail::operator>=;
1043 }} // test_cpp2::cpp_reflection
1044 namespace test_cpp2 { namespace cpp_reflection {
1045 class union1 final  {
1046  private:
1047   friend struct ::apache::thrift::detail::st::struct_private_access;
1048 
1049   //  used by a static_assert in the corresponding source
1050   static constexpr bool __fbthrift_cpp2_gen_json = false;
1051   static constexpr bool __fbthrift_cpp2_gen_nimble = false;
1052   static constexpr bool __fbthrift_cpp2_gen_has_thrift_uri = false;
1053 
1054   void __fbthrift_clear();
1055 
1056  public:
1057   using __fbthrift_cpp2_type = union1;
1058   static constexpr bool __fbthrift_cpp2_is_union =
1059     true;
1060 
1061 
1062  public:
1063   enum Type : int {
1064     __EMPTY__ = 0,
1065     ui = 1,
1066     ud = 3,
1067     us = 5,
1068     ue = 7,
1069   } ;
1070 
1071   union1()
1072       : type_(Type::__EMPTY__) {}
1073 
1074   union1(union1&& rhs) noexcept
1075       : type_(Type::__EMPTY__) {
1076     if (this == &rhs) { return; }
1077     if (rhs.type_ == Type::__EMPTY__) { return; }
1078     switch (rhs.type_) {
1079       case Type::ui:
1080       {
1081         set_ui(std::move(rhs.value_.ui));
1082         break;
1083       }
1084       case Type::ud:
1085       {
1086         set_ud(std::move(rhs.value_.ud));
1087         break;
1088       }
1089       case Type::us:
1090       {
1091         set_us(std::move(rhs.value_.us));
1092         break;
1093       }
1094       case Type::ue:
1095       {
1096         set_ue(std::move(rhs.value_.ue));
1097         break;
1098       }
1099       default:
1100       {
1101         assert(false);
1102         break;
1103       }
1104     }
1105     apache::thrift::clear(rhs);
1106   }
1107 
1108   union1(const union1& rhs)
1109       : type_(Type::__EMPTY__) {
1110     if (this == &rhs) { return; }
1111     if (rhs.type_ == Type::__EMPTY__) { return; }
1112     switch (rhs.type_) {
1113       case Type::ui:
1114       {
1115         set_ui(rhs.value_.ui);
1116         break;
1117       }
1118       case Type::ud:
1119       {
1120         set_ud(rhs.value_.ud);
1121         break;
1122       }
1123       case Type::us:
1124       {
1125         set_us(rhs.value_.us);
1126         break;
1127       }
1128       case Type::ue:
1129       {
1130         set_ue(rhs.value_.ue);
1131         break;
1132       }
1133       default:
1134       {
1135         assert(false);
1136         break;
1137       }
1138     }
1139   }
1140 
1141   union1& operator=(union1&& rhs) noexcept {
1142     if (this == &rhs) { return *this; }
1143     __fbthrift_clear();
1144     if (rhs.type_ == Type::__EMPTY__) { return *this; }
1145     switch (rhs.type_) {
1146       case Type::ui:
1147       {
1148         set_ui(std::move(rhs.value_.ui));
1149         break;
1150       }
1151       case Type::ud:
1152       {
1153         set_ud(std::move(rhs.value_.ud));
1154         break;
1155       }
1156       case Type::us:
1157       {
1158         set_us(std::move(rhs.value_.us));
1159         break;
1160       }
1161       case Type::ue:
1162       {
1163         set_ue(std::move(rhs.value_.ue));
1164         break;
1165       }
1166       default:
1167       {
1168         assert(false);
1169         break;
1170       }
1171     }
1172     apache::thrift::clear(rhs);
1173     return *this;
1174   }
1175 
1176   union1& operator=(const union1& rhs) {
1177     if (this == &rhs) { return *this; }
1178     __fbthrift_clear();
1179     if (rhs.type_ == Type::__EMPTY__) { return *this; }
1180     switch (rhs.type_) {
1181       case Type::ui:
1182       {
1183         set_ui(rhs.value_.ui);
1184         break;
1185       }
1186       case Type::ud:
1187       {
1188         set_ud(rhs.value_.ud);
1189         break;
1190       }
1191       case Type::us:
1192       {
1193         set_us(rhs.value_.us);
1194         break;
1195       }
1196       case Type::ue:
1197       {
1198         set_ue(rhs.value_.ue);
1199         break;
1200       }
1201       default:
1202       {
1203         assert(false);
1204         break;
1205       }
1206     }
1207     return *this;
1208   }
1209 
1210   ~union1() {
1211     apache::thrift::clear(*this);
1212   }
1213   union storage_type {
1214     ::std::int32_t ui;
1215     double ud;
1216     ::std::string us;
1217     ::test_cpp2::cpp_reflection::enum1 ue;
1218 
1219     storage_type() {}
1220     ~storage_type() {}
1221   } ;
1222 
1223   bool operator==(const union1&) const;
1224   bool operator<(const union1&) const;
1225 
1226   ::std::int32_t& set_ui(::std::int32_t t = ::std::int32_t()) {
1227     __fbthrift_clear();
1228     type_ = Type::ui;
1229     ::new (std::addressof(value_.ui)) ::std::int32_t(t);
1230     return value_.ui;
1231   }
1232 
1233   double& set_ud(double t = double()) {
1234     __fbthrift_clear();
1235     type_ = Type::ud;
1236     ::new (std::addressof(value_.ud)) double(t);
1237     return value_.ud;
1238   }
1239 
1240   ::std::string& set_us(::std::string const &t) {
1241     __fbthrift_clear();
1242     type_ = Type::us;
1243     ::new (std::addressof(value_.us)) ::std::string(t);
1244     return value_.us;
1245   }
1246 
1247   ::std::string& set_us(::std::string&& t) {
1248     __fbthrift_clear();
1249     type_ = Type::us;
1250     ::new (std::addressof(value_.us)) ::std::string(std::move(t));
1251     return value_.us;
1252   }
1253 
1254   template<typename... T, typename = ::apache::thrift::safe_overload_t<::std::string, T...>> ::std::string& set_us(T&&... t) {
1255     __fbthrift_clear();
1256     type_ = Type::us;
1257     ::new (std::addressof(value_.us)) ::std::string(std::forward<T>(t)...);
1258     return value_.us;
1259   }
1260 
1261   ::test_cpp2::cpp_reflection::enum1& set_ue(::test_cpp2::cpp_reflection::enum1 t = ::test_cpp2::cpp_reflection::enum1()) {
1262     __fbthrift_clear();
1263     type_ = Type::ue;
1264     ::new (std::addressof(value_.ue)) ::test_cpp2::cpp_reflection::enum1(t);
1265     return value_.ue;
1266   }
1267 
1268   ::std::int32_t const& get_ui() const {
1269     if (type_ != Type::ui) {
1270       ::apache::thrift::detail::throw_on_bad_field_access();
1271     }
1272     return value_.ui;
1273   }
1274 
1275   double const& get_ud() const {
1276     if (type_ != Type::ud) {
1277       ::apache::thrift::detail::throw_on_bad_field_access();
1278     }
1279     return value_.ud;
1280   }
1281 
1282   ::std::string const& get_us() const {
1283     if (type_ != Type::us) {
1284       ::apache::thrift::detail::throw_on_bad_field_access();
1285     }
1286     return value_.us;
1287   }
1288 
1289   ::test_cpp2::cpp_reflection::enum1 const& get_ue() const {
1290     if (type_ != Type::ue) {
1291       ::apache::thrift::detail::throw_on_bad_field_access();
1292     }
1293     return value_.ue;
1294   }
1295 
1296   ::std::int32_t& mutable_ui() {
1297     assert(type_ == Type::ui);
1298     return value_.ui;
1299   }
1300 
1301   double& mutable_ud() {
1302     assert(type_ == Type::ud);
1303     return value_.ud;
1304   }
1305 
1306   ::std::string& mutable_us() {
1307     assert(type_ == Type::us);
1308     return value_.us;
1309   }
1310 
1311   ::test_cpp2::cpp_reflection::enum1& mutable_ue() {
1312     assert(type_ == Type::ue);
1313     return value_.ue;
1314   }
1315 
1316   ::std::int32_t move_ui() {
1317     assert(type_ == Type::ui);
1318     return std::move(value_.ui);
1319   }
1320 
1321   double move_ud() {
1322     assert(type_ == Type::ud);
1323     return std::move(value_.ud);
1324   }
1325 
1326   ::std::string move_us() {
1327     assert(type_ == Type::us);
1328     return std::move(value_.us);
1329   }
1330 
1331   ::test_cpp2::cpp_reflection::enum1 move_ue() {
1332     assert(type_ == Type::ue);
1333     return std::move(value_.ue);
1334   }
1335 
1336   template <typename..., typename T = ::std::int32_t>
1337   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> ui_ref() const& {
1338     return {value_.ui, type_, ui, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
1339   }
1340 
1341   template <typename..., typename T = ::std::int32_t>
1342   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> ui_ref() const&& {
1343     return {std::move(value_.ui), type_, ui, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
1344   }
1345 
1346   template <typename..., typename T = ::std::int32_t>
1347   FOLLY_ERASE ::apache::thrift::union_field_ref<T&> ui_ref() & {
1348     return {value_.ui, type_, ui, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
1349   }
1350 
1351   template <typename..., typename T = ::std::int32_t>
1352   FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> ui_ref() && {
1353     return {std::move(value_.ui), type_, ui, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
1354   }
1355   template <typename..., typename T = double>
1356   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> ud_ref() const& {
1357     return {value_.ud, type_, ud, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
1358   }
1359 
1360   template <typename..., typename T = double>
1361   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> ud_ref() const&& {
1362     return {std::move(value_.ud), type_, ud, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
1363   }
1364 
1365   template <typename..., typename T = double>
1366   FOLLY_ERASE ::apache::thrift::union_field_ref<T&> ud_ref() & {
1367     return {value_.ud, type_, ud, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
1368   }
1369 
1370   template <typename..., typename T = double>
1371   FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> ud_ref() && {
1372     return {std::move(value_.ud), type_, ud, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
1373   }
1374   template <typename..., typename T = ::std::string>
1375   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> us_ref() const& {
1376     return {value_.us, type_, us, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
1377   }
1378 
1379   template <typename..., typename T = ::std::string>
1380   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> us_ref() const&& {
1381     return {std::move(value_.us), type_, us, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
1382   }
1383 
1384   template <typename..., typename T = ::std::string>
1385   FOLLY_ERASE ::apache::thrift::union_field_ref<T&> us_ref() & {
1386     return {value_.us, type_, us, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
1387   }
1388 
1389   template <typename..., typename T = ::std::string>
1390   FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> us_ref() && {
1391     return {std::move(value_.us), type_, us, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
1392   }
1393   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum1>
1394   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> ue_ref() const& {
1395     return {value_.ue, type_, ue, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
1396   }
1397 
1398   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum1>
1399   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> ue_ref() const&& {
1400     return {std::move(value_.ue), type_, ue, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
1401   }
1402 
1403   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum1>
1404   FOLLY_ERASE ::apache::thrift::union_field_ref<T&> ue_ref() & {
1405     return {value_.ue, type_, ue, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
1406   }
1407 
1408   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum1>
1409   FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> ue_ref() && {
1410     return {std::move(value_.ue), type_, ue, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
1411   }
1412   Type getType() const { return static_cast<Type>(type_); }
1413 
1414   template <class Protocol_>
1415   uint32_t read(Protocol_* iprot);
1416   template <class Protocol_>
1417   uint32_t serializedSize(Protocol_ const* prot_) const;
1418   template <class Protocol_>
1419   uint32_t serializedSizeZC(Protocol_ const* prot_) const;
1420   template <class Protocol_>
1421   uint32_t write(Protocol_* prot_) const;
1422  protected:
1423   template <class T>
1424   void destruct(T &val) {
1425     (&val)->~T();
1426   }
1427 
1428   storage_type value_;
1429   std::underlying_type_t<Type> type_;
1430 
1431  private:
1432   template <class Protocol_>
1433   void readNoXfer(Protocol_* iprot);
1434 
1435   friend class ::apache::thrift::Cpp2Ops<union1>;
1436   friend void swap(union1& a, union1& b);
1437 };
1438 
1439 template <class Protocol_>
1440 uint32_t union1::read(Protocol_* iprot) {
1441   auto _xferStart = iprot->getCursorPosition();
1442   readNoXfer(iprot);
1443   return iprot->getCursorPosition() - _xferStart;
1444 }
1445 
1446 }} // test_cpp2::cpp_reflection
1447 namespace test_cpp2 { namespace cpp_reflection {
1448 class union2 final  {
1449  private:
1450   friend struct ::apache::thrift::detail::st::struct_private_access;
1451 
1452   //  used by a static_assert in the corresponding source
1453   static constexpr bool __fbthrift_cpp2_gen_json = false;
1454   static constexpr bool __fbthrift_cpp2_gen_nimble = false;
1455   static constexpr bool __fbthrift_cpp2_gen_has_thrift_uri = false;
1456 
1457   void __fbthrift_clear();
1458 
1459  public:
1460   using __fbthrift_cpp2_type = union2;
1461   static constexpr bool __fbthrift_cpp2_is_union =
1462     true;
1463 
1464 
1465  public:
1466   enum Type : int {
1467     __EMPTY__ = 0,
1468     ui_2 = 1,
1469     ud_2 = 2,
1470     us_2 = 3,
1471     ue_2 = 4,
1472   } ;
1473 
1474   union2()
1475       : type_(Type::__EMPTY__) {}
1476 
1477   union2(union2&& rhs) noexcept
1478       : type_(Type::__EMPTY__) {
1479     if (this == &rhs) { return; }
1480     if (rhs.type_ == Type::__EMPTY__) { return; }
1481     switch (rhs.type_) {
1482       case Type::ui_2:
1483       {
1484         set_ui_2(std::move(rhs.value_.ui_2));
1485         break;
1486       }
1487       case Type::ud_2:
1488       {
1489         set_ud_2(std::move(rhs.value_.ud_2));
1490         break;
1491       }
1492       case Type::us_2:
1493       {
1494         set_us_2(std::move(rhs.value_.us_2));
1495         break;
1496       }
1497       case Type::ue_2:
1498       {
1499         set_ue_2(std::move(rhs.value_.ue_2));
1500         break;
1501       }
1502       default:
1503       {
1504         assert(false);
1505         break;
1506       }
1507     }
1508     apache::thrift::clear(rhs);
1509   }
1510 
1511   union2(const union2& rhs)
1512       : type_(Type::__EMPTY__) {
1513     if (this == &rhs) { return; }
1514     if (rhs.type_ == Type::__EMPTY__) { return; }
1515     switch (rhs.type_) {
1516       case Type::ui_2:
1517       {
1518         set_ui_2(rhs.value_.ui_2);
1519         break;
1520       }
1521       case Type::ud_2:
1522       {
1523         set_ud_2(rhs.value_.ud_2);
1524         break;
1525       }
1526       case Type::us_2:
1527       {
1528         set_us_2(rhs.value_.us_2);
1529         break;
1530       }
1531       case Type::ue_2:
1532       {
1533         set_ue_2(rhs.value_.ue_2);
1534         break;
1535       }
1536       default:
1537       {
1538         assert(false);
1539         break;
1540       }
1541     }
1542   }
1543 
1544   union2& operator=(union2&& rhs) noexcept {
1545     if (this == &rhs) { return *this; }
1546     __fbthrift_clear();
1547     if (rhs.type_ == Type::__EMPTY__) { return *this; }
1548     switch (rhs.type_) {
1549       case Type::ui_2:
1550       {
1551         set_ui_2(std::move(rhs.value_.ui_2));
1552         break;
1553       }
1554       case Type::ud_2:
1555       {
1556         set_ud_2(std::move(rhs.value_.ud_2));
1557         break;
1558       }
1559       case Type::us_2:
1560       {
1561         set_us_2(std::move(rhs.value_.us_2));
1562         break;
1563       }
1564       case Type::ue_2:
1565       {
1566         set_ue_2(std::move(rhs.value_.ue_2));
1567         break;
1568       }
1569       default:
1570       {
1571         assert(false);
1572         break;
1573       }
1574     }
1575     apache::thrift::clear(rhs);
1576     return *this;
1577   }
1578 
1579   union2& operator=(const union2& rhs) {
1580     if (this == &rhs) { return *this; }
1581     __fbthrift_clear();
1582     if (rhs.type_ == Type::__EMPTY__) { return *this; }
1583     switch (rhs.type_) {
1584       case Type::ui_2:
1585       {
1586         set_ui_2(rhs.value_.ui_2);
1587         break;
1588       }
1589       case Type::ud_2:
1590       {
1591         set_ud_2(rhs.value_.ud_2);
1592         break;
1593       }
1594       case Type::us_2:
1595       {
1596         set_us_2(rhs.value_.us_2);
1597         break;
1598       }
1599       case Type::ue_2:
1600       {
1601         set_ue_2(rhs.value_.ue_2);
1602         break;
1603       }
1604       default:
1605       {
1606         assert(false);
1607         break;
1608       }
1609     }
1610     return *this;
1611   }
1612 
1613   ~union2() {
1614     apache::thrift::clear(*this);
1615   }
1616   union storage_type {
1617     ::std::int32_t ui_2;
1618     double ud_2;
1619     ::std::string us_2;
1620     ::test_cpp2::cpp_reflection::enum1 ue_2;
1621 
1622     storage_type() {}
1623     ~storage_type() {}
1624   } ;
1625 
1626   bool operator==(const union2&) const;
1627   bool operator<(const union2&) const;
1628 
1629   ::std::int32_t& set_ui_2(::std::int32_t t = ::std::int32_t()) {
1630     __fbthrift_clear();
1631     type_ = Type::ui_2;
1632     ::new (std::addressof(value_.ui_2)) ::std::int32_t(t);
1633     return value_.ui_2;
1634   }
1635 
1636   double& set_ud_2(double t = double()) {
1637     __fbthrift_clear();
1638     type_ = Type::ud_2;
1639     ::new (std::addressof(value_.ud_2)) double(t);
1640     return value_.ud_2;
1641   }
1642 
1643   ::std::string& set_us_2(::std::string const &t) {
1644     __fbthrift_clear();
1645     type_ = Type::us_2;
1646     ::new (std::addressof(value_.us_2)) ::std::string(t);
1647     return value_.us_2;
1648   }
1649 
1650   ::std::string& set_us_2(::std::string&& t) {
1651     __fbthrift_clear();
1652     type_ = Type::us_2;
1653     ::new (std::addressof(value_.us_2)) ::std::string(std::move(t));
1654     return value_.us_2;
1655   }
1656 
1657   template<typename... T, typename = ::apache::thrift::safe_overload_t<::std::string, T...>> ::std::string& set_us_2(T&&... t) {
1658     __fbthrift_clear();
1659     type_ = Type::us_2;
1660     ::new (std::addressof(value_.us_2)) ::std::string(std::forward<T>(t)...);
1661     return value_.us_2;
1662   }
1663 
1664   ::test_cpp2::cpp_reflection::enum1& set_ue_2(::test_cpp2::cpp_reflection::enum1 t = ::test_cpp2::cpp_reflection::enum1()) {
1665     __fbthrift_clear();
1666     type_ = Type::ue_2;
1667     ::new (std::addressof(value_.ue_2)) ::test_cpp2::cpp_reflection::enum1(t);
1668     return value_.ue_2;
1669   }
1670 
1671   ::std::int32_t const& get_ui_2() const {
1672     if (type_ != Type::ui_2) {
1673       ::apache::thrift::detail::throw_on_bad_field_access();
1674     }
1675     return value_.ui_2;
1676   }
1677 
1678   double const& get_ud_2() const {
1679     if (type_ != Type::ud_2) {
1680       ::apache::thrift::detail::throw_on_bad_field_access();
1681     }
1682     return value_.ud_2;
1683   }
1684 
1685   ::std::string const& get_us_2() const {
1686     if (type_ != Type::us_2) {
1687       ::apache::thrift::detail::throw_on_bad_field_access();
1688     }
1689     return value_.us_2;
1690   }
1691 
1692   ::test_cpp2::cpp_reflection::enum1 const& get_ue_2() const {
1693     if (type_ != Type::ue_2) {
1694       ::apache::thrift::detail::throw_on_bad_field_access();
1695     }
1696     return value_.ue_2;
1697   }
1698 
1699   ::std::int32_t& mutable_ui_2() {
1700     assert(type_ == Type::ui_2);
1701     return value_.ui_2;
1702   }
1703 
1704   double& mutable_ud_2() {
1705     assert(type_ == Type::ud_2);
1706     return value_.ud_2;
1707   }
1708 
1709   ::std::string& mutable_us_2() {
1710     assert(type_ == Type::us_2);
1711     return value_.us_2;
1712   }
1713 
1714   ::test_cpp2::cpp_reflection::enum1& mutable_ue_2() {
1715     assert(type_ == Type::ue_2);
1716     return value_.ue_2;
1717   }
1718 
1719   ::std::int32_t move_ui_2() {
1720     assert(type_ == Type::ui_2);
1721     return std::move(value_.ui_2);
1722   }
1723 
1724   double move_ud_2() {
1725     assert(type_ == Type::ud_2);
1726     return std::move(value_.ud_2);
1727   }
1728 
1729   ::std::string move_us_2() {
1730     assert(type_ == Type::us_2);
1731     return std::move(value_.us_2);
1732   }
1733 
1734   ::test_cpp2::cpp_reflection::enum1 move_ue_2() {
1735     assert(type_ == Type::ue_2);
1736     return std::move(value_.ue_2);
1737   }
1738 
1739   template <typename..., typename T = ::std::int32_t>
1740   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> ui_2_ref() const& {
1741     return {value_.ui_2, type_, ui_2, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
1742   }
1743 
1744   template <typename..., typename T = ::std::int32_t>
1745   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> ui_2_ref() const&& {
1746     return {std::move(value_.ui_2), type_, ui_2, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
1747   }
1748 
1749   template <typename..., typename T = ::std::int32_t>
1750   FOLLY_ERASE ::apache::thrift::union_field_ref<T&> ui_2_ref() & {
1751     return {value_.ui_2, type_, ui_2, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
1752   }
1753 
1754   template <typename..., typename T = ::std::int32_t>
1755   FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> ui_2_ref() && {
1756     return {std::move(value_.ui_2), type_, ui_2, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
1757   }
1758   template <typename..., typename T = double>
1759   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> ud_2_ref() const& {
1760     return {value_.ud_2, type_, ud_2, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
1761   }
1762 
1763   template <typename..., typename T = double>
1764   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> ud_2_ref() const&& {
1765     return {std::move(value_.ud_2), type_, ud_2, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
1766   }
1767 
1768   template <typename..., typename T = double>
1769   FOLLY_ERASE ::apache::thrift::union_field_ref<T&> ud_2_ref() & {
1770     return {value_.ud_2, type_, ud_2, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
1771   }
1772 
1773   template <typename..., typename T = double>
1774   FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> ud_2_ref() && {
1775     return {std::move(value_.ud_2), type_, ud_2, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
1776   }
1777   template <typename..., typename T = ::std::string>
1778   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> us_2_ref() const& {
1779     return {value_.us_2, type_, us_2, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
1780   }
1781 
1782   template <typename..., typename T = ::std::string>
1783   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> us_2_ref() const&& {
1784     return {std::move(value_.us_2), type_, us_2, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
1785   }
1786 
1787   template <typename..., typename T = ::std::string>
1788   FOLLY_ERASE ::apache::thrift::union_field_ref<T&> us_2_ref() & {
1789     return {value_.us_2, type_, us_2, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
1790   }
1791 
1792   template <typename..., typename T = ::std::string>
1793   FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> us_2_ref() && {
1794     return {std::move(value_.us_2), type_, us_2, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
1795   }
1796   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum1>
1797   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> ue_2_ref() const& {
1798     return {value_.ue_2, type_, ue_2, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
1799   }
1800 
1801   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum1>
1802   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> ue_2_ref() const&& {
1803     return {std::move(value_.ue_2), type_, ue_2, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
1804   }
1805 
1806   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum1>
1807   FOLLY_ERASE ::apache::thrift::union_field_ref<T&> ue_2_ref() & {
1808     return {value_.ue_2, type_, ue_2, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
1809   }
1810 
1811   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum1>
1812   FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> ue_2_ref() && {
1813     return {std::move(value_.ue_2), type_, ue_2, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
1814   }
1815   Type getType() const { return static_cast<Type>(type_); }
1816 
1817   template <class Protocol_>
1818   uint32_t read(Protocol_* iprot);
1819   template <class Protocol_>
1820   uint32_t serializedSize(Protocol_ const* prot_) const;
1821   template <class Protocol_>
1822   uint32_t serializedSizeZC(Protocol_ const* prot_) const;
1823   template <class Protocol_>
1824   uint32_t write(Protocol_* prot_) const;
1825  protected:
1826   template <class T>
1827   void destruct(T &val) {
1828     (&val)->~T();
1829   }
1830 
1831   storage_type value_;
1832   std::underlying_type_t<Type> type_;
1833 
1834  private:
1835   template <class Protocol_>
1836   void readNoXfer(Protocol_* iprot);
1837 
1838   friend class ::apache::thrift::Cpp2Ops<union2>;
1839   friend void swap(union2& a, union2& b);
1840 };
1841 
1842 template <class Protocol_>
1843 uint32_t union2::read(Protocol_* iprot) {
1844   auto _xferStart = iprot->getCursorPosition();
1845   readNoXfer(iprot);
1846   return iprot->getCursorPosition() - _xferStart;
1847 }
1848 
1849 }} // test_cpp2::cpp_reflection
1850 namespace test_cpp2 { namespace cpp_reflection {
1851 class union3 final  {
1852  private:
1853   friend struct ::apache::thrift::detail::st::struct_private_access;
1854 
1855   //  used by a static_assert in the corresponding source
1856   static constexpr bool __fbthrift_cpp2_gen_json = false;
1857   static constexpr bool __fbthrift_cpp2_gen_nimble = false;
1858   static constexpr bool __fbthrift_cpp2_gen_has_thrift_uri = false;
1859 
1860   void __fbthrift_clear();
1861 
1862  public:
1863   using __fbthrift_cpp2_type = union3;
1864   static constexpr bool __fbthrift_cpp2_is_union =
1865     true;
1866 
1867 
1868  public:
1869   enum Type : int {
1870     __EMPTY__ = 0,
1871     ui_3 = 1,
1872     ud_3 = 2,
1873     us_3 = 3,
1874     ue_3 = 4,
1875   } ;
1876 
1877   union3()
1878       : type_(Type::__EMPTY__) {}
1879 
1880   union3(union3&& rhs) noexcept
1881       : type_(Type::__EMPTY__) {
1882     if (this == &rhs) { return; }
1883     if (rhs.type_ == Type::__EMPTY__) { return; }
1884     switch (rhs.type_) {
1885       case Type::ui_3:
1886       {
1887         set_ui_3(std::move(rhs.value_.ui_3));
1888         break;
1889       }
1890       case Type::ud_3:
1891       {
1892         set_ud_3(std::move(rhs.value_.ud_3));
1893         break;
1894       }
1895       case Type::us_3:
1896       {
1897         set_us_3(std::move(rhs.value_.us_3));
1898         break;
1899       }
1900       case Type::ue_3:
1901       {
1902         set_ue_3(std::move(rhs.value_.ue_3));
1903         break;
1904       }
1905       default:
1906       {
1907         assert(false);
1908         break;
1909       }
1910     }
1911     apache::thrift::clear(rhs);
1912   }
1913 
1914   union3(const union3& rhs)
1915       : type_(Type::__EMPTY__) {
1916     if (this == &rhs) { return; }
1917     if (rhs.type_ == Type::__EMPTY__) { return; }
1918     switch (rhs.type_) {
1919       case Type::ui_3:
1920       {
1921         set_ui_3(rhs.value_.ui_3);
1922         break;
1923       }
1924       case Type::ud_3:
1925       {
1926         set_ud_3(rhs.value_.ud_3);
1927         break;
1928       }
1929       case Type::us_3:
1930       {
1931         set_us_3(rhs.value_.us_3);
1932         break;
1933       }
1934       case Type::ue_3:
1935       {
1936         set_ue_3(rhs.value_.ue_3);
1937         break;
1938       }
1939       default:
1940       {
1941         assert(false);
1942         break;
1943       }
1944     }
1945   }
1946 
1947   union3& operator=(union3&& rhs) noexcept {
1948     if (this == &rhs) { return *this; }
1949     __fbthrift_clear();
1950     if (rhs.type_ == Type::__EMPTY__) { return *this; }
1951     switch (rhs.type_) {
1952       case Type::ui_3:
1953       {
1954         set_ui_3(std::move(rhs.value_.ui_3));
1955         break;
1956       }
1957       case Type::ud_3:
1958       {
1959         set_ud_3(std::move(rhs.value_.ud_3));
1960         break;
1961       }
1962       case Type::us_3:
1963       {
1964         set_us_3(std::move(rhs.value_.us_3));
1965         break;
1966       }
1967       case Type::ue_3:
1968       {
1969         set_ue_3(std::move(rhs.value_.ue_3));
1970         break;
1971       }
1972       default:
1973       {
1974         assert(false);
1975         break;
1976       }
1977     }
1978     apache::thrift::clear(rhs);
1979     return *this;
1980   }
1981 
1982   union3& operator=(const union3& rhs) {
1983     if (this == &rhs) { return *this; }
1984     __fbthrift_clear();
1985     if (rhs.type_ == Type::__EMPTY__) { return *this; }
1986     switch (rhs.type_) {
1987       case Type::ui_3:
1988       {
1989         set_ui_3(rhs.value_.ui_3);
1990         break;
1991       }
1992       case Type::ud_3:
1993       {
1994         set_ud_3(rhs.value_.ud_3);
1995         break;
1996       }
1997       case Type::us_3:
1998       {
1999         set_us_3(rhs.value_.us_3);
2000         break;
2001       }
2002       case Type::ue_3:
2003       {
2004         set_ue_3(rhs.value_.ue_3);
2005         break;
2006       }
2007       default:
2008       {
2009         assert(false);
2010         break;
2011       }
2012     }
2013     return *this;
2014   }
2015 
2016   ~union3() {
2017     apache::thrift::clear(*this);
2018   }
2019   union storage_type {
2020     ::std::int32_t ui_3;
2021     double ud_3;
2022     ::std::string us_3;
2023     ::test_cpp2::cpp_reflection::enum1 ue_3;
2024 
2025     storage_type() {}
2026     ~storage_type() {}
2027   } ;
2028 
2029   bool operator==(const union3&) const;
2030   bool operator<(const union3&) const;
2031 
2032   ::std::int32_t& set_ui_3(::std::int32_t t = ::std::int32_t()) {
2033     __fbthrift_clear();
2034     type_ = Type::ui_3;
2035     ::new (std::addressof(value_.ui_3)) ::std::int32_t(t);
2036     return value_.ui_3;
2037   }
2038 
2039   double& set_ud_3(double t = double()) {
2040     __fbthrift_clear();
2041     type_ = Type::ud_3;
2042     ::new (std::addressof(value_.ud_3)) double(t);
2043     return value_.ud_3;
2044   }
2045 
2046   ::std::string& set_us_3(::std::string const &t) {
2047     __fbthrift_clear();
2048     type_ = Type::us_3;
2049     ::new (std::addressof(value_.us_3)) ::std::string(t);
2050     return value_.us_3;
2051   }
2052 
2053   ::std::string& set_us_3(::std::string&& t) {
2054     __fbthrift_clear();
2055     type_ = Type::us_3;
2056     ::new (std::addressof(value_.us_3)) ::std::string(std::move(t));
2057     return value_.us_3;
2058   }
2059 
2060   template<typename... T, typename = ::apache::thrift::safe_overload_t<::std::string, T...>> ::std::string& set_us_3(T&&... t) {
2061     __fbthrift_clear();
2062     type_ = Type::us_3;
2063     ::new (std::addressof(value_.us_3)) ::std::string(std::forward<T>(t)...);
2064     return value_.us_3;
2065   }
2066 
2067   ::test_cpp2::cpp_reflection::enum1& set_ue_3(::test_cpp2::cpp_reflection::enum1 t = ::test_cpp2::cpp_reflection::enum1()) {
2068     __fbthrift_clear();
2069     type_ = Type::ue_3;
2070     ::new (std::addressof(value_.ue_3)) ::test_cpp2::cpp_reflection::enum1(t);
2071     return value_.ue_3;
2072   }
2073 
2074   ::std::int32_t const& get_ui_3() const {
2075     if (type_ != Type::ui_3) {
2076       ::apache::thrift::detail::throw_on_bad_field_access();
2077     }
2078     return value_.ui_3;
2079   }
2080 
2081   double const& get_ud_3() const {
2082     if (type_ != Type::ud_3) {
2083       ::apache::thrift::detail::throw_on_bad_field_access();
2084     }
2085     return value_.ud_3;
2086   }
2087 
2088   ::std::string const& get_us_3() const {
2089     if (type_ != Type::us_3) {
2090       ::apache::thrift::detail::throw_on_bad_field_access();
2091     }
2092     return value_.us_3;
2093   }
2094 
2095   ::test_cpp2::cpp_reflection::enum1 const& get_ue_3() const {
2096     if (type_ != Type::ue_3) {
2097       ::apache::thrift::detail::throw_on_bad_field_access();
2098     }
2099     return value_.ue_3;
2100   }
2101 
2102   ::std::int32_t& mutable_ui_3() {
2103     assert(type_ == Type::ui_3);
2104     return value_.ui_3;
2105   }
2106 
2107   double& mutable_ud_3() {
2108     assert(type_ == Type::ud_3);
2109     return value_.ud_3;
2110   }
2111 
2112   ::std::string& mutable_us_3() {
2113     assert(type_ == Type::us_3);
2114     return value_.us_3;
2115   }
2116 
2117   ::test_cpp2::cpp_reflection::enum1& mutable_ue_3() {
2118     assert(type_ == Type::ue_3);
2119     return value_.ue_3;
2120   }
2121 
2122   ::std::int32_t move_ui_3() {
2123     assert(type_ == Type::ui_3);
2124     return std::move(value_.ui_3);
2125   }
2126 
2127   double move_ud_3() {
2128     assert(type_ == Type::ud_3);
2129     return std::move(value_.ud_3);
2130   }
2131 
2132   ::std::string move_us_3() {
2133     assert(type_ == Type::us_3);
2134     return std::move(value_.us_3);
2135   }
2136 
2137   ::test_cpp2::cpp_reflection::enum1 move_ue_3() {
2138     assert(type_ == Type::ue_3);
2139     return std::move(value_.ue_3);
2140   }
2141 
2142   template <typename..., typename T = ::std::int32_t>
2143   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> ui_3_ref() const& {
2144     return {value_.ui_3, type_, ui_3, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
2145   }
2146 
2147   template <typename..., typename T = ::std::int32_t>
2148   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> ui_3_ref() const&& {
2149     return {std::move(value_.ui_3), type_, ui_3, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
2150   }
2151 
2152   template <typename..., typename T = ::std::int32_t>
2153   FOLLY_ERASE ::apache::thrift::union_field_ref<T&> ui_3_ref() & {
2154     return {value_.ui_3, type_, ui_3, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
2155   }
2156 
2157   template <typename..., typename T = ::std::int32_t>
2158   FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> ui_3_ref() && {
2159     return {std::move(value_.ui_3), type_, ui_3, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
2160   }
2161   template <typename..., typename T = double>
2162   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> ud_3_ref() const& {
2163     return {value_.ud_3, type_, ud_3, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
2164   }
2165 
2166   template <typename..., typename T = double>
2167   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> ud_3_ref() const&& {
2168     return {std::move(value_.ud_3), type_, ud_3, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
2169   }
2170 
2171   template <typename..., typename T = double>
2172   FOLLY_ERASE ::apache::thrift::union_field_ref<T&> ud_3_ref() & {
2173     return {value_.ud_3, type_, ud_3, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
2174   }
2175 
2176   template <typename..., typename T = double>
2177   FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> ud_3_ref() && {
2178     return {std::move(value_.ud_3), type_, ud_3, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
2179   }
2180   template <typename..., typename T = ::std::string>
2181   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> us_3_ref() const& {
2182     return {value_.us_3, type_, us_3, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
2183   }
2184 
2185   template <typename..., typename T = ::std::string>
2186   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> us_3_ref() const&& {
2187     return {std::move(value_.us_3), type_, us_3, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
2188   }
2189 
2190   template <typename..., typename T = ::std::string>
2191   FOLLY_ERASE ::apache::thrift::union_field_ref<T&> us_3_ref() & {
2192     return {value_.us_3, type_, us_3, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
2193   }
2194 
2195   template <typename..., typename T = ::std::string>
2196   FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> us_3_ref() && {
2197     return {std::move(value_.us_3), type_, us_3, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
2198   }
2199   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum1>
2200   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> ue_3_ref() const& {
2201     return {value_.ue_3, type_, ue_3, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
2202   }
2203 
2204   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum1>
2205   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> ue_3_ref() const&& {
2206     return {std::move(value_.ue_3), type_, ue_3, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
2207   }
2208 
2209   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum1>
2210   FOLLY_ERASE ::apache::thrift::union_field_ref<T&> ue_3_ref() & {
2211     return {value_.ue_3, type_, ue_3, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
2212   }
2213 
2214   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum1>
2215   FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> ue_3_ref() && {
2216     return {std::move(value_.ue_3), type_, ue_3, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
2217   }
2218   Type getType() const { return static_cast<Type>(type_); }
2219 
2220   template <class Protocol_>
2221   uint32_t read(Protocol_* iprot);
2222   template <class Protocol_>
2223   uint32_t serializedSize(Protocol_ const* prot_) const;
2224   template <class Protocol_>
2225   uint32_t serializedSizeZC(Protocol_ const* prot_) const;
2226   template <class Protocol_>
2227   uint32_t write(Protocol_* prot_) const;
2228  protected:
2229   template <class T>
2230   void destruct(T &val) {
2231     (&val)->~T();
2232   }
2233 
2234   storage_type value_;
2235   std::underlying_type_t<Type> type_;
2236 
2237  private:
2238   template <class Protocol_>
2239   void readNoXfer(Protocol_* iprot);
2240 
2241   friend class ::apache::thrift::Cpp2Ops<union3>;
2242   friend void swap(union3& a, union3& b);
2243 };
2244 
2245 template <class Protocol_>
2246 uint32_t union3::read(Protocol_* iprot) {
2247   auto _xferStart = iprot->getCursorPosition();
2248   readNoXfer(iprot);
2249   return iprot->getCursorPosition() - _xferStart;
2250 }
2251 
2252 }} // test_cpp2::cpp_reflection
2253 namespace test_cpp2 { namespace cpp_reflection {
2254 class structA final  {
2255  private:
2256   friend struct ::apache::thrift::detail::st::struct_private_access;
2257 
2258   //  used by a static_assert in the corresponding source
2259   static constexpr bool __fbthrift_cpp2_gen_json = false;
2260   static constexpr bool __fbthrift_cpp2_gen_nimble = false;
2261   static constexpr bool __fbthrift_cpp2_gen_has_thrift_uri = false;
2262 
2263   void __fbthrift_clear();
2264 
2265  public:
2266   using __fbthrift_cpp2_type = structA;
2267   static constexpr bool __fbthrift_cpp2_is_union =
2268     false;
2269 
2270 
2271  public:
2272 
2273   structA() :
2274       __fbthrift_field_a() {
2275   }
2276   // FragileConstructor for use in initialization lists only.
2277   [[deprecated("This constructor is deprecated")]]
2278   structA(apache::thrift::FragileConstructor, ::std::int32_t a__arg, ::std::string b__arg);
2279 
2280   structA(structA&&) noexcept;
2281 
2282   structA(const structA& src);
2283 
2284 
2285   structA& operator=(structA&&) noexcept;
2286   structA& operator=(const structA& src);
2287  private:
2288   ::std::int32_t __fbthrift_field_a;
2289  private:
2290   ::std::string __fbthrift_field_b;
2291  private:
2292   apache::thrift::detail::isset_bitset<2, false> __isset;
2293 
2294  public:
2295 
2296   bool operator==(const structA&) const;
2297   bool operator<(const structA&) const;
2298 
2299   template <typename..., typename T = ::std::int32_t>
2300   FOLLY_ERASE ::apache::thrift::field_ref<const T&> a_ref() const& {
2301     return {this->__fbthrift_field_a, __isset.at(0), __isset.bit(0)};
2302   }
2303 
2304   template <typename..., typename T = ::std::int32_t>
2305   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> a_ref() const&& {
2306     return {static_cast<const T&&>(this->__fbthrift_field_a), __isset.at(0), __isset.bit(0)};
2307   }
2308 
2309   template <typename..., typename T = ::std::int32_t>
2310   FOLLY_ERASE ::apache::thrift::field_ref<T&> a_ref() & {
2311     return {this->__fbthrift_field_a, __isset.at(0), __isset.bit(0)};
2312   }
2313 
2314   template <typename..., typename T = ::std::int32_t>
2315   FOLLY_ERASE ::apache::thrift::field_ref<T&&> a_ref() && {
2316     return {static_cast<T&&>(this->__fbthrift_field_a), __isset.at(0), __isset.bit(0)};
2317   }
2318 
2319   template <typename..., typename T = ::std::int32_t>
2320   FOLLY_ERASE ::apache::thrift::field_ref<const T&> a() const& {
2321     return {this->__fbthrift_field_a, __isset.at(0), __isset.bit(0)};
2322   }
2323 
2324   template <typename..., typename T = ::std::int32_t>
2325   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> a() const&& {
2326     return {static_cast<const T&&>(this->__fbthrift_field_a), __isset.at(0), __isset.bit(0)};
2327   }
2328 
2329   template <typename..., typename T = ::std::int32_t>
2330   FOLLY_ERASE ::apache::thrift::field_ref<T&> a() & {
2331     return {this->__fbthrift_field_a, __isset.at(0), __isset.bit(0)};
2332   }
2333 
2334   template <typename..., typename T = ::std::int32_t>
2335   FOLLY_ERASE ::apache::thrift::field_ref<T&&> a() && {
2336     return {static_cast<T&&>(this->__fbthrift_field_a), __isset.at(0), __isset.bit(0)};
2337   }
2338 
2339   template <typename..., typename T = ::std::string>
2340   FOLLY_ERASE ::apache::thrift::field_ref<const T&> b_ref() const& {
2341     return {this->__fbthrift_field_b, __isset.at(1), __isset.bit(1)};
2342   }
2343 
2344   template <typename..., typename T = ::std::string>
2345   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> b_ref() const&& {
2346     return {static_cast<const T&&>(this->__fbthrift_field_b), __isset.at(1), __isset.bit(1)};
2347   }
2348 
2349   template <typename..., typename T = ::std::string>
2350   FOLLY_ERASE ::apache::thrift::field_ref<T&> b_ref() & {
2351     return {this->__fbthrift_field_b, __isset.at(1), __isset.bit(1)};
2352   }
2353 
2354   template <typename..., typename T = ::std::string>
2355   FOLLY_ERASE ::apache::thrift::field_ref<T&&> b_ref() && {
2356     return {static_cast<T&&>(this->__fbthrift_field_b), __isset.at(1), __isset.bit(1)};
2357   }
2358 
2359   template <typename..., typename T = ::std::string>
2360   FOLLY_ERASE ::apache::thrift::field_ref<const T&> b() const& {
2361     return {this->__fbthrift_field_b, __isset.at(1), __isset.bit(1)};
2362   }
2363 
2364   template <typename..., typename T = ::std::string>
2365   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> b() const&& {
2366     return {static_cast<const T&&>(this->__fbthrift_field_b), __isset.at(1), __isset.bit(1)};
2367   }
2368 
2369   template <typename..., typename T = ::std::string>
2370   FOLLY_ERASE ::apache::thrift::field_ref<T&> b() & {
2371     return {this->__fbthrift_field_b, __isset.at(1), __isset.bit(1)};
2372   }
2373 
2374   template <typename..., typename T = ::std::string>
2375   FOLLY_ERASE ::apache::thrift::field_ref<T&&> b() && {
2376     return {static_cast<T&&>(this->__fbthrift_field_b), __isset.at(1), __isset.bit(1)};
2377   }
2378 
2379   ::std::int32_t get_a() const {
2380     return __fbthrift_field_a;
2381   }
2382 
2383   [[deprecated("Use `FOO.a_ref() = BAR;` instead of `FOO.set_a(BAR);`")]]
2384   ::std::int32_t& set_a(::std::int32_t a_) {
2385     a_ref() = a_;
2386     return __fbthrift_field_a;
2387   }
2388 
2389   const ::std::string& get_b() const& {
2390     return __fbthrift_field_b;
2391   }
2392 
2393   ::std::string get_b() && {
2394     return std::move(__fbthrift_field_b);
2395   }
2396 
2397   template <typename T_structA_b_struct_setter = ::std::string>
2398   [[deprecated("Use `FOO.b_ref() = BAR;` instead of `FOO.set_b(BAR);`")]]
2399   ::std::string& set_b(T_structA_b_struct_setter&& b_) {
2400     b_ref() = std::forward<T_structA_b_struct_setter>(b_);
2401     return __fbthrift_field_b;
2402   }
2403 
2404   template <class Protocol_>
2405   uint32_t read(Protocol_* iprot);
2406   template <class Protocol_>
2407   uint32_t serializedSize(Protocol_ const* prot_) const;
2408   template <class Protocol_>
2409   uint32_t serializedSizeZC(Protocol_ const* prot_) const;
2410   template <class Protocol_>
2411   uint32_t write(Protocol_* prot_) const;
2412 
2413  private:
2414   template <class Protocol_>
2415   void readNoXfer(Protocol_* iprot);
2416 
2417   friend class ::apache::thrift::Cpp2Ops<structA>;
2418   friend void swap(structA& a, structA& b);
2419 };
2420 
2421 template <class Protocol_>
2422 uint32_t structA::read(Protocol_* iprot) {
2423   auto _xferStart = iprot->getCursorPosition();
2424   readNoXfer(iprot);
2425   return iprot->getCursorPosition() - _xferStart;
2426 }
2427 
2428 }} // test_cpp2::cpp_reflection
2429 namespace test_cpp2 { namespace cpp_reflection {
2430 class unionA final  {
2431  private:
2432   friend struct ::apache::thrift::detail::st::struct_private_access;
2433 
2434   //  used by a static_assert in the corresponding source
2435   static constexpr bool __fbthrift_cpp2_gen_json = false;
2436   static constexpr bool __fbthrift_cpp2_gen_nimble = false;
2437   static constexpr bool __fbthrift_cpp2_gen_has_thrift_uri = false;
2438 
2439   void __fbthrift_clear();
2440 
2441  public:
2442   using __fbthrift_cpp2_type = unionA;
2443   static constexpr bool __fbthrift_cpp2_is_union =
2444     true;
2445 
2446 
2447  public:
2448   enum Type : int {
2449     __EMPTY__ = 0,
2450     i = 1,
2451     d = 2,
2452     s = 3,
2453     e = 4,
2454     a = 5,
2455   } ;
2456 
2457   unionA()
2458       : type_(Type::__EMPTY__) {}
2459 
2460   unionA(unionA&& rhs) noexcept
2461       : type_(Type::__EMPTY__) {
2462     if (this == &rhs) { return; }
2463     if (rhs.type_ == Type::__EMPTY__) { return; }
2464     switch (rhs.type_) {
2465       case Type::i:
2466       {
2467         set_i(std::move(rhs.value_.i));
2468         break;
2469       }
2470       case Type::d:
2471       {
2472         set_d(std::move(rhs.value_.d));
2473         break;
2474       }
2475       case Type::s:
2476       {
2477         set_s(std::move(rhs.value_.s));
2478         break;
2479       }
2480       case Type::e:
2481       {
2482         set_e(std::move(rhs.value_.e));
2483         break;
2484       }
2485       case Type::a:
2486       {
2487         set_a(std::move(rhs.value_.a));
2488         break;
2489       }
2490       default:
2491       {
2492         assert(false);
2493         break;
2494       }
2495     }
2496     apache::thrift::clear(rhs);
2497   }
2498 
2499   unionA(const unionA& rhs)
2500       : type_(Type::__EMPTY__) {
2501     if (this == &rhs) { return; }
2502     if (rhs.type_ == Type::__EMPTY__) { return; }
2503     switch (rhs.type_) {
2504       case Type::i:
2505       {
2506         set_i(rhs.value_.i);
2507         break;
2508       }
2509       case Type::d:
2510       {
2511         set_d(rhs.value_.d);
2512         break;
2513       }
2514       case Type::s:
2515       {
2516         set_s(rhs.value_.s);
2517         break;
2518       }
2519       case Type::e:
2520       {
2521         set_e(rhs.value_.e);
2522         break;
2523       }
2524       case Type::a:
2525       {
2526         set_a(rhs.value_.a);
2527         break;
2528       }
2529       default:
2530       {
2531         assert(false);
2532         break;
2533       }
2534     }
2535   }
2536 
2537   unionA& operator=(unionA&& rhs) noexcept {
2538     if (this == &rhs) { return *this; }
2539     __fbthrift_clear();
2540     if (rhs.type_ == Type::__EMPTY__) { return *this; }
2541     switch (rhs.type_) {
2542       case Type::i:
2543       {
2544         set_i(std::move(rhs.value_.i));
2545         break;
2546       }
2547       case Type::d:
2548       {
2549         set_d(std::move(rhs.value_.d));
2550         break;
2551       }
2552       case Type::s:
2553       {
2554         set_s(std::move(rhs.value_.s));
2555         break;
2556       }
2557       case Type::e:
2558       {
2559         set_e(std::move(rhs.value_.e));
2560         break;
2561       }
2562       case Type::a:
2563       {
2564         set_a(std::move(rhs.value_.a));
2565         break;
2566       }
2567       default:
2568       {
2569         assert(false);
2570         break;
2571       }
2572     }
2573     apache::thrift::clear(rhs);
2574     return *this;
2575   }
2576 
2577   unionA& operator=(const unionA& rhs) {
2578     if (this == &rhs) { return *this; }
2579     __fbthrift_clear();
2580     if (rhs.type_ == Type::__EMPTY__) { return *this; }
2581     switch (rhs.type_) {
2582       case Type::i:
2583       {
2584         set_i(rhs.value_.i);
2585         break;
2586       }
2587       case Type::d:
2588       {
2589         set_d(rhs.value_.d);
2590         break;
2591       }
2592       case Type::s:
2593       {
2594         set_s(rhs.value_.s);
2595         break;
2596       }
2597       case Type::e:
2598       {
2599         set_e(rhs.value_.e);
2600         break;
2601       }
2602       case Type::a:
2603       {
2604         set_a(rhs.value_.a);
2605         break;
2606       }
2607       default:
2608       {
2609         assert(false);
2610         break;
2611       }
2612     }
2613     return *this;
2614   }
2615 
2616   ~unionA() {
2617     apache::thrift::clear(*this);
2618   }
2619   union storage_type {
2620     ::std::int32_t i;
2621     double d;
2622     ::std::string s;
2623     ::test_cpp2::cpp_reflection::enum1 e;
2624     ::test_cpp2::cpp_reflection::structA a;
2625 
2626     storage_type() {}
2627     ~storage_type() {}
2628   } ;
2629 
2630   bool operator==(const unionA&) const;
2631   bool operator<(const unionA&) const;
2632 
2633   ::std::int32_t& set_i(::std::int32_t t = ::std::int32_t()) {
2634     __fbthrift_clear();
2635     type_ = Type::i;
2636     ::new (std::addressof(value_.i)) ::std::int32_t(t);
2637     return value_.i;
2638   }
2639 
2640   double& set_d(double t = double()) {
2641     __fbthrift_clear();
2642     type_ = Type::d;
2643     ::new (std::addressof(value_.d)) double(t);
2644     return value_.d;
2645   }
2646 
2647   ::std::string& set_s(::std::string const &t) {
2648     __fbthrift_clear();
2649     type_ = Type::s;
2650     ::new (std::addressof(value_.s)) ::std::string(t);
2651     return value_.s;
2652   }
2653 
2654   ::std::string& set_s(::std::string&& t) {
2655     __fbthrift_clear();
2656     type_ = Type::s;
2657     ::new (std::addressof(value_.s)) ::std::string(std::move(t));
2658     return value_.s;
2659   }
2660 
2661   template<typename... T, typename = ::apache::thrift::safe_overload_t<::std::string, T...>> ::std::string& set_s(T&&... t) {
2662     __fbthrift_clear();
2663     type_ = Type::s;
2664     ::new (std::addressof(value_.s)) ::std::string(std::forward<T>(t)...);
2665     return value_.s;
2666   }
2667 
2668   ::test_cpp2::cpp_reflection::enum1& set_e(::test_cpp2::cpp_reflection::enum1 t = ::test_cpp2::cpp_reflection::enum1()) {
2669     __fbthrift_clear();
2670     type_ = Type::e;
2671     ::new (std::addressof(value_.e)) ::test_cpp2::cpp_reflection::enum1(t);
2672     return value_.e;
2673   }
2674 
2675   ::test_cpp2::cpp_reflection::structA& set_a(::test_cpp2::cpp_reflection::structA const &t) {
2676     __fbthrift_clear();
2677     type_ = Type::a;
2678     ::new (std::addressof(value_.a)) ::test_cpp2::cpp_reflection::structA(t);
2679     return value_.a;
2680   }
2681 
2682   ::test_cpp2::cpp_reflection::structA& set_a(::test_cpp2::cpp_reflection::structA&& t) {
2683     __fbthrift_clear();
2684     type_ = Type::a;
2685     ::new (std::addressof(value_.a)) ::test_cpp2::cpp_reflection::structA(std::move(t));
2686     return value_.a;
2687   }
2688 
2689   template<typename... T, typename = ::apache::thrift::safe_overload_t<::test_cpp2::cpp_reflection::structA, T...>> ::test_cpp2::cpp_reflection::structA& set_a(T&&... t) {
2690     __fbthrift_clear();
2691     type_ = Type::a;
2692     ::new (std::addressof(value_.a)) ::test_cpp2::cpp_reflection::structA(std::forward<T>(t)...);
2693     return value_.a;
2694   }
2695 
2696   ::std::int32_t const& get_i() const {
2697     if (type_ != Type::i) {
2698       ::apache::thrift::detail::throw_on_bad_field_access();
2699     }
2700     return value_.i;
2701   }
2702 
2703   double const& get_d() const {
2704     if (type_ != Type::d) {
2705       ::apache::thrift::detail::throw_on_bad_field_access();
2706     }
2707     return value_.d;
2708   }
2709 
2710   ::std::string const& get_s() const {
2711     if (type_ != Type::s) {
2712       ::apache::thrift::detail::throw_on_bad_field_access();
2713     }
2714     return value_.s;
2715   }
2716 
2717   ::test_cpp2::cpp_reflection::enum1 const& get_e() const {
2718     if (type_ != Type::e) {
2719       ::apache::thrift::detail::throw_on_bad_field_access();
2720     }
2721     return value_.e;
2722   }
2723 
2724   ::test_cpp2::cpp_reflection::structA const& get_a() const {
2725     if (type_ != Type::a) {
2726       ::apache::thrift::detail::throw_on_bad_field_access();
2727     }
2728     return value_.a;
2729   }
2730 
2731   ::std::int32_t& mutable_i() {
2732     assert(type_ == Type::i);
2733     return value_.i;
2734   }
2735 
2736   double& mutable_d() {
2737     assert(type_ == Type::d);
2738     return value_.d;
2739   }
2740 
2741   ::std::string& mutable_s() {
2742     assert(type_ == Type::s);
2743     return value_.s;
2744   }
2745 
2746   ::test_cpp2::cpp_reflection::enum1& mutable_e() {
2747     assert(type_ == Type::e);
2748     return value_.e;
2749   }
2750 
2751   ::test_cpp2::cpp_reflection::structA& mutable_a() {
2752     assert(type_ == Type::a);
2753     return value_.a;
2754   }
2755 
2756   ::std::int32_t move_i() {
2757     assert(type_ == Type::i);
2758     return std::move(value_.i);
2759   }
2760 
2761   double move_d() {
2762     assert(type_ == Type::d);
2763     return std::move(value_.d);
2764   }
2765 
2766   ::std::string move_s() {
2767     assert(type_ == Type::s);
2768     return std::move(value_.s);
2769   }
2770 
2771   ::test_cpp2::cpp_reflection::enum1 move_e() {
2772     assert(type_ == Type::e);
2773     return std::move(value_.e);
2774   }
2775 
2776   ::test_cpp2::cpp_reflection::structA move_a() {
2777     assert(type_ == Type::a);
2778     return std::move(value_.a);
2779   }
2780 
2781   template <typename..., typename T = ::std::int32_t>
2782   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> i_ref() const& {
2783     return {value_.i, type_, i, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
2784   }
2785 
2786   template <typename..., typename T = ::std::int32_t>
2787   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> i_ref() const&& {
2788     return {std::move(value_.i), type_, i, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
2789   }
2790 
2791   template <typename..., typename T = ::std::int32_t>
2792   FOLLY_ERASE ::apache::thrift::union_field_ref<T&> i_ref() & {
2793     return {value_.i, type_, i, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
2794   }
2795 
2796   template <typename..., typename T = ::std::int32_t>
2797   FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> i_ref() && {
2798     return {std::move(value_.i), type_, i, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
2799   }
2800   template <typename..., typename T = double>
2801   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> d_ref() const& {
2802     return {value_.d, type_, d, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
2803   }
2804 
2805   template <typename..., typename T = double>
2806   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> d_ref() const&& {
2807     return {std::move(value_.d), type_, d, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
2808   }
2809 
2810   template <typename..., typename T = double>
2811   FOLLY_ERASE ::apache::thrift::union_field_ref<T&> d_ref() & {
2812     return {value_.d, type_, d, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
2813   }
2814 
2815   template <typename..., typename T = double>
2816   FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> d_ref() && {
2817     return {std::move(value_.d), type_, d, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
2818   }
2819   template <typename..., typename T = ::std::string>
2820   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> s_ref() const& {
2821     return {value_.s, type_, s, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
2822   }
2823 
2824   template <typename..., typename T = ::std::string>
2825   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> s_ref() const&& {
2826     return {std::move(value_.s), type_, s, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
2827   }
2828 
2829   template <typename..., typename T = ::std::string>
2830   FOLLY_ERASE ::apache::thrift::union_field_ref<T&> s_ref() & {
2831     return {value_.s, type_, s, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
2832   }
2833 
2834   template <typename..., typename T = ::std::string>
2835   FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> s_ref() && {
2836     return {std::move(value_.s), type_, s, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
2837   }
2838   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum1>
2839   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> e_ref() const& {
2840     return {value_.e, type_, e, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
2841   }
2842 
2843   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum1>
2844   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> e_ref() const&& {
2845     return {std::move(value_.e), type_, e, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
2846   }
2847 
2848   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum1>
2849   FOLLY_ERASE ::apache::thrift::union_field_ref<T&> e_ref() & {
2850     return {value_.e, type_, e, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
2851   }
2852 
2853   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum1>
2854   FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> e_ref() && {
2855     return {std::move(value_.e), type_, e, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
2856   }
2857   template <typename..., typename T = ::test_cpp2::cpp_reflection::structA>
2858   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> a_ref() const& {
2859     return {value_.a, type_, a, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
2860   }
2861 
2862   template <typename..., typename T = ::test_cpp2::cpp_reflection::structA>
2863   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> a_ref() const&& {
2864     return {std::move(value_.a), type_, a, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
2865   }
2866 
2867   template <typename..., typename T = ::test_cpp2::cpp_reflection::structA>
2868   FOLLY_ERASE ::apache::thrift::union_field_ref<T&> a_ref() & {
2869     return {value_.a, type_, a, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
2870   }
2871 
2872   template <typename..., typename T = ::test_cpp2::cpp_reflection::structA>
2873   FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> a_ref() && {
2874     return {std::move(value_.a), type_, a, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
2875   }
2876   Type getType() const { return static_cast<Type>(type_); }
2877 
2878   template <class Protocol_>
2879   uint32_t read(Protocol_* iprot);
2880   template <class Protocol_>
2881   uint32_t serializedSize(Protocol_ const* prot_) const;
2882   template <class Protocol_>
2883   uint32_t serializedSizeZC(Protocol_ const* prot_) const;
2884   template <class Protocol_>
2885   uint32_t write(Protocol_* prot_) const;
2886  protected:
2887   template <class T>
2888   void destruct(T &val) {
2889     (&val)->~T();
2890   }
2891 
2892   storage_type value_;
2893   std::underlying_type_t<Type> type_;
2894 
2895  private:
2896   template <class Protocol_>
2897   void readNoXfer(Protocol_* iprot);
2898 
2899   friend class ::apache::thrift::Cpp2Ops<unionA>;
2900   friend void swap(unionA& a, unionA& b);
2901 };
2902 
2903 template <class Protocol_>
2904 uint32_t unionA::read(Protocol_* iprot) {
2905   auto _xferStart = iprot->getCursorPosition();
2906   readNoXfer(iprot);
2907   return iprot->getCursorPosition() - _xferStart;
2908 }
2909 
2910 }} // test_cpp2::cpp_reflection
2911 namespace test_cpp2 { namespace cpp_reflection {
2912 class structB final  {
2913  private:
2914   friend struct ::apache::thrift::detail::st::struct_private_access;
2915 
2916   //  used by a static_assert in the corresponding source
2917   static constexpr bool __fbthrift_cpp2_gen_json = false;
2918   static constexpr bool __fbthrift_cpp2_gen_nimble = false;
2919   static constexpr bool __fbthrift_cpp2_gen_has_thrift_uri = false;
2920 
2921   void __fbthrift_clear();
2922 
2923  public:
2924   using __fbthrift_cpp2_type = structB;
2925   static constexpr bool __fbthrift_cpp2_is_union =
2926     false;
2927 
2928 
2929  public:
2930 
2931   structB() :
2932       __fbthrift_field_c(),
2933       __fbthrift_field_d() {
2934   }
2935   // FragileConstructor for use in initialization lists only.
2936   [[deprecated("This constructor is deprecated")]]
2937   structB(apache::thrift::FragileConstructor, double c__arg, bool d__arg);
2938 
2939   structB(structB&&) = default;
2940 
2941   structB(const structB&) = default;
2942 
2943 
2944   structB& operator=(structB&&) = default;
2945 
2946   structB& operator=(const structB&) = default;
2947  private:
2948   double __fbthrift_field_c;
2949  private:
2950   bool __fbthrift_field_d;
2951  private:
2952   apache::thrift::detail::isset_bitset<2, false> __isset;
2953 
2954  public:
2955 
2956   bool operator==(const structB&) const;
2957   bool operator<(const structB&) const;
2958 
2959   template <typename..., typename T = double>
2960   FOLLY_ERASE ::apache::thrift::field_ref<const T&> c_ref() const& {
2961     return {this->__fbthrift_field_c, __isset.at(0), __isset.bit(0)};
2962   }
2963 
2964   template <typename..., typename T = double>
2965   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> c_ref() const&& {
2966     return {static_cast<const T&&>(this->__fbthrift_field_c), __isset.at(0), __isset.bit(0)};
2967   }
2968 
2969   template <typename..., typename T = double>
2970   FOLLY_ERASE ::apache::thrift::field_ref<T&> c_ref() & {
2971     return {this->__fbthrift_field_c, __isset.at(0), __isset.bit(0)};
2972   }
2973 
2974   template <typename..., typename T = double>
2975   FOLLY_ERASE ::apache::thrift::field_ref<T&&> c_ref() && {
2976     return {static_cast<T&&>(this->__fbthrift_field_c), __isset.at(0), __isset.bit(0)};
2977   }
2978 
2979   template <typename..., typename T = double>
2980   FOLLY_ERASE ::apache::thrift::field_ref<const T&> c() const& {
2981     return {this->__fbthrift_field_c, __isset.at(0), __isset.bit(0)};
2982   }
2983 
2984   template <typename..., typename T = double>
2985   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> c() const&& {
2986     return {static_cast<const T&&>(this->__fbthrift_field_c), __isset.at(0), __isset.bit(0)};
2987   }
2988 
2989   template <typename..., typename T = double>
2990   FOLLY_ERASE ::apache::thrift::field_ref<T&> c() & {
2991     return {this->__fbthrift_field_c, __isset.at(0), __isset.bit(0)};
2992   }
2993 
2994   template <typename..., typename T = double>
2995   FOLLY_ERASE ::apache::thrift::field_ref<T&&> c() && {
2996     return {static_cast<T&&>(this->__fbthrift_field_c), __isset.at(0), __isset.bit(0)};
2997   }
2998 
2999   template <typename..., typename T = bool>
3000   FOLLY_ERASE ::apache::thrift::field_ref<const T&> d_ref() const& {
3001     return {this->__fbthrift_field_d, __isset.at(1), __isset.bit(1)};
3002   }
3003 
3004   template <typename..., typename T = bool>
3005   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> d_ref() const&& {
3006     return {static_cast<const T&&>(this->__fbthrift_field_d), __isset.at(1), __isset.bit(1)};
3007   }
3008 
3009   template <typename..., typename T = bool>
3010   FOLLY_ERASE ::apache::thrift::field_ref<T&> d_ref() & {
3011     return {this->__fbthrift_field_d, __isset.at(1), __isset.bit(1)};
3012   }
3013 
3014   template <typename..., typename T = bool>
3015   FOLLY_ERASE ::apache::thrift::field_ref<T&&> d_ref() && {
3016     return {static_cast<T&&>(this->__fbthrift_field_d), __isset.at(1), __isset.bit(1)};
3017   }
3018 
3019   template <typename..., typename T = bool>
3020   FOLLY_ERASE ::apache::thrift::field_ref<const T&> d() const& {
3021     return {this->__fbthrift_field_d, __isset.at(1), __isset.bit(1)};
3022   }
3023 
3024   template <typename..., typename T = bool>
3025   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> d() const&& {
3026     return {static_cast<const T&&>(this->__fbthrift_field_d), __isset.at(1), __isset.bit(1)};
3027   }
3028 
3029   template <typename..., typename T = bool>
3030   FOLLY_ERASE ::apache::thrift::field_ref<T&> d() & {
3031     return {this->__fbthrift_field_d, __isset.at(1), __isset.bit(1)};
3032   }
3033 
3034   template <typename..., typename T = bool>
3035   FOLLY_ERASE ::apache::thrift::field_ref<T&&> d() && {
3036     return {static_cast<T&&>(this->__fbthrift_field_d), __isset.at(1), __isset.bit(1)};
3037   }
3038 
3039   double get_c() const {
3040     return __fbthrift_field_c;
3041   }
3042 
3043   [[deprecated("Use `FOO.c_ref() = BAR;` instead of `FOO.set_c(BAR);`")]]
3044   double& set_c(double c_) {
3045     c_ref() = c_;
3046     return __fbthrift_field_c;
3047   }
3048 
3049   bool get_d() const {
3050     return __fbthrift_field_d;
3051   }
3052 
3053   [[deprecated("Use `FOO.d_ref() = BAR;` instead of `FOO.set_d(BAR);`")]]
3054   bool& set_d(bool d_) {
3055     d_ref() = d_;
3056     return __fbthrift_field_d;
3057   }
3058 
3059   template <class Protocol_>
3060   uint32_t read(Protocol_* iprot);
3061   template <class Protocol_>
3062   uint32_t serializedSize(Protocol_ const* prot_) const;
3063   template <class Protocol_>
3064   uint32_t serializedSizeZC(Protocol_ const* prot_) const;
3065   template <class Protocol_>
3066   uint32_t write(Protocol_* prot_) const;
3067 
3068  private:
3069   template <class Protocol_>
3070   void readNoXfer(Protocol_* iprot);
3071 
3072   friend class ::apache::thrift::Cpp2Ops<structB>;
3073   friend void swap(structB& a, structB& b);
3074 };
3075 
3076 template <class Protocol_>
3077 uint32_t structB::read(Protocol_* iprot) {
3078   auto _xferStart = iprot->getCursorPosition();
3079   readNoXfer(iprot);
3080   return iprot->getCursorPosition() - _xferStart;
3081 }
3082 
3083 }} // test_cpp2::cpp_reflection
3084 namespace test_cpp2 { namespace cpp_reflection {
3085 class structC final  {
3086  private:
3087   friend struct ::apache::thrift::detail::st::struct_private_access;
3088 
3089   //  used by a static_assert in the corresponding source
3090   static constexpr bool __fbthrift_cpp2_gen_json = false;
3091   static constexpr bool __fbthrift_cpp2_gen_nimble = false;
3092   static constexpr bool __fbthrift_cpp2_gen_has_thrift_uri = false;
3093 
3094   void __fbthrift_clear();
3095 
3096  public:
3097   using __fbthrift_cpp2_type = structC;
3098   static constexpr bool __fbthrift_cpp2_is_union =
3099     false;
3100 
3101 
3102  public:
3103 
3104   structC();
3105 
3106   // FragileConstructor for use in initialization lists only.
3107   [[deprecated("This constructor is deprecated")]]
3108   structC(apache::thrift::FragileConstructor, ::std::int32_t a__arg, ::std::string b__arg, double c__arg, bool d__arg, ::test_cpp2::cpp_reflection::enum1 e__arg, ::test_cpp2::cpp_reflection::enum2 f__arg, ::test_cpp2::cpp_reflection::union1 g__arg, ::test_cpp2::cpp_reflection::unionA h__arg, ::test_cpp2::cpp_reflection::unionA i__arg, ::std::vector<::std::int32_t> j__arg, ::std::vector<::std::int32_t> j1__arg, ::std::vector<::test_cpp2::cpp_reflection::enum1> j2__arg, ::std::vector<::test_cpp2::cpp_reflection::structA> j3__arg, ::std::set<::std::int32_t> k__arg, ::std::set<::std::int32_t> k1__arg, ::std::set<::test_cpp2::cpp_reflection::enum2> k2__arg, ::std::set<::test_cpp2::cpp_reflection::structB> k3__arg, ::std::map<::std::int32_t, ::std::int32_t> l__arg, ::std::map<::std::int32_t, ::std::int32_t> l1__arg, ::std::map<::std::int32_t, ::test_cpp2::cpp_reflection::enum1> l2__arg, ::std::map<::std::int32_t, ::test_cpp2::cpp_reflection::structB> l3__arg, ::std::map<::test_cpp2::cpp_reflection::enum1, ::std::int32_t> m1__arg, ::std::map<::test_cpp2::cpp_reflection::enum1, ::test_cpp2::cpp_reflection::enum2> m2__arg, ::std::map<::test_cpp2::cpp_reflection::enum1, ::test_cpp2::cpp_reflection::structB> m3__arg, ::std::map<::std::string, ::std::int32_t> n1__arg, ::std::map<::std::string, ::test_cpp2::cpp_reflection::enum1> n2__arg, ::std::map<::std::string, ::test_cpp2::cpp_reflection::structB> n3__arg, ::std::map<::test_cpp2::cpp_reflection::structA, ::std::int32_t> o1__arg, ::std::map<::test_cpp2::cpp_reflection::structA, ::test_cpp2::cpp_reflection::enum1> o2__arg, ::std::map<::test_cpp2::cpp_reflection::structA, ::test_cpp2::cpp_reflection::structB> o3__arg);
3109 
3110   structC(structC&&) noexcept;
3111 
3112   structC(const structC& src);
3113 
3114 
3115   structC& operator=(structC&&) noexcept;
3116   structC& operator=(const structC& src);
3117 
3118   ~structC();
3119 
3120  private:
3121   ::std::int32_t __fbthrift_field_a;
3122  private:
3123   ::std::string __fbthrift_field_b;
3124  private:
3125   double __fbthrift_field_c;
3126  private:
3127   bool __fbthrift_field_d;
3128  private:
3129   ::test_cpp2::cpp_reflection::enum1 __fbthrift_field_e;
3130  private:
3131   ::test_cpp2::cpp_reflection::enum2 __fbthrift_field_f;
3132  private:
3133   ::test_cpp2::cpp_reflection::union1 __fbthrift_field_g;
3134  private:
3135   ::test_cpp2::cpp_reflection::unionA __fbthrift_field_h;
3136  private:
3137   ::test_cpp2::cpp_reflection::unionA __fbthrift_field_i;
3138  private:
3139   ::std::vector<::std::int32_t> __fbthrift_field_j;
3140  private:
3141   ::std::vector<::std::int32_t> __fbthrift_field_j1;
3142  private:
3143   ::std::vector<::test_cpp2::cpp_reflection::enum1> __fbthrift_field_j2;
3144  private:
3145   ::std::vector<::test_cpp2::cpp_reflection::structA> __fbthrift_field_j3;
3146  private:
3147   ::std::set<::std::int32_t> __fbthrift_field_k;
3148  private:
3149   ::std::set<::std::int32_t> __fbthrift_field_k1;
3150  private:
3151   ::std::set<::test_cpp2::cpp_reflection::enum2> __fbthrift_field_k2;
3152  private:
3153   ::std::set<::test_cpp2::cpp_reflection::structB> __fbthrift_field_k3;
3154  private:
3155   ::std::map<::std::int32_t, ::std::int32_t> __fbthrift_field_l;
3156  private:
3157   ::std::map<::std::int32_t, ::std::int32_t> __fbthrift_field_l1;
3158  private:
3159   ::std::map<::std::int32_t, ::test_cpp2::cpp_reflection::enum1> __fbthrift_field_l2;
3160  private:
3161   ::std::map<::std::int32_t, ::test_cpp2::cpp_reflection::structB> __fbthrift_field_l3;
3162  private:
3163   ::std::map<::test_cpp2::cpp_reflection::enum1, ::std::int32_t> __fbthrift_field_m1;
3164  private:
3165   ::std::map<::test_cpp2::cpp_reflection::enum1, ::test_cpp2::cpp_reflection::enum2> __fbthrift_field_m2;
3166  private:
3167   ::std::map<::test_cpp2::cpp_reflection::enum1, ::test_cpp2::cpp_reflection::structB> __fbthrift_field_m3;
3168  private:
3169   ::std::map<::std::string, ::std::int32_t> __fbthrift_field_n1;
3170  private:
3171   ::std::map<::std::string, ::test_cpp2::cpp_reflection::enum1> __fbthrift_field_n2;
3172  private:
3173   ::std::map<::std::string, ::test_cpp2::cpp_reflection::structB> __fbthrift_field_n3;
3174  private:
3175   ::std::map<::test_cpp2::cpp_reflection::structA, ::std::int32_t> __fbthrift_field_o1;
3176  private:
3177   ::std::map<::test_cpp2::cpp_reflection::structA, ::test_cpp2::cpp_reflection::enum1> __fbthrift_field_o2;
3178  private:
3179   ::std::map<::test_cpp2::cpp_reflection::structA, ::test_cpp2::cpp_reflection::structB> __fbthrift_field_o3;
3180  private:
3181   apache::thrift::detail::isset_bitset<30, false> __isset;
3182 
3183  public:
3184 
3185   bool operator==(const structC&) const;
3186   bool operator<(const structC&) const;
3187 
3188   template <typename..., typename T = ::std::int32_t>
3189   FOLLY_ERASE ::apache::thrift::field_ref<const T&> a_ref() const& {
3190     return {this->__fbthrift_field_a, __isset.at(0), __isset.bit(0)};
3191   }
3192 
3193   template <typename..., typename T = ::std::int32_t>
3194   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> a_ref() const&& {
3195     return {static_cast<const T&&>(this->__fbthrift_field_a), __isset.at(0), __isset.bit(0)};
3196   }
3197 
3198   template <typename..., typename T = ::std::int32_t>
3199   FOLLY_ERASE ::apache::thrift::field_ref<T&> a_ref() & {
3200     return {this->__fbthrift_field_a, __isset.at(0), __isset.bit(0)};
3201   }
3202 
3203   template <typename..., typename T = ::std::int32_t>
3204   FOLLY_ERASE ::apache::thrift::field_ref<T&&> a_ref() && {
3205     return {static_cast<T&&>(this->__fbthrift_field_a), __isset.at(0), __isset.bit(0)};
3206   }
3207 
3208   template <typename..., typename T = ::std::int32_t>
3209   FOLLY_ERASE ::apache::thrift::field_ref<const T&> a() const& {
3210     return {this->__fbthrift_field_a, __isset.at(0), __isset.bit(0)};
3211   }
3212 
3213   template <typename..., typename T = ::std::int32_t>
3214   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> a() const&& {
3215     return {static_cast<const T&&>(this->__fbthrift_field_a), __isset.at(0), __isset.bit(0)};
3216   }
3217 
3218   template <typename..., typename T = ::std::int32_t>
3219   FOLLY_ERASE ::apache::thrift::field_ref<T&> a() & {
3220     return {this->__fbthrift_field_a, __isset.at(0), __isset.bit(0)};
3221   }
3222 
3223   template <typename..., typename T = ::std::int32_t>
3224   FOLLY_ERASE ::apache::thrift::field_ref<T&&> a() && {
3225     return {static_cast<T&&>(this->__fbthrift_field_a), __isset.at(0), __isset.bit(0)};
3226   }
3227 
3228   template <typename..., typename T = ::std::string>
3229   FOLLY_ERASE ::apache::thrift::field_ref<const T&> b_ref() const& {
3230     return {this->__fbthrift_field_b, __isset.at(1), __isset.bit(1)};
3231   }
3232 
3233   template <typename..., typename T = ::std::string>
3234   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> b_ref() const&& {
3235     return {static_cast<const T&&>(this->__fbthrift_field_b), __isset.at(1), __isset.bit(1)};
3236   }
3237 
3238   template <typename..., typename T = ::std::string>
3239   FOLLY_ERASE ::apache::thrift::field_ref<T&> b_ref() & {
3240     return {this->__fbthrift_field_b, __isset.at(1), __isset.bit(1)};
3241   }
3242 
3243   template <typename..., typename T = ::std::string>
3244   FOLLY_ERASE ::apache::thrift::field_ref<T&&> b_ref() && {
3245     return {static_cast<T&&>(this->__fbthrift_field_b), __isset.at(1), __isset.bit(1)};
3246   }
3247 
3248   template <typename..., typename T = ::std::string>
3249   FOLLY_ERASE ::apache::thrift::field_ref<const T&> b() const& {
3250     return {this->__fbthrift_field_b, __isset.at(1), __isset.bit(1)};
3251   }
3252 
3253   template <typename..., typename T = ::std::string>
3254   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> b() const&& {
3255     return {static_cast<const T&&>(this->__fbthrift_field_b), __isset.at(1), __isset.bit(1)};
3256   }
3257 
3258   template <typename..., typename T = ::std::string>
3259   FOLLY_ERASE ::apache::thrift::field_ref<T&> b() & {
3260     return {this->__fbthrift_field_b, __isset.at(1), __isset.bit(1)};
3261   }
3262 
3263   template <typename..., typename T = ::std::string>
3264   FOLLY_ERASE ::apache::thrift::field_ref<T&&> b() && {
3265     return {static_cast<T&&>(this->__fbthrift_field_b), __isset.at(1), __isset.bit(1)};
3266   }
3267 
3268   template <typename..., typename T = double>
3269   FOLLY_ERASE ::apache::thrift::field_ref<const T&> c_ref() const& {
3270     return {this->__fbthrift_field_c, __isset.at(2), __isset.bit(2)};
3271   }
3272 
3273   template <typename..., typename T = double>
3274   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> c_ref() const&& {
3275     return {static_cast<const T&&>(this->__fbthrift_field_c), __isset.at(2), __isset.bit(2)};
3276   }
3277 
3278   template <typename..., typename T = double>
3279   FOLLY_ERASE ::apache::thrift::field_ref<T&> c_ref() & {
3280     return {this->__fbthrift_field_c, __isset.at(2), __isset.bit(2)};
3281   }
3282 
3283   template <typename..., typename T = double>
3284   FOLLY_ERASE ::apache::thrift::field_ref<T&&> c_ref() && {
3285     return {static_cast<T&&>(this->__fbthrift_field_c), __isset.at(2), __isset.bit(2)};
3286   }
3287 
3288   template <typename..., typename T = double>
3289   FOLLY_ERASE ::apache::thrift::field_ref<const T&> c() const& {
3290     return {this->__fbthrift_field_c, __isset.at(2), __isset.bit(2)};
3291   }
3292 
3293   template <typename..., typename T = double>
3294   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> c() const&& {
3295     return {static_cast<const T&&>(this->__fbthrift_field_c), __isset.at(2), __isset.bit(2)};
3296   }
3297 
3298   template <typename..., typename T = double>
3299   FOLLY_ERASE ::apache::thrift::field_ref<T&> c() & {
3300     return {this->__fbthrift_field_c, __isset.at(2), __isset.bit(2)};
3301   }
3302 
3303   template <typename..., typename T = double>
3304   FOLLY_ERASE ::apache::thrift::field_ref<T&&> c() && {
3305     return {static_cast<T&&>(this->__fbthrift_field_c), __isset.at(2), __isset.bit(2)};
3306   }
3307 
3308   template <typename..., typename T = bool>
3309   FOLLY_ERASE ::apache::thrift::field_ref<const T&> d_ref() const& {
3310     return {this->__fbthrift_field_d, __isset.at(3), __isset.bit(3)};
3311   }
3312 
3313   template <typename..., typename T = bool>
3314   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> d_ref() const&& {
3315     return {static_cast<const T&&>(this->__fbthrift_field_d), __isset.at(3), __isset.bit(3)};
3316   }
3317 
3318   template <typename..., typename T = bool>
3319   FOLLY_ERASE ::apache::thrift::field_ref<T&> d_ref() & {
3320     return {this->__fbthrift_field_d, __isset.at(3), __isset.bit(3)};
3321   }
3322 
3323   template <typename..., typename T = bool>
3324   FOLLY_ERASE ::apache::thrift::field_ref<T&&> d_ref() && {
3325     return {static_cast<T&&>(this->__fbthrift_field_d), __isset.at(3), __isset.bit(3)};
3326   }
3327 
3328   template <typename..., typename T = bool>
3329   FOLLY_ERASE ::apache::thrift::field_ref<const T&> d() const& {
3330     return {this->__fbthrift_field_d, __isset.at(3), __isset.bit(3)};
3331   }
3332 
3333   template <typename..., typename T = bool>
3334   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> d() const&& {
3335     return {static_cast<const T&&>(this->__fbthrift_field_d), __isset.at(3), __isset.bit(3)};
3336   }
3337 
3338   template <typename..., typename T = bool>
3339   FOLLY_ERASE ::apache::thrift::field_ref<T&> d() & {
3340     return {this->__fbthrift_field_d, __isset.at(3), __isset.bit(3)};
3341   }
3342 
3343   template <typename..., typename T = bool>
3344   FOLLY_ERASE ::apache::thrift::field_ref<T&&> d() && {
3345     return {static_cast<T&&>(this->__fbthrift_field_d), __isset.at(3), __isset.bit(3)};
3346   }
3347 
3348   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum1>
3349   FOLLY_ERASE ::apache::thrift::field_ref<const T&> e_ref() const& {
3350     return {this->__fbthrift_field_e, __isset.at(4), __isset.bit(4)};
3351   }
3352 
3353   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum1>
3354   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> e_ref() const&& {
3355     return {static_cast<const T&&>(this->__fbthrift_field_e), __isset.at(4), __isset.bit(4)};
3356   }
3357 
3358   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum1>
3359   FOLLY_ERASE ::apache::thrift::field_ref<T&> e_ref() & {
3360     return {this->__fbthrift_field_e, __isset.at(4), __isset.bit(4)};
3361   }
3362 
3363   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum1>
3364   FOLLY_ERASE ::apache::thrift::field_ref<T&&> e_ref() && {
3365     return {static_cast<T&&>(this->__fbthrift_field_e), __isset.at(4), __isset.bit(4)};
3366   }
3367 
3368   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum1>
3369   FOLLY_ERASE ::apache::thrift::field_ref<const T&> e() const& {
3370     return {this->__fbthrift_field_e, __isset.at(4), __isset.bit(4)};
3371   }
3372 
3373   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum1>
3374   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> e() const&& {
3375     return {static_cast<const T&&>(this->__fbthrift_field_e), __isset.at(4), __isset.bit(4)};
3376   }
3377 
3378   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum1>
3379   FOLLY_ERASE ::apache::thrift::field_ref<T&> e() & {
3380     return {this->__fbthrift_field_e, __isset.at(4), __isset.bit(4)};
3381   }
3382 
3383   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum1>
3384   FOLLY_ERASE ::apache::thrift::field_ref<T&&> e() && {
3385     return {static_cast<T&&>(this->__fbthrift_field_e), __isset.at(4), __isset.bit(4)};
3386   }
3387 
3388   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum2>
3389   FOLLY_ERASE ::apache::thrift::field_ref<const T&> f_ref() const& {
3390     return {this->__fbthrift_field_f, __isset.at(5), __isset.bit(5)};
3391   }
3392 
3393   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum2>
3394   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> f_ref() const&& {
3395     return {static_cast<const T&&>(this->__fbthrift_field_f), __isset.at(5), __isset.bit(5)};
3396   }
3397 
3398   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum2>
3399   FOLLY_ERASE ::apache::thrift::field_ref<T&> f_ref() & {
3400     return {this->__fbthrift_field_f, __isset.at(5), __isset.bit(5)};
3401   }
3402 
3403   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum2>
3404   FOLLY_ERASE ::apache::thrift::field_ref<T&&> f_ref() && {
3405     return {static_cast<T&&>(this->__fbthrift_field_f), __isset.at(5), __isset.bit(5)};
3406   }
3407 
3408   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum2>
3409   FOLLY_ERASE ::apache::thrift::field_ref<const T&> f() const& {
3410     return {this->__fbthrift_field_f, __isset.at(5), __isset.bit(5)};
3411   }
3412 
3413   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum2>
3414   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> f() const&& {
3415     return {static_cast<const T&&>(this->__fbthrift_field_f), __isset.at(5), __isset.bit(5)};
3416   }
3417 
3418   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum2>
3419   FOLLY_ERASE ::apache::thrift::field_ref<T&> f() & {
3420     return {this->__fbthrift_field_f, __isset.at(5), __isset.bit(5)};
3421   }
3422 
3423   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum2>
3424   FOLLY_ERASE ::apache::thrift::field_ref<T&&> f() && {
3425     return {static_cast<T&&>(this->__fbthrift_field_f), __isset.at(5), __isset.bit(5)};
3426   }
3427 
3428   template <typename..., typename T = ::test_cpp2::cpp_reflection::union1>
3429   FOLLY_ERASE ::apache::thrift::field_ref<const T&> g_ref() const& {
3430     return {this->__fbthrift_field_g, __isset.at(6), __isset.bit(6)};
3431   }
3432 
3433   template <typename..., typename T = ::test_cpp2::cpp_reflection::union1>
3434   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> g_ref() const&& {
3435     return {static_cast<const T&&>(this->__fbthrift_field_g), __isset.at(6), __isset.bit(6)};
3436   }
3437 
3438   template <typename..., typename T = ::test_cpp2::cpp_reflection::union1>
3439   FOLLY_ERASE ::apache::thrift::field_ref<T&> g_ref() & {
3440     return {this->__fbthrift_field_g, __isset.at(6), __isset.bit(6)};
3441   }
3442 
3443   template <typename..., typename T = ::test_cpp2::cpp_reflection::union1>
3444   FOLLY_ERASE ::apache::thrift::field_ref<T&&> g_ref() && {
3445     return {static_cast<T&&>(this->__fbthrift_field_g), __isset.at(6), __isset.bit(6)};
3446   }
3447 
3448   template <typename..., typename T = ::test_cpp2::cpp_reflection::union1>
3449   FOLLY_ERASE ::apache::thrift::field_ref<const T&> g() const& {
3450     return {this->__fbthrift_field_g, __isset.at(6), __isset.bit(6)};
3451   }
3452 
3453   template <typename..., typename T = ::test_cpp2::cpp_reflection::union1>
3454   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> g() const&& {
3455     return {static_cast<const T&&>(this->__fbthrift_field_g), __isset.at(6), __isset.bit(6)};
3456   }
3457 
3458   template <typename..., typename T = ::test_cpp2::cpp_reflection::union1>
3459   FOLLY_ERASE ::apache::thrift::field_ref<T&> g() & {
3460     return {this->__fbthrift_field_g, __isset.at(6), __isset.bit(6)};
3461   }
3462 
3463   template <typename..., typename T = ::test_cpp2::cpp_reflection::union1>
3464   FOLLY_ERASE ::apache::thrift::field_ref<T&&> g() && {
3465     return {static_cast<T&&>(this->__fbthrift_field_g), __isset.at(6), __isset.bit(6)};
3466   }
3467 
3468   template <typename..., typename T = ::test_cpp2::cpp_reflection::unionA>
3469   FOLLY_ERASE ::apache::thrift::field_ref<const T&> h_ref() const& {
3470     return {this->__fbthrift_field_h, __isset.at(7), __isset.bit(7)};
3471   }
3472 
3473   template <typename..., typename T = ::test_cpp2::cpp_reflection::unionA>
3474   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> h_ref() const&& {
3475     return {static_cast<const T&&>(this->__fbthrift_field_h), __isset.at(7), __isset.bit(7)};
3476   }
3477 
3478   template <typename..., typename T = ::test_cpp2::cpp_reflection::unionA>
3479   FOLLY_ERASE ::apache::thrift::field_ref<T&> h_ref() & {
3480     return {this->__fbthrift_field_h, __isset.at(7), __isset.bit(7)};
3481   }
3482 
3483   template <typename..., typename T = ::test_cpp2::cpp_reflection::unionA>
3484   FOLLY_ERASE ::apache::thrift::field_ref<T&&> h_ref() && {
3485     return {static_cast<T&&>(this->__fbthrift_field_h), __isset.at(7), __isset.bit(7)};
3486   }
3487 
3488   template <typename..., typename T = ::test_cpp2::cpp_reflection::unionA>
3489   FOLLY_ERASE ::apache::thrift::field_ref<const T&> h() const& {
3490     return {this->__fbthrift_field_h, __isset.at(7), __isset.bit(7)};
3491   }
3492 
3493   template <typename..., typename T = ::test_cpp2::cpp_reflection::unionA>
3494   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> h() const&& {
3495     return {static_cast<const T&&>(this->__fbthrift_field_h), __isset.at(7), __isset.bit(7)};
3496   }
3497 
3498   template <typename..., typename T = ::test_cpp2::cpp_reflection::unionA>
3499   FOLLY_ERASE ::apache::thrift::field_ref<T&> h() & {
3500     return {this->__fbthrift_field_h, __isset.at(7), __isset.bit(7)};
3501   }
3502 
3503   template <typename..., typename T = ::test_cpp2::cpp_reflection::unionA>
3504   FOLLY_ERASE ::apache::thrift::field_ref<T&&> h() && {
3505     return {static_cast<T&&>(this->__fbthrift_field_h), __isset.at(7), __isset.bit(7)};
3506   }
3507 
3508   template <typename..., typename T = ::test_cpp2::cpp_reflection::unionA>
3509   FOLLY_ERASE ::apache::thrift::field_ref<const T&> i_ref() const& {
3510     return {this->__fbthrift_field_i, __isset.at(8), __isset.bit(8)};
3511   }
3512 
3513   template <typename..., typename T = ::test_cpp2::cpp_reflection::unionA>
3514   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> i_ref() const&& {
3515     return {static_cast<const T&&>(this->__fbthrift_field_i), __isset.at(8), __isset.bit(8)};
3516   }
3517 
3518   template <typename..., typename T = ::test_cpp2::cpp_reflection::unionA>
3519   FOLLY_ERASE ::apache::thrift::field_ref<T&> i_ref() & {
3520     return {this->__fbthrift_field_i, __isset.at(8), __isset.bit(8)};
3521   }
3522 
3523   template <typename..., typename T = ::test_cpp2::cpp_reflection::unionA>
3524   FOLLY_ERASE ::apache::thrift::field_ref<T&&> i_ref() && {
3525     return {static_cast<T&&>(this->__fbthrift_field_i), __isset.at(8), __isset.bit(8)};
3526   }
3527 
3528   template <typename..., typename T = ::test_cpp2::cpp_reflection::unionA>
3529   FOLLY_ERASE ::apache::thrift::field_ref<const T&> i() const& {
3530     return {this->__fbthrift_field_i, __isset.at(8), __isset.bit(8)};
3531   }
3532 
3533   template <typename..., typename T = ::test_cpp2::cpp_reflection::unionA>
3534   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> i() const&& {
3535     return {static_cast<const T&&>(this->__fbthrift_field_i), __isset.at(8), __isset.bit(8)};
3536   }
3537 
3538   template <typename..., typename T = ::test_cpp2::cpp_reflection::unionA>
3539   FOLLY_ERASE ::apache::thrift::field_ref<T&> i() & {
3540     return {this->__fbthrift_field_i, __isset.at(8), __isset.bit(8)};
3541   }
3542 
3543   template <typename..., typename T = ::test_cpp2::cpp_reflection::unionA>
3544   FOLLY_ERASE ::apache::thrift::field_ref<T&&> i() && {
3545     return {static_cast<T&&>(this->__fbthrift_field_i), __isset.at(8), __isset.bit(8)};
3546   }
3547 
3548   template <typename..., typename T = ::std::vector<::std::int32_t>>
3549   FOLLY_ERASE ::apache::thrift::field_ref<const T&> j_ref() const& {
3550     return {this->__fbthrift_field_j, __isset.at(9), __isset.bit(9)};
3551   }
3552 
3553   template <typename..., typename T = ::std::vector<::std::int32_t>>
3554   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> j_ref() const&& {
3555     return {static_cast<const T&&>(this->__fbthrift_field_j), __isset.at(9), __isset.bit(9)};
3556   }
3557 
3558   template <typename..., typename T = ::std::vector<::std::int32_t>>
3559   FOLLY_ERASE ::apache::thrift::field_ref<T&> j_ref() & {
3560     return {this->__fbthrift_field_j, __isset.at(9), __isset.bit(9)};
3561   }
3562 
3563   template <typename..., typename T = ::std::vector<::std::int32_t>>
3564   FOLLY_ERASE ::apache::thrift::field_ref<T&&> j_ref() && {
3565     return {static_cast<T&&>(this->__fbthrift_field_j), __isset.at(9), __isset.bit(9)};
3566   }
3567 
3568   template <typename..., typename T = ::std::vector<::std::int32_t>>
3569   FOLLY_ERASE ::apache::thrift::field_ref<const T&> j() const& {
3570     return {this->__fbthrift_field_j, __isset.at(9), __isset.bit(9)};
3571   }
3572 
3573   template <typename..., typename T = ::std::vector<::std::int32_t>>
3574   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> j() const&& {
3575     return {static_cast<const T&&>(this->__fbthrift_field_j), __isset.at(9), __isset.bit(9)};
3576   }
3577 
3578   template <typename..., typename T = ::std::vector<::std::int32_t>>
3579   FOLLY_ERASE ::apache::thrift::field_ref<T&> j() & {
3580     return {this->__fbthrift_field_j, __isset.at(9), __isset.bit(9)};
3581   }
3582 
3583   template <typename..., typename T = ::std::vector<::std::int32_t>>
3584   FOLLY_ERASE ::apache::thrift::field_ref<T&&> j() && {
3585     return {static_cast<T&&>(this->__fbthrift_field_j), __isset.at(9), __isset.bit(9)};
3586   }
3587 
3588   template <typename..., typename T = ::std::vector<::std::int32_t>>
3589   FOLLY_ERASE ::apache::thrift::field_ref<const T&> j1_ref() const& {
3590     return {this->__fbthrift_field_j1, __isset.at(10), __isset.bit(10)};
3591   }
3592 
3593   template <typename..., typename T = ::std::vector<::std::int32_t>>
3594   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> j1_ref() const&& {
3595     return {static_cast<const T&&>(this->__fbthrift_field_j1), __isset.at(10), __isset.bit(10)};
3596   }
3597 
3598   template <typename..., typename T = ::std::vector<::std::int32_t>>
3599   FOLLY_ERASE ::apache::thrift::field_ref<T&> j1_ref() & {
3600     return {this->__fbthrift_field_j1, __isset.at(10), __isset.bit(10)};
3601   }
3602 
3603   template <typename..., typename T = ::std::vector<::std::int32_t>>
3604   FOLLY_ERASE ::apache::thrift::field_ref<T&&> j1_ref() && {
3605     return {static_cast<T&&>(this->__fbthrift_field_j1), __isset.at(10), __isset.bit(10)};
3606   }
3607 
3608   template <typename..., typename T = ::std::vector<::std::int32_t>>
3609   FOLLY_ERASE ::apache::thrift::field_ref<const T&> j1() const& {
3610     return {this->__fbthrift_field_j1, __isset.at(10), __isset.bit(10)};
3611   }
3612 
3613   template <typename..., typename T = ::std::vector<::std::int32_t>>
3614   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> j1() const&& {
3615     return {static_cast<const T&&>(this->__fbthrift_field_j1), __isset.at(10), __isset.bit(10)};
3616   }
3617 
3618   template <typename..., typename T = ::std::vector<::std::int32_t>>
3619   FOLLY_ERASE ::apache::thrift::field_ref<T&> j1() & {
3620     return {this->__fbthrift_field_j1, __isset.at(10), __isset.bit(10)};
3621   }
3622 
3623   template <typename..., typename T = ::std::vector<::std::int32_t>>
3624   FOLLY_ERASE ::apache::thrift::field_ref<T&&> j1() && {
3625     return {static_cast<T&&>(this->__fbthrift_field_j1), __isset.at(10), __isset.bit(10)};
3626   }
3627 
3628   template <typename..., typename T = ::std::vector<::test_cpp2::cpp_reflection::enum1>>
3629   FOLLY_ERASE ::apache::thrift::field_ref<const T&> j2_ref() const& {
3630     return {this->__fbthrift_field_j2, __isset.at(11), __isset.bit(11)};
3631   }
3632 
3633   template <typename..., typename T = ::std::vector<::test_cpp2::cpp_reflection::enum1>>
3634   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> j2_ref() const&& {
3635     return {static_cast<const T&&>(this->__fbthrift_field_j2), __isset.at(11), __isset.bit(11)};
3636   }
3637 
3638   template <typename..., typename T = ::std::vector<::test_cpp2::cpp_reflection::enum1>>
3639   FOLLY_ERASE ::apache::thrift::field_ref<T&> j2_ref() & {
3640     return {this->__fbthrift_field_j2, __isset.at(11), __isset.bit(11)};
3641   }
3642 
3643   template <typename..., typename T = ::std::vector<::test_cpp2::cpp_reflection::enum1>>
3644   FOLLY_ERASE ::apache::thrift::field_ref<T&&> j2_ref() && {
3645     return {static_cast<T&&>(this->__fbthrift_field_j2), __isset.at(11), __isset.bit(11)};
3646   }
3647 
3648   template <typename..., typename T = ::std::vector<::test_cpp2::cpp_reflection::enum1>>
3649   FOLLY_ERASE ::apache::thrift::field_ref<const T&> j2() const& {
3650     return {this->__fbthrift_field_j2, __isset.at(11), __isset.bit(11)};
3651   }
3652 
3653   template <typename..., typename T = ::std::vector<::test_cpp2::cpp_reflection::enum1>>
3654   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> j2() const&& {
3655     return {static_cast<const T&&>(this->__fbthrift_field_j2), __isset.at(11), __isset.bit(11)};
3656   }
3657 
3658   template <typename..., typename T = ::std::vector<::test_cpp2::cpp_reflection::enum1>>
3659   FOLLY_ERASE ::apache::thrift::field_ref<T&> j2() & {
3660     return {this->__fbthrift_field_j2, __isset.at(11), __isset.bit(11)};
3661   }
3662 
3663   template <typename..., typename T = ::std::vector<::test_cpp2::cpp_reflection::enum1>>
3664   FOLLY_ERASE ::apache::thrift::field_ref<T&&> j2() && {
3665     return {static_cast<T&&>(this->__fbthrift_field_j2), __isset.at(11), __isset.bit(11)};
3666   }
3667 
3668   template <typename..., typename T = ::std::vector<::test_cpp2::cpp_reflection::structA>>
3669   FOLLY_ERASE ::apache::thrift::field_ref<const T&> j3_ref() const& {
3670     return {this->__fbthrift_field_j3, __isset.at(12), __isset.bit(12)};
3671   }
3672 
3673   template <typename..., typename T = ::std::vector<::test_cpp2::cpp_reflection::structA>>
3674   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> j3_ref() const&& {
3675     return {static_cast<const T&&>(this->__fbthrift_field_j3), __isset.at(12), __isset.bit(12)};
3676   }
3677 
3678   template <typename..., typename T = ::std::vector<::test_cpp2::cpp_reflection::structA>>
3679   FOLLY_ERASE ::apache::thrift::field_ref<T&> j3_ref() & {
3680     return {this->__fbthrift_field_j3, __isset.at(12), __isset.bit(12)};
3681   }
3682 
3683   template <typename..., typename T = ::std::vector<::test_cpp2::cpp_reflection::structA>>
3684   FOLLY_ERASE ::apache::thrift::field_ref<T&&> j3_ref() && {
3685     return {static_cast<T&&>(this->__fbthrift_field_j3), __isset.at(12), __isset.bit(12)};
3686   }
3687 
3688   template <typename..., typename T = ::std::vector<::test_cpp2::cpp_reflection::structA>>
3689   FOLLY_ERASE ::apache::thrift::field_ref<const T&> j3() const& {
3690     return {this->__fbthrift_field_j3, __isset.at(12), __isset.bit(12)};
3691   }
3692 
3693   template <typename..., typename T = ::std::vector<::test_cpp2::cpp_reflection::structA>>
3694   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> j3() const&& {
3695     return {static_cast<const T&&>(this->__fbthrift_field_j3), __isset.at(12), __isset.bit(12)};
3696   }
3697 
3698   template <typename..., typename T = ::std::vector<::test_cpp2::cpp_reflection::structA>>
3699   FOLLY_ERASE ::apache::thrift::field_ref<T&> j3() & {
3700     return {this->__fbthrift_field_j3, __isset.at(12), __isset.bit(12)};
3701   }
3702 
3703   template <typename..., typename T = ::std::vector<::test_cpp2::cpp_reflection::structA>>
3704   FOLLY_ERASE ::apache::thrift::field_ref<T&&> j3() && {
3705     return {static_cast<T&&>(this->__fbthrift_field_j3), __isset.at(12), __isset.bit(12)};
3706   }
3707 
3708   template <typename..., typename T = ::std::set<::std::int32_t>>
3709   FOLLY_ERASE ::apache::thrift::field_ref<const T&> k_ref() const& {
3710     return {this->__fbthrift_field_k, __isset.at(13), __isset.bit(13)};
3711   }
3712 
3713   template <typename..., typename T = ::std::set<::std::int32_t>>
3714   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> k_ref() const&& {
3715     return {static_cast<const T&&>(this->__fbthrift_field_k), __isset.at(13), __isset.bit(13)};
3716   }
3717 
3718   template <typename..., typename T = ::std::set<::std::int32_t>>
3719   FOLLY_ERASE ::apache::thrift::field_ref<T&> k_ref() & {
3720     return {this->__fbthrift_field_k, __isset.at(13), __isset.bit(13)};
3721   }
3722 
3723   template <typename..., typename T = ::std::set<::std::int32_t>>
3724   FOLLY_ERASE ::apache::thrift::field_ref<T&&> k_ref() && {
3725     return {static_cast<T&&>(this->__fbthrift_field_k), __isset.at(13), __isset.bit(13)};
3726   }
3727 
3728   template <typename..., typename T = ::std::set<::std::int32_t>>
3729   FOLLY_ERASE ::apache::thrift::field_ref<const T&> k() const& {
3730     return {this->__fbthrift_field_k, __isset.at(13), __isset.bit(13)};
3731   }
3732 
3733   template <typename..., typename T = ::std::set<::std::int32_t>>
3734   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> k() const&& {
3735     return {static_cast<const T&&>(this->__fbthrift_field_k), __isset.at(13), __isset.bit(13)};
3736   }
3737 
3738   template <typename..., typename T = ::std::set<::std::int32_t>>
3739   FOLLY_ERASE ::apache::thrift::field_ref<T&> k() & {
3740     return {this->__fbthrift_field_k, __isset.at(13), __isset.bit(13)};
3741   }
3742 
3743   template <typename..., typename T = ::std::set<::std::int32_t>>
3744   FOLLY_ERASE ::apache::thrift::field_ref<T&&> k() && {
3745     return {static_cast<T&&>(this->__fbthrift_field_k), __isset.at(13), __isset.bit(13)};
3746   }
3747 
3748   template <typename..., typename T = ::std::set<::std::int32_t>>
3749   FOLLY_ERASE ::apache::thrift::field_ref<const T&> k1_ref() const& {
3750     return {this->__fbthrift_field_k1, __isset.at(14), __isset.bit(14)};
3751   }
3752 
3753   template <typename..., typename T = ::std::set<::std::int32_t>>
3754   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> k1_ref() const&& {
3755     return {static_cast<const T&&>(this->__fbthrift_field_k1), __isset.at(14), __isset.bit(14)};
3756   }
3757 
3758   template <typename..., typename T = ::std::set<::std::int32_t>>
3759   FOLLY_ERASE ::apache::thrift::field_ref<T&> k1_ref() & {
3760     return {this->__fbthrift_field_k1, __isset.at(14), __isset.bit(14)};
3761   }
3762 
3763   template <typename..., typename T = ::std::set<::std::int32_t>>
3764   FOLLY_ERASE ::apache::thrift::field_ref<T&&> k1_ref() && {
3765     return {static_cast<T&&>(this->__fbthrift_field_k1), __isset.at(14), __isset.bit(14)};
3766   }
3767 
3768   template <typename..., typename T = ::std::set<::std::int32_t>>
3769   FOLLY_ERASE ::apache::thrift::field_ref<const T&> k1() const& {
3770     return {this->__fbthrift_field_k1, __isset.at(14), __isset.bit(14)};
3771   }
3772 
3773   template <typename..., typename T = ::std::set<::std::int32_t>>
3774   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> k1() const&& {
3775     return {static_cast<const T&&>(this->__fbthrift_field_k1), __isset.at(14), __isset.bit(14)};
3776   }
3777 
3778   template <typename..., typename T = ::std::set<::std::int32_t>>
3779   FOLLY_ERASE ::apache::thrift::field_ref<T&> k1() & {
3780     return {this->__fbthrift_field_k1, __isset.at(14), __isset.bit(14)};
3781   }
3782 
3783   template <typename..., typename T = ::std::set<::std::int32_t>>
3784   FOLLY_ERASE ::apache::thrift::field_ref<T&&> k1() && {
3785     return {static_cast<T&&>(this->__fbthrift_field_k1), __isset.at(14), __isset.bit(14)};
3786   }
3787 
3788   template <typename..., typename T = ::std::set<::test_cpp2::cpp_reflection::enum2>>
3789   FOLLY_ERASE ::apache::thrift::field_ref<const T&> k2_ref() const& {
3790     return {this->__fbthrift_field_k2, __isset.at(15), __isset.bit(15)};
3791   }
3792 
3793   template <typename..., typename T = ::std::set<::test_cpp2::cpp_reflection::enum2>>
3794   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> k2_ref() const&& {
3795     return {static_cast<const T&&>(this->__fbthrift_field_k2), __isset.at(15), __isset.bit(15)};
3796   }
3797 
3798   template <typename..., typename T = ::std::set<::test_cpp2::cpp_reflection::enum2>>
3799   FOLLY_ERASE ::apache::thrift::field_ref<T&> k2_ref() & {
3800     return {this->__fbthrift_field_k2, __isset.at(15), __isset.bit(15)};
3801   }
3802 
3803   template <typename..., typename T = ::std::set<::test_cpp2::cpp_reflection::enum2>>
3804   FOLLY_ERASE ::apache::thrift::field_ref<T&&> k2_ref() && {
3805     return {static_cast<T&&>(this->__fbthrift_field_k2), __isset.at(15), __isset.bit(15)};
3806   }
3807 
3808   template <typename..., typename T = ::std::set<::test_cpp2::cpp_reflection::enum2>>
3809   FOLLY_ERASE ::apache::thrift::field_ref<const T&> k2() const& {
3810     return {this->__fbthrift_field_k2, __isset.at(15), __isset.bit(15)};
3811   }
3812 
3813   template <typename..., typename T = ::std::set<::test_cpp2::cpp_reflection::enum2>>
3814   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> k2() const&& {
3815     return {static_cast<const T&&>(this->__fbthrift_field_k2), __isset.at(15), __isset.bit(15)};
3816   }
3817 
3818   template <typename..., typename T = ::std::set<::test_cpp2::cpp_reflection::enum2>>
3819   FOLLY_ERASE ::apache::thrift::field_ref<T&> k2() & {
3820     return {this->__fbthrift_field_k2, __isset.at(15), __isset.bit(15)};
3821   }
3822 
3823   template <typename..., typename T = ::std::set<::test_cpp2::cpp_reflection::enum2>>
3824   FOLLY_ERASE ::apache::thrift::field_ref<T&&> k2() && {
3825     return {static_cast<T&&>(this->__fbthrift_field_k2), __isset.at(15), __isset.bit(15)};
3826   }
3827 
3828   template <typename..., typename T = ::std::set<::test_cpp2::cpp_reflection::structB>>
3829   FOLLY_ERASE ::apache::thrift::field_ref<const T&> k3_ref() const& {
3830     return {this->__fbthrift_field_k3, __isset.at(16), __isset.bit(16)};
3831   }
3832 
3833   template <typename..., typename T = ::std::set<::test_cpp2::cpp_reflection::structB>>
3834   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> k3_ref() const&& {
3835     return {static_cast<const T&&>(this->__fbthrift_field_k3), __isset.at(16), __isset.bit(16)};
3836   }
3837 
3838   template <typename..., typename T = ::std::set<::test_cpp2::cpp_reflection::structB>>
3839   FOLLY_ERASE ::apache::thrift::field_ref<T&> k3_ref() & {
3840     return {this->__fbthrift_field_k3, __isset.at(16), __isset.bit(16)};
3841   }
3842 
3843   template <typename..., typename T = ::std::set<::test_cpp2::cpp_reflection::structB>>
3844   FOLLY_ERASE ::apache::thrift::field_ref<T&&> k3_ref() && {
3845     return {static_cast<T&&>(this->__fbthrift_field_k3), __isset.at(16), __isset.bit(16)};
3846   }
3847 
3848   template <typename..., typename T = ::std::set<::test_cpp2::cpp_reflection::structB>>
3849   FOLLY_ERASE ::apache::thrift::field_ref<const T&> k3() const& {
3850     return {this->__fbthrift_field_k3, __isset.at(16), __isset.bit(16)};
3851   }
3852 
3853   template <typename..., typename T = ::std::set<::test_cpp2::cpp_reflection::structB>>
3854   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> k3() const&& {
3855     return {static_cast<const T&&>(this->__fbthrift_field_k3), __isset.at(16), __isset.bit(16)};
3856   }
3857 
3858   template <typename..., typename T = ::std::set<::test_cpp2::cpp_reflection::structB>>
3859   FOLLY_ERASE ::apache::thrift::field_ref<T&> k3() & {
3860     return {this->__fbthrift_field_k3, __isset.at(16), __isset.bit(16)};
3861   }
3862 
3863   template <typename..., typename T = ::std::set<::test_cpp2::cpp_reflection::structB>>
3864   FOLLY_ERASE ::apache::thrift::field_ref<T&&> k3() && {
3865     return {static_cast<T&&>(this->__fbthrift_field_k3), __isset.at(16), __isset.bit(16)};
3866   }
3867 
3868   template <typename..., typename T = ::std::map<::std::int32_t, ::std::int32_t>>
3869   FOLLY_ERASE ::apache::thrift::field_ref<const T&> l_ref() const& {
3870     return {this->__fbthrift_field_l, __isset.at(17), __isset.bit(17)};
3871   }
3872 
3873   template <typename..., typename T = ::std::map<::std::int32_t, ::std::int32_t>>
3874   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> l_ref() const&& {
3875     return {static_cast<const T&&>(this->__fbthrift_field_l), __isset.at(17), __isset.bit(17)};
3876   }
3877 
3878   template <typename..., typename T = ::std::map<::std::int32_t, ::std::int32_t>>
3879   FOLLY_ERASE ::apache::thrift::field_ref<T&> l_ref() & {
3880     return {this->__fbthrift_field_l, __isset.at(17), __isset.bit(17)};
3881   }
3882 
3883   template <typename..., typename T = ::std::map<::std::int32_t, ::std::int32_t>>
3884   FOLLY_ERASE ::apache::thrift::field_ref<T&&> l_ref() && {
3885     return {static_cast<T&&>(this->__fbthrift_field_l), __isset.at(17), __isset.bit(17)};
3886   }
3887 
3888   template <typename..., typename T = ::std::map<::std::int32_t, ::std::int32_t>>
3889   FOLLY_ERASE ::apache::thrift::field_ref<const T&> l() const& {
3890     return {this->__fbthrift_field_l, __isset.at(17), __isset.bit(17)};
3891   }
3892 
3893   template <typename..., typename T = ::std::map<::std::int32_t, ::std::int32_t>>
3894   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> l() const&& {
3895     return {static_cast<const T&&>(this->__fbthrift_field_l), __isset.at(17), __isset.bit(17)};
3896   }
3897 
3898   template <typename..., typename T = ::std::map<::std::int32_t, ::std::int32_t>>
3899   FOLLY_ERASE ::apache::thrift::field_ref<T&> l() & {
3900     return {this->__fbthrift_field_l, __isset.at(17), __isset.bit(17)};
3901   }
3902 
3903   template <typename..., typename T = ::std::map<::std::int32_t, ::std::int32_t>>
3904   FOLLY_ERASE ::apache::thrift::field_ref<T&&> l() && {
3905     return {static_cast<T&&>(this->__fbthrift_field_l), __isset.at(17), __isset.bit(17)};
3906   }
3907 
3908   template <typename..., typename T = ::std::map<::std::int32_t, ::std::int32_t>>
3909   FOLLY_ERASE ::apache::thrift::field_ref<const T&> l1_ref() const& {
3910     return {this->__fbthrift_field_l1, __isset.at(18), __isset.bit(18)};
3911   }
3912 
3913   template <typename..., typename T = ::std::map<::std::int32_t, ::std::int32_t>>
3914   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> l1_ref() const&& {
3915     return {static_cast<const T&&>(this->__fbthrift_field_l1), __isset.at(18), __isset.bit(18)};
3916   }
3917 
3918   template <typename..., typename T = ::std::map<::std::int32_t, ::std::int32_t>>
3919   FOLLY_ERASE ::apache::thrift::field_ref<T&> l1_ref() & {
3920     return {this->__fbthrift_field_l1, __isset.at(18), __isset.bit(18)};
3921   }
3922 
3923   template <typename..., typename T = ::std::map<::std::int32_t, ::std::int32_t>>
3924   FOLLY_ERASE ::apache::thrift::field_ref<T&&> l1_ref() && {
3925     return {static_cast<T&&>(this->__fbthrift_field_l1), __isset.at(18), __isset.bit(18)};
3926   }
3927 
3928   template <typename..., typename T = ::std::map<::std::int32_t, ::std::int32_t>>
3929   FOLLY_ERASE ::apache::thrift::field_ref<const T&> l1() const& {
3930     return {this->__fbthrift_field_l1, __isset.at(18), __isset.bit(18)};
3931   }
3932 
3933   template <typename..., typename T = ::std::map<::std::int32_t, ::std::int32_t>>
3934   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> l1() const&& {
3935     return {static_cast<const T&&>(this->__fbthrift_field_l1), __isset.at(18), __isset.bit(18)};
3936   }
3937 
3938   template <typename..., typename T = ::std::map<::std::int32_t, ::std::int32_t>>
3939   FOLLY_ERASE ::apache::thrift::field_ref<T&> l1() & {
3940     return {this->__fbthrift_field_l1, __isset.at(18), __isset.bit(18)};
3941   }
3942 
3943   template <typename..., typename T = ::std::map<::std::int32_t, ::std::int32_t>>
3944   FOLLY_ERASE ::apache::thrift::field_ref<T&&> l1() && {
3945     return {static_cast<T&&>(this->__fbthrift_field_l1), __isset.at(18), __isset.bit(18)};
3946   }
3947 
3948   template <typename..., typename T = ::std::map<::std::int32_t, ::test_cpp2::cpp_reflection::enum1>>
3949   FOLLY_ERASE ::apache::thrift::field_ref<const T&> l2_ref() const& {
3950     return {this->__fbthrift_field_l2, __isset.at(19), __isset.bit(19)};
3951   }
3952 
3953   template <typename..., typename T = ::std::map<::std::int32_t, ::test_cpp2::cpp_reflection::enum1>>
3954   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> l2_ref() const&& {
3955     return {static_cast<const T&&>(this->__fbthrift_field_l2), __isset.at(19), __isset.bit(19)};
3956   }
3957 
3958   template <typename..., typename T = ::std::map<::std::int32_t, ::test_cpp2::cpp_reflection::enum1>>
3959   FOLLY_ERASE ::apache::thrift::field_ref<T&> l2_ref() & {
3960     return {this->__fbthrift_field_l2, __isset.at(19), __isset.bit(19)};
3961   }
3962 
3963   template <typename..., typename T = ::std::map<::std::int32_t, ::test_cpp2::cpp_reflection::enum1>>
3964   FOLLY_ERASE ::apache::thrift::field_ref<T&&> l2_ref() && {
3965     return {static_cast<T&&>(this->__fbthrift_field_l2), __isset.at(19), __isset.bit(19)};
3966   }
3967 
3968   template <typename..., typename T = ::std::map<::std::int32_t, ::test_cpp2::cpp_reflection::enum1>>
3969   FOLLY_ERASE ::apache::thrift::field_ref<const T&> l2() const& {
3970     return {this->__fbthrift_field_l2, __isset.at(19), __isset.bit(19)};
3971   }
3972 
3973   template <typename..., typename T = ::std::map<::std::int32_t, ::test_cpp2::cpp_reflection::enum1>>
3974   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> l2() const&& {
3975     return {static_cast<const T&&>(this->__fbthrift_field_l2), __isset.at(19), __isset.bit(19)};
3976   }
3977 
3978   template <typename..., typename T = ::std::map<::std::int32_t, ::test_cpp2::cpp_reflection::enum1>>
3979   FOLLY_ERASE ::apache::thrift::field_ref<T&> l2() & {
3980     return {this->__fbthrift_field_l2, __isset.at(19), __isset.bit(19)};
3981   }
3982 
3983   template <typename..., typename T = ::std::map<::std::int32_t, ::test_cpp2::cpp_reflection::enum1>>
3984   FOLLY_ERASE ::apache::thrift::field_ref<T&&> l2() && {
3985     return {static_cast<T&&>(this->__fbthrift_field_l2), __isset.at(19), __isset.bit(19)};
3986   }
3987 
3988   template <typename..., typename T = ::std::map<::std::int32_t, ::test_cpp2::cpp_reflection::structB>>
3989   FOLLY_ERASE ::apache::thrift::field_ref<const T&> l3_ref() const& {
3990     return {this->__fbthrift_field_l3, __isset.at(20), __isset.bit(20)};
3991   }
3992 
3993   template <typename..., typename T = ::std::map<::std::int32_t, ::test_cpp2::cpp_reflection::structB>>
3994   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> l3_ref() const&& {
3995     return {static_cast<const T&&>(this->__fbthrift_field_l3), __isset.at(20), __isset.bit(20)};
3996   }
3997 
3998   template <typename..., typename T = ::std::map<::std::int32_t, ::test_cpp2::cpp_reflection::structB>>
3999   FOLLY_ERASE ::apache::thrift::field_ref<T&> l3_ref() & {
4000     return {this->__fbthrift_field_l3, __isset.at(20), __isset.bit(20)};
4001   }
4002 
4003   template <typename..., typename T = ::std::map<::std::int32_t, ::test_cpp2::cpp_reflection::structB>>
4004   FOLLY_ERASE ::apache::thrift::field_ref<T&&> l3_ref() && {
4005     return {static_cast<T&&>(this->__fbthrift_field_l3), __isset.at(20), __isset.bit(20)};
4006   }
4007 
4008   template <typename..., typename T = ::std::map<::std::int32_t, ::test_cpp2::cpp_reflection::structB>>
4009   FOLLY_ERASE ::apache::thrift::field_ref<const T&> l3() const& {
4010     return {this->__fbthrift_field_l3, __isset.at(20), __isset.bit(20)};
4011   }
4012 
4013   template <typename..., typename T = ::std::map<::std::int32_t, ::test_cpp2::cpp_reflection::structB>>
4014   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> l3() const&& {
4015     return {static_cast<const T&&>(this->__fbthrift_field_l3), __isset.at(20), __isset.bit(20)};
4016   }
4017 
4018   template <typename..., typename T = ::std::map<::std::int32_t, ::test_cpp2::cpp_reflection::structB>>
4019   FOLLY_ERASE ::apache::thrift::field_ref<T&> l3() & {
4020     return {this->__fbthrift_field_l3, __isset.at(20), __isset.bit(20)};
4021   }
4022 
4023   template <typename..., typename T = ::std::map<::std::int32_t, ::test_cpp2::cpp_reflection::structB>>
4024   FOLLY_ERASE ::apache::thrift::field_ref<T&&> l3() && {
4025     return {static_cast<T&&>(this->__fbthrift_field_l3), __isset.at(20), __isset.bit(20)};
4026   }
4027 
4028   template <typename..., typename T = ::std::map<::test_cpp2::cpp_reflection::enum1, ::std::int32_t>>
4029   FOLLY_ERASE ::apache::thrift::field_ref<const T&> m1_ref() const& {
4030     return {this->__fbthrift_field_m1, __isset.at(21), __isset.bit(21)};
4031   }
4032 
4033   template <typename..., typename T = ::std::map<::test_cpp2::cpp_reflection::enum1, ::std::int32_t>>
4034   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> m1_ref() const&& {
4035     return {static_cast<const T&&>(this->__fbthrift_field_m1), __isset.at(21), __isset.bit(21)};
4036   }
4037 
4038   template <typename..., typename T = ::std::map<::test_cpp2::cpp_reflection::enum1, ::std::int32_t>>
4039   FOLLY_ERASE ::apache::thrift::field_ref<T&> m1_ref() & {
4040     return {this->__fbthrift_field_m1, __isset.at(21), __isset.bit(21)};
4041   }
4042 
4043   template <typename..., typename T = ::std::map<::test_cpp2::cpp_reflection::enum1, ::std::int32_t>>
4044   FOLLY_ERASE ::apache::thrift::field_ref<T&&> m1_ref() && {
4045     return {static_cast<T&&>(this->__fbthrift_field_m1), __isset.at(21), __isset.bit(21)};
4046   }
4047 
4048   template <typename..., typename T = ::std::map<::test_cpp2::cpp_reflection::enum1, ::std::int32_t>>
4049   FOLLY_ERASE ::apache::thrift::field_ref<const T&> m1() const& {
4050     return {this->__fbthrift_field_m1, __isset.at(21), __isset.bit(21)};
4051   }
4052 
4053   template <typename..., typename T = ::std::map<::test_cpp2::cpp_reflection::enum1, ::std::int32_t>>
4054   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> m1() const&& {
4055     return {static_cast<const T&&>(this->__fbthrift_field_m1), __isset.at(21), __isset.bit(21)};
4056   }
4057 
4058   template <typename..., typename T = ::std::map<::test_cpp2::cpp_reflection::enum1, ::std::int32_t>>
4059   FOLLY_ERASE ::apache::thrift::field_ref<T&> m1() & {
4060     return {this->__fbthrift_field_m1, __isset.at(21), __isset.bit(21)};
4061   }
4062 
4063   template <typename..., typename T = ::std::map<::test_cpp2::cpp_reflection::enum1, ::std::int32_t>>
4064   FOLLY_ERASE ::apache::thrift::field_ref<T&&> m1() && {
4065     return {static_cast<T&&>(this->__fbthrift_field_m1), __isset.at(21), __isset.bit(21)};
4066   }
4067 
4068   template <typename..., typename T = ::std::map<::test_cpp2::cpp_reflection::enum1, ::test_cpp2::cpp_reflection::enum2>>
4069   FOLLY_ERASE ::apache::thrift::field_ref<const T&> m2_ref() const& {
4070     return {this->__fbthrift_field_m2, __isset.at(22), __isset.bit(22)};
4071   }
4072 
4073   template <typename..., typename T = ::std::map<::test_cpp2::cpp_reflection::enum1, ::test_cpp2::cpp_reflection::enum2>>
4074   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> m2_ref() const&& {
4075     return {static_cast<const T&&>(this->__fbthrift_field_m2), __isset.at(22), __isset.bit(22)};
4076   }
4077 
4078   template <typename..., typename T = ::std::map<::test_cpp2::cpp_reflection::enum1, ::test_cpp2::cpp_reflection::enum2>>
4079   FOLLY_ERASE ::apache::thrift::field_ref<T&> m2_ref() & {
4080     return {this->__fbthrift_field_m2, __isset.at(22), __isset.bit(22)};
4081   }
4082 
4083   template <typename..., typename T = ::std::map<::test_cpp2::cpp_reflection::enum1, ::test_cpp2::cpp_reflection::enum2>>
4084   FOLLY_ERASE ::apache::thrift::field_ref<T&&> m2_ref() && {
4085     return {static_cast<T&&>(this->__fbthrift_field_m2), __isset.at(22), __isset.bit(22)};
4086   }
4087 
4088   template <typename..., typename T = ::std::map<::test_cpp2::cpp_reflection::enum1, ::test_cpp2::cpp_reflection::enum2>>
4089   FOLLY_ERASE ::apache::thrift::field_ref<const T&> m2() const& {
4090     return {this->__fbthrift_field_m2, __isset.at(22), __isset.bit(22)};
4091   }
4092 
4093   template <typename..., typename T = ::std::map<::test_cpp2::cpp_reflection::enum1, ::test_cpp2::cpp_reflection::enum2>>
4094   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> m2() const&& {
4095     return {static_cast<const T&&>(this->__fbthrift_field_m2), __isset.at(22), __isset.bit(22)};
4096   }
4097 
4098   template <typename..., typename T = ::std::map<::test_cpp2::cpp_reflection::enum1, ::test_cpp2::cpp_reflection::enum2>>
4099   FOLLY_ERASE ::apache::thrift::field_ref<T&> m2() & {
4100     return {this->__fbthrift_field_m2, __isset.at(22), __isset.bit(22)};
4101   }
4102 
4103   template <typename..., typename T = ::std::map<::test_cpp2::cpp_reflection::enum1, ::test_cpp2::cpp_reflection::enum2>>
4104   FOLLY_ERASE ::apache::thrift::field_ref<T&&> m2() && {
4105     return {static_cast<T&&>(this->__fbthrift_field_m2), __isset.at(22), __isset.bit(22)};
4106   }
4107 
4108   template <typename..., typename T = ::std::map<::test_cpp2::cpp_reflection::enum1, ::test_cpp2::cpp_reflection::structB>>
4109   FOLLY_ERASE ::apache::thrift::field_ref<const T&> m3_ref() const& {
4110     return {this->__fbthrift_field_m3, __isset.at(23), __isset.bit(23)};
4111   }
4112 
4113   template <typename..., typename T = ::std::map<::test_cpp2::cpp_reflection::enum1, ::test_cpp2::cpp_reflection::structB>>
4114   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> m3_ref() const&& {
4115     return {static_cast<const T&&>(this->__fbthrift_field_m3), __isset.at(23), __isset.bit(23)};
4116   }
4117 
4118   template <typename..., typename T = ::std::map<::test_cpp2::cpp_reflection::enum1, ::test_cpp2::cpp_reflection::structB>>
4119   FOLLY_ERASE ::apache::thrift::field_ref<T&> m3_ref() & {
4120     return {this->__fbthrift_field_m3, __isset.at(23), __isset.bit(23)};
4121   }
4122 
4123   template <typename..., typename T = ::std::map<::test_cpp2::cpp_reflection::enum1, ::test_cpp2::cpp_reflection::structB>>
4124   FOLLY_ERASE ::apache::thrift::field_ref<T&&> m3_ref() && {
4125     return {static_cast<T&&>(this->__fbthrift_field_m3), __isset.at(23), __isset.bit(23)};
4126   }
4127 
4128   template <typename..., typename T = ::std::map<::test_cpp2::cpp_reflection::enum1, ::test_cpp2::cpp_reflection::structB>>
4129   FOLLY_ERASE ::apache::thrift::field_ref<const T&> m3() const& {
4130     return {this->__fbthrift_field_m3, __isset.at(23), __isset.bit(23)};
4131   }
4132 
4133   template <typename..., typename T = ::std::map<::test_cpp2::cpp_reflection::enum1, ::test_cpp2::cpp_reflection::structB>>
4134   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> m3() const&& {
4135     return {static_cast<const T&&>(this->__fbthrift_field_m3), __isset.at(23), __isset.bit(23)};
4136   }
4137 
4138   template <typename..., typename T = ::std::map<::test_cpp2::cpp_reflection::enum1, ::test_cpp2::cpp_reflection::structB>>
4139   FOLLY_ERASE ::apache::thrift::field_ref<T&> m3() & {
4140     return {this->__fbthrift_field_m3, __isset.at(23), __isset.bit(23)};
4141   }
4142 
4143   template <typename..., typename T = ::std::map<::test_cpp2::cpp_reflection::enum1, ::test_cpp2::cpp_reflection::structB>>
4144   FOLLY_ERASE ::apache::thrift::field_ref<T&&> m3() && {
4145     return {static_cast<T&&>(this->__fbthrift_field_m3), __isset.at(23), __isset.bit(23)};
4146   }
4147 
4148   template <typename..., typename T = ::std::map<::std::string, ::std::int32_t>>
4149   FOLLY_ERASE ::apache::thrift::field_ref<const T&> n1_ref() const& {
4150     return {this->__fbthrift_field_n1, __isset.at(24), __isset.bit(24)};
4151   }
4152 
4153   template <typename..., typename T = ::std::map<::std::string, ::std::int32_t>>
4154   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> n1_ref() const&& {
4155     return {static_cast<const T&&>(this->__fbthrift_field_n1), __isset.at(24), __isset.bit(24)};
4156   }
4157 
4158   template <typename..., typename T = ::std::map<::std::string, ::std::int32_t>>
4159   FOLLY_ERASE ::apache::thrift::field_ref<T&> n1_ref() & {
4160     return {this->__fbthrift_field_n1, __isset.at(24), __isset.bit(24)};
4161   }
4162 
4163   template <typename..., typename T = ::std::map<::std::string, ::std::int32_t>>
4164   FOLLY_ERASE ::apache::thrift::field_ref<T&&> n1_ref() && {
4165     return {static_cast<T&&>(this->__fbthrift_field_n1), __isset.at(24), __isset.bit(24)};
4166   }
4167 
4168   template <typename..., typename T = ::std::map<::std::string, ::std::int32_t>>
4169   FOLLY_ERASE ::apache::thrift::field_ref<const T&> n1() const& {
4170     return {this->__fbthrift_field_n1, __isset.at(24), __isset.bit(24)};
4171   }
4172 
4173   template <typename..., typename T = ::std::map<::std::string, ::std::int32_t>>
4174   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> n1() const&& {
4175     return {static_cast<const T&&>(this->__fbthrift_field_n1), __isset.at(24), __isset.bit(24)};
4176   }
4177 
4178   template <typename..., typename T = ::std::map<::std::string, ::std::int32_t>>
4179   FOLLY_ERASE ::apache::thrift::field_ref<T&> n1() & {
4180     return {this->__fbthrift_field_n1, __isset.at(24), __isset.bit(24)};
4181   }
4182 
4183   template <typename..., typename T = ::std::map<::std::string, ::std::int32_t>>
4184   FOLLY_ERASE ::apache::thrift::field_ref<T&&> n1() && {
4185     return {static_cast<T&&>(this->__fbthrift_field_n1), __isset.at(24), __isset.bit(24)};
4186   }
4187 
4188   template <typename..., typename T = ::std::map<::std::string, ::test_cpp2::cpp_reflection::enum1>>
4189   FOLLY_ERASE ::apache::thrift::field_ref<const T&> n2_ref() const& {
4190     return {this->__fbthrift_field_n2, __isset.at(25), __isset.bit(25)};
4191   }
4192 
4193   template <typename..., typename T = ::std::map<::std::string, ::test_cpp2::cpp_reflection::enum1>>
4194   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> n2_ref() const&& {
4195     return {static_cast<const T&&>(this->__fbthrift_field_n2), __isset.at(25), __isset.bit(25)};
4196   }
4197 
4198   template <typename..., typename T = ::std::map<::std::string, ::test_cpp2::cpp_reflection::enum1>>
4199   FOLLY_ERASE ::apache::thrift::field_ref<T&> n2_ref() & {
4200     return {this->__fbthrift_field_n2, __isset.at(25), __isset.bit(25)};
4201   }
4202 
4203   template <typename..., typename T = ::std::map<::std::string, ::test_cpp2::cpp_reflection::enum1>>
4204   FOLLY_ERASE ::apache::thrift::field_ref<T&&> n2_ref() && {
4205     return {static_cast<T&&>(this->__fbthrift_field_n2), __isset.at(25), __isset.bit(25)};
4206   }
4207 
4208   template <typename..., typename T = ::std::map<::std::string, ::test_cpp2::cpp_reflection::enum1>>
4209   FOLLY_ERASE ::apache::thrift::field_ref<const T&> n2() const& {
4210     return {this->__fbthrift_field_n2, __isset.at(25), __isset.bit(25)};
4211   }
4212 
4213   template <typename..., typename T = ::std::map<::std::string, ::test_cpp2::cpp_reflection::enum1>>
4214   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> n2() const&& {
4215     return {static_cast<const T&&>(this->__fbthrift_field_n2), __isset.at(25), __isset.bit(25)};
4216   }
4217 
4218   template <typename..., typename T = ::std::map<::std::string, ::test_cpp2::cpp_reflection::enum1>>
4219   FOLLY_ERASE ::apache::thrift::field_ref<T&> n2() & {
4220     return {this->__fbthrift_field_n2, __isset.at(25), __isset.bit(25)};
4221   }
4222 
4223   template <typename..., typename T = ::std::map<::std::string, ::test_cpp2::cpp_reflection::enum1>>
4224   FOLLY_ERASE ::apache::thrift::field_ref<T&&> n2() && {
4225     return {static_cast<T&&>(this->__fbthrift_field_n2), __isset.at(25), __isset.bit(25)};
4226   }
4227 
4228   template <typename..., typename T = ::std::map<::std::string, ::test_cpp2::cpp_reflection::structB>>
4229   FOLLY_ERASE ::apache::thrift::field_ref<const T&> n3_ref() const& {
4230     return {this->__fbthrift_field_n3, __isset.at(26), __isset.bit(26)};
4231   }
4232 
4233   template <typename..., typename T = ::std::map<::std::string, ::test_cpp2::cpp_reflection::structB>>
4234   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> n3_ref() const&& {
4235     return {static_cast<const T&&>(this->__fbthrift_field_n3), __isset.at(26), __isset.bit(26)};
4236   }
4237 
4238   template <typename..., typename T = ::std::map<::std::string, ::test_cpp2::cpp_reflection::structB>>
4239   FOLLY_ERASE ::apache::thrift::field_ref<T&> n3_ref() & {
4240     return {this->__fbthrift_field_n3, __isset.at(26), __isset.bit(26)};
4241   }
4242 
4243   template <typename..., typename T = ::std::map<::std::string, ::test_cpp2::cpp_reflection::structB>>
4244   FOLLY_ERASE ::apache::thrift::field_ref<T&&> n3_ref() && {
4245     return {static_cast<T&&>(this->__fbthrift_field_n3), __isset.at(26), __isset.bit(26)};
4246   }
4247 
4248   template <typename..., typename T = ::std::map<::std::string, ::test_cpp2::cpp_reflection::structB>>
4249   FOLLY_ERASE ::apache::thrift::field_ref<const T&> n3() const& {
4250     return {this->__fbthrift_field_n3, __isset.at(26), __isset.bit(26)};
4251   }
4252 
4253   template <typename..., typename T = ::std::map<::std::string, ::test_cpp2::cpp_reflection::structB>>
4254   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> n3() const&& {
4255     return {static_cast<const T&&>(this->__fbthrift_field_n3), __isset.at(26), __isset.bit(26)};
4256   }
4257 
4258   template <typename..., typename T = ::std::map<::std::string, ::test_cpp2::cpp_reflection::structB>>
4259   FOLLY_ERASE ::apache::thrift::field_ref<T&> n3() & {
4260     return {this->__fbthrift_field_n3, __isset.at(26), __isset.bit(26)};
4261   }
4262 
4263   template <typename..., typename T = ::std::map<::std::string, ::test_cpp2::cpp_reflection::structB>>
4264   FOLLY_ERASE ::apache::thrift::field_ref<T&&> n3() && {
4265     return {static_cast<T&&>(this->__fbthrift_field_n3), __isset.at(26), __isset.bit(26)};
4266   }
4267 
4268   template <typename..., typename T = ::std::map<::test_cpp2::cpp_reflection::structA, ::std::int32_t>>
4269   FOLLY_ERASE ::apache::thrift::field_ref<const T&> o1_ref() const& {
4270     return {this->__fbthrift_field_o1, __isset.at(27), __isset.bit(27)};
4271   }
4272 
4273   template <typename..., typename T = ::std::map<::test_cpp2::cpp_reflection::structA, ::std::int32_t>>
4274   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> o1_ref() const&& {
4275     return {static_cast<const T&&>(this->__fbthrift_field_o1), __isset.at(27), __isset.bit(27)};
4276   }
4277 
4278   template <typename..., typename T = ::std::map<::test_cpp2::cpp_reflection::structA, ::std::int32_t>>
4279   FOLLY_ERASE ::apache::thrift::field_ref<T&> o1_ref() & {
4280     return {this->__fbthrift_field_o1, __isset.at(27), __isset.bit(27)};
4281   }
4282 
4283   template <typename..., typename T = ::std::map<::test_cpp2::cpp_reflection::structA, ::std::int32_t>>
4284   FOLLY_ERASE ::apache::thrift::field_ref<T&&> o1_ref() && {
4285     return {static_cast<T&&>(this->__fbthrift_field_o1), __isset.at(27), __isset.bit(27)};
4286   }
4287 
4288   template <typename..., typename T = ::std::map<::test_cpp2::cpp_reflection::structA, ::std::int32_t>>
4289   FOLLY_ERASE ::apache::thrift::field_ref<const T&> o1() const& {
4290     return {this->__fbthrift_field_o1, __isset.at(27), __isset.bit(27)};
4291   }
4292 
4293   template <typename..., typename T = ::std::map<::test_cpp2::cpp_reflection::structA, ::std::int32_t>>
4294   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> o1() const&& {
4295     return {static_cast<const T&&>(this->__fbthrift_field_o1), __isset.at(27), __isset.bit(27)};
4296   }
4297 
4298   template <typename..., typename T = ::std::map<::test_cpp2::cpp_reflection::structA, ::std::int32_t>>
4299   FOLLY_ERASE ::apache::thrift::field_ref<T&> o1() & {
4300     return {this->__fbthrift_field_o1, __isset.at(27), __isset.bit(27)};
4301   }
4302 
4303   template <typename..., typename T = ::std::map<::test_cpp2::cpp_reflection::structA, ::std::int32_t>>
4304   FOLLY_ERASE ::apache::thrift::field_ref<T&&> o1() && {
4305     return {static_cast<T&&>(this->__fbthrift_field_o1), __isset.at(27), __isset.bit(27)};
4306   }
4307 
4308   template <typename..., typename T = ::std::map<::test_cpp2::cpp_reflection::structA, ::test_cpp2::cpp_reflection::enum1>>
4309   FOLLY_ERASE ::apache::thrift::field_ref<const T&> o2_ref() const& {
4310     return {this->__fbthrift_field_o2, __isset.at(28), __isset.bit(28)};
4311   }
4312 
4313   template <typename..., typename T = ::std::map<::test_cpp2::cpp_reflection::structA, ::test_cpp2::cpp_reflection::enum1>>
4314   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> o2_ref() const&& {
4315     return {static_cast<const T&&>(this->__fbthrift_field_o2), __isset.at(28), __isset.bit(28)};
4316   }
4317 
4318   template <typename..., typename T = ::std::map<::test_cpp2::cpp_reflection::structA, ::test_cpp2::cpp_reflection::enum1>>
4319   FOLLY_ERASE ::apache::thrift::field_ref<T&> o2_ref() & {
4320     return {this->__fbthrift_field_o2, __isset.at(28), __isset.bit(28)};
4321   }
4322 
4323   template <typename..., typename T = ::std::map<::test_cpp2::cpp_reflection::structA, ::test_cpp2::cpp_reflection::enum1>>
4324   FOLLY_ERASE ::apache::thrift::field_ref<T&&> o2_ref() && {
4325     return {static_cast<T&&>(this->__fbthrift_field_o2), __isset.at(28), __isset.bit(28)};
4326   }
4327 
4328   template <typename..., typename T = ::std::map<::test_cpp2::cpp_reflection::structA, ::test_cpp2::cpp_reflection::enum1>>
4329   FOLLY_ERASE ::apache::thrift::field_ref<const T&> o2() const& {
4330     return {this->__fbthrift_field_o2, __isset.at(28), __isset.bit(28)};
4331   }
4332 
4333   template <typename..., typename T = ::std::map<::test_cpp2::cpp_reflection::structA, ::test_cpp2::cpp_reflection::enum1>>
4334   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> o2() const&& {
4335     return {static_cast<const T&&>(this->__fbthrift_field_o2), __isset.at(28), __isset.bit(28)};
4336   }
4337 
4338   template <typename..., typename T = ::std::map<::test_cpp2::cpp_reflection::structA, ::test_cpp2::cpp_reflection::enum1>>
4339   FOLLY_ERASE ::apache::thrift::field_ref<T&> o2() & {
4340     return {this->__fbthrift_field_o2, __isset.at(28), __isset.bit(28)};
4341   }
4342 
4343   template <typename..., typename T = ::std::map<::test_cpp2::cpp_reflection::structA, ::test_cpp2::cpp_reflection::enum1>>
4344   FOLLY_ERASE ::apache::thrift::field_ref<T&&> o2() && {
4345     return {static_cast<T&&>(this->__fbthrift_field_o2), __isset.at(28), __isset.bit(28)};
4346   }
4347 
4348   template <typename..., typename T = ::std::map<::test_cpp2::cpp_reflection::structA, ::test_cpp2::cpp_reflection::structB>>
4349   FOLLY_ERASE ::apache::thrift::field_ref<const T&> o3_ref() const& {
4350     return {this->__fbthrift_field_o3, __isset.at(29), __isset.bit(29)};
4351   }
4352 
4353   template <typename..., typename T = ::std::map<::test_cpp2::cpp_reflection::structA, ::test_cpp2::cpp_reflection::structB>>
4354   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> o3_ref() const&& {
4355     return {static_cast<const T&&>(this->__fbthrift_field_o3), __isset.at(29), __isset.bit(29)};
4356   }
4357 
4358   template <typename..., typename T = ::std::map<::test_cpp2::cpp_reflection::structA, ::test_cpp2::cpp_reflection::structB>>
4359   FOLLY_ERASE ::apache::thrift::field_ref<T&> o3_ref() & {
4360     return {this->__fbthrift_field_o3, __isset.at(29), __isset.bit(29)};
4361   }
4362 
4363   template <typename..., typename T = ::std::map<::test_cpp2::cpp_reflection::structA, ::test_cpp2::cpp_reflection::structB>>
4364   FOLLY_ERASE ::apache::thrift::field_ref<T&&> o3_ref() && {
4365     return {static_cast<T&&>(this->__fbthrift_field_o3), __isset.at(29), __isset.bit(29)};
4366   }
4367 
4368   template <typename..., typename T = ::std::map<::test_cpp2::cpp_reflection::structA, ::test_cpp2::cpp_reflection::structB>>
4369   FOLLY_ERASE ::apache::thrift::field_ref<const T&> o3() const& {
4370     return {this->__fbthrift_field_o3, __isset.at(29), __isset.bit(29)};
4371   }
4372 
4373   template <typename..., typename T = ::std::map<::test_cpp2::cpp_reflection::structA, ::test_cpp2::cpp_reflection::structB>>
4374   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> o3() const&& {
4375     return {static_cast<const T&&>(this->__fbthrift_field_o3), __isset.at(29), __isset.bit(29)};
4376   }
4377 
4378   template <typename..., typename T = ::std::map<::test_cpp2::cpp_reflection::structA, ::test_cpp2::cpp_reflection::structB>>
4379   FOLLY_ERASE ::apache::thrift::field_ref<T&> o3() & {
4380     return {this->__fbthrift_field_o3, __isset.at(29), __isset.bit(29)};
4381   }
4382 
4383   template <typename..., typename T = ::std::map<::test_cpp2::cpp_reflection::structA, ::test_cpp2::cpp_reflection::structB>>
4384   FOLLY_ERASE ::apache::thrift::field_ref<T&&> o3() && {
4385     return {static_cast<T&&>(this->__fbthrift_field_o3), __isset.at(29), __isset.bit(29)};
4386   }
4387 
4388   ::std::int32_t get_a() const {
4389     return __fbthrift_field_a;
4390   }
4391 
4392   [[deprecated("Use `FOO.a_ref() = BAR;` instead of `FOO.set_a(BAR);`")]]
4393   ::std::int32_t& set_a(::std::int32_t a_) {
4394     a_ref() = a_;
4395     return __fbthrift_field_a;
4396   }
4397 
4398   const ::std::string& get_b() const& {
4399     return __fbthrift_field_b;
4400   }
4401 
4402   ::std::string get_b() && {
4403     return std::move(__fbthrift_field_b);
4404   }
4405 
4406   template <typename T_structC_b_struct_setter = ::std::string>
4407   [[deprecated("Use `FOO.b_ref() = BAR;` instead of `FOO.set_b(BAR);`")]]
4408   ::std::string& set_b(T_structC_b_struct_setter&& b_) {
4409     b_ref() = std::forward<T_structC_b_struct_setter>(b_);
4410     return __fbthrift_field_b;
4411   }
4412 
4413   double get_c() const {
4414     return __fbthrift_field_c;
4415   }
4416 
4417   [[deprecated("Use `FOO.c_ref() = BAR;` instead of `FOO.set_c(BAR);`")]]
4418   double& set_c(double c_) {
4419     c_ref() = c_;
4420     return __fbthrift_field_c;
4421   }
4422 
4423   bool get_d() const {
4424     return __fbthrift_field_d;
4425   }
4426 
4427   [[deprecated("Use `FOO.d_ref() = BAR;` instead of `FOO.set_d(BAR);`")]]
4428   bool& set_d(bool d_) {
4429     d_ref() = d_;
4430     return __fbthrift_field_d;
4431   }
4432 
4433   ::test_cpp2::cpp_reflection::enum1 get_e() const {
4434     return __fbthrift_field_e;
4435   }
4436 
4437   [[deprecated("Use `FOO.e_ref() = BAR;` instead of `FOO.set_e(BAR);`")]]
4438   ::test_cpp2::cpp_reflection::enum1& set_e(::test_cpp2::cpp_reflection::enum1 e_) {
4439     e_ref() = e_;
4440     return __fbthrift_field_e;
4441   }
4442 
4443   ::test_cpp2::cpp_reflection::enum2 get_f() const {
4444     return __fbthrift_field_f;
4445   }
4446 
4447   [[deprecated("Use `FOO.f_ref() = BAR;` instead of `FOO.set_f(BAR);`")]]
4448   ::test_cpp2::cpp_reflection::enum2& set_f(::test_cpp2::cpp_reflection::enum2 f_) {
4449     f_ref() = f_;
4450     return __fbthrift_field_f;
4451   }
4452   const ::test_cpp2::cpp_reflection::union1& get_g() const&;
4453   ::test_cpp2::cpp_reflection::union1 get_g() &&;
4454 
4455   template <typename T_structC_g_struct_setter = ::test_cpp2::cpp_reflection::union1>
4456   [[deprecated("Use `FOO.g_ref() = BAR;` instead of `FOO.set_g(BAR);`")]]
4457   ::test_cpp2::cpp_reflection::union1& set_g(T_structC_g_struct_setter&& g_) {
4458     g_ref() = std::forward<T_structC_g_struct_setter>(g_);
4459     return __fbthrift_field_g;
4460   }
4461   const ::test_cpp2::cpp_reflection::unionA& get_h() const&;
4462   ::test_cpp2::cpp_reflection::unionA get_h() &&;
4463 
4464   template <typename T_structC_h_struct_setter = ::test_cpp2::cpp_reflection::unionA>
4465   [[deprecated("Use `FOO.h_ref() = BAR;` instead of `FOO.set_h(BAR);`")]]
4466   ::test_cpp2::cpp_reflection::unionA& set_h(T_structC_h_struct_setter&& h_) {
4467     h_ref() = std::forward<T_structC_h_struct_setter>(h_);
4468     return __fbthrift_field_h;
4469   }
4470   const ::test_cpp2::cpp_reflection::unionA& get_i() const&;
4471   ::test_cpp2::cpp_reflection::unionA get_i() &&;
4472 
4473   template <typename T_structC_i_struct_setter = ::test_cpp2::cpp_reflection::unionA>
4474   [[deprecated("Use `FOO.i_ref() = BAR;` instead of `FOO.set_i(BAR);`")]]
4475   ::test_cpp2::cpp_reflection::unionA& set_i(T_structC_i_struct_setter&& i_) {
4476     i_ref() = std::forward<T_structC_i_struct_setter>(i_);
4477     return __fbthrift_field_i;
4478   }
4479   const ::std::vector<::std::int32_t>& get_j() const&;
4480   ::std::vector<::std::int32_t> get_j() &&;
4481 
4482   template <typename T_structC_j_struct_setter = ::std::vector<::std::int32_t>>
4483   [[deprecated("Use `FOO.j_ref() = BAR;` instead of `FOO.set_j(BAR);`")]]
4484   ::std::vector<::std::int32_t>& set_j(T_structC_j_struct_setter&& j_) {
4485     j_ref() = std::forward<T_structC_j_struct_setter>(j_);
4486     return __fbthrift_field_j;
4487   }
4488   const ::std::vector<::std::int32_t>& get_j1() const&;
4489   ::std::vector<::std::int32_t> get_j1() &&;
4490 
4491   template <typename T_structC_j1_struct_setter = ::std::vector<::std::int32_t>>
4492   [[deprecated("Use `FOO.j1_ref() = BAR;` instead of `FOO.set_j1(BAR);`")]]
4493   ::std::vector<::std::int32_t>& set_j1(T_structC_j1_struct_setter&& j1_) {
4494     j1_ref() = std::forward<T_structC_j1_struct_setter>(j1_);
4495     return __fbthrift_field_j1;
4496   }
4497   const ::std::vector<::test_cpp2::cpp_reflection::enum1>& get_j2() const&;
4498   ::std::vector<::test_cpp2::cpp_reflection::enum1> get_j2() &&;
4499 
4500   template <typename T_structC_j2_struct_setter = ::std::vector<::test_cpp2::cpp_reflection::enum1>>
4501   [[deprecated("Use `FOO.j2_ref() = BAR;` instead of `FOO.set_j2(BAR);`")]]
4502   ::std::vector<::test_cpp2::cpp_reflection::enum1>& set_j2(T_structC_j2_struct_setter&& j2_) {
4503     j2_ref() = std::forward<T_structC_j2_struct_setter>(j2_);
4504     return __fbthrift_field_j2;
4505   }
4506   const ::std::vector<::test_cpp2::cpp_reflection::structA>& get_j3() const&;
4507   ::std::vector<::test_cpp2::cpp_reflection::structA> get_j3() &&;
4508 
4509   template <typename T_structC_j3_struct_setter = ::std::vector<::test_cpp2::cpp_reflection::structA>>
4510   [[deprecated("Use `FOO.j3_ref() = BAR;` instead of `FOO.set_j3(BAR);`")]]
4511   ::std::vector<::test_cpp2::cpp_reflection::structA>& set_j3(T_structC_j3_struct_setter&& j3_) {
4512     j3_ref() = std::forward<T_structC_j3_struct_setter>(j3_);
4513     return __fbthrift_field_j3;
4514   }
4515   const ::std::set<::std::int32_t>& get_k() const&;
4516   ::std::set<::std::int32_t> get_k() &&;
4517 
4518   template <typename T_structC_k_struct_setter = ::std::set<::std::int32_t>>
4519   [[deprecated("Use `FOO.k_ref() = BAR;` instead of `FOO.set_k(BAR);`")]]
4520   ::std::set<::std::int32_t>& set_k(T_structC_k_struct_setter&& k_) {
4521     k_ref() = std::forward<T_structC_k_struct_setter>(k_);
4522     return __fbthrift_field_k;
4523   }
4524   const ::std::set<::std::int32_t>& get_k1() const&;
4525   ::std::set<::std::int32_t> get_k1() &&;
4526 
4527   template <typename T_structC_k1_struct_setter = ::std::set<::std::int32_t>>
4528   [[deprecated("Use `FOO.k1_ref() = BAR;` instead of `FOO.set_k1(BAR);`")]]
4529   ::std::set<::std::int32_t>& set_k1(T_structC_k1_struct_setter&& k1_) {
4530     k1_ref() = std::forward<T_structC_k1_struct_setter>(k1_);
4531     return __fbthrift_field_k1;
4532   }
4533   const ::std::set<::test_cpp2::cpp_reflection::enum2>& get_k2() const&;
4534   ::std::set<::test_cpp2::cpp_reflection::enum2> get_k2() &&;
4535 
4536   template <typename T_structC_k2_struct_setter = ::std::set<::test_cpp2::cpp_reflection::enum2>>
4537   [[deprecated("Use `FOO.k2_ref() = BAR;` instead of `FOO.set_k2(BAR);`")]]
4538   ::std::set<::test_cpp2::cpp_reflection::enum2>& set_k2(T_structC_k2_struct_setter&& k2_) {
4539     k2_ref() = std::forward<T_structC_k2_struct_setter>(k2_);
4540     return __fbthrift_field_k2;
4541   }
4542   const ::std::set<::test_cpp2::cpp_reflection::structB>& get_k3() const&;
4543   ::std::set<::test_cpp2::cpp_reflection::structB> get_k3() &&;
4544 
4545   template <typename T_structC_k3_struct_setter = ::std::set<::test_cpp2::cpp_reflection::structB>>
4546   [[deprecated("Use `FOO.k3_ref() = BAR;` instead of `FOO.set_k3(BAR);`")]]
4547   ::std::set<::test_cpp2::cpp_reflection::structB>& set_k3(T_structC_k3_struct_setter&& k3_) {
4548     k3_ref() = std::forward<T_structC_k3_struct_setter>(k3_);
4549     return __fbthrift_field_k3;
4550   }
4551   const ::std::map<::std::int32_t, ::std::int32_t>& get_l() const&;
4552   ::std::map<::std::int32_t, ::std::int32_t> get_l() &&;
4553 
4554   template <typename T_structC_l_struct_setter = ::std::map<::std::int32_t, ::std::int32_t>>
4555   [[deprecated("Use `FOO.l_ref() = BAR;` instead of `FOO.set_l(BAR);`")]]
4556   ::std::map<::std::int32_t, ::std::int32_t>& set_l(T_structC_l_struct_setter&& l_) {
4557     l_ref() = std::forward<T_structC_l_struct_setter>(l_);
4558     return __fbthrift_field_l;
4559   }
4560   const ::std::map<::std::int32_t, ::std::int32_t>& get_l1() const&;
4561   ::std::map<::std::int32_t, ::std::int32_t> get_l1() &&;
4562 
4563   template <typename T_structC_l1_struct_setter = ::std::map<::std::int32_t, ::std::int32_t>>
4564   [[deprecated("Use `FOO.l1_ref() = BAR;` instead of `FOO.set_l1(BAR);`")]]
4565   ::std::map<::std::int32_t, ::std::int32_t>& set_l1(T_structC_l1_struct_setter&& l1_) {
4566     l1_ref() = std::forward<T_structC_l1_struct_setter>(l1_);
4567     return __fbthrift_field_l1;
4568   }
4569   const ::std::map<::std::int32_t, ::test_cpp2::cpp_reflection::enum1>& get_l2() const&;
4570   ::std::map<::std::int32_t, ::test_cpp2::cpp_reflection::enum1> get_l2() &&;
4571 
4572   template <typename T_structC_l2_struct_setter = ::std::map<::std::int32_t, ::test_cpp2::cpp_reflection::enum1>>
4573   [[deprecated("Use `FOO.l2_ref() = BAR;` instead of `FOO.set_l2(BAR);`")]]
4574   ::std::map<::std::int32_t, ::test_cpp2::cpp_reflection::enum1>& set_l2(T_structC_l2_struct_setter&& l2_) {
4575     l2_ref() = std::forward<T_structC_l2_struct_setter>(l2_);
4576     return __fbthrift_field_l2;
4577   }
4578   const ::std::map<::std::int32_t, ::test_cpp2::cpp_reflection::structB>& get_l3() const&;
4579   ::std::map<::std::int32_t, ::test_cpp2::cpp_reflection::structB> get_l3() &&;
4580 
4581   template <typename T_structC_l3_struct_setter = ::std::map<::std::int32_t, ::test_cpp2::cpp_reflection::structB>>
4582   [[deprecated("Use `FOO.l3_ref() = BAR;` instead of `FOO.set_l3(BAR);`")]]
4583   ::std::map<::std::int32_t, ::test_cpp2::cpp_reflection::structB>& set_l3(T_structC_l3_struct_setter&& l3_) {
4584     l3_ref() = std::forward<T_structC_l3_struct_setter>(l3_);
4585     return __fbthrift_field_l3;
4586   }
4587   const ::std::map<::test_cpp2::cpp_reflection::enum1, ::std::int32_t>& get_m1() const&;
4588   ::std::map<::test_cpp2::cpp_reflection::enum1, ::std::int32_t> get_m1() &&;
4589 
4590   template <typename T_structC_m1_struct_setter = ::std::map<::test_cpp2::cpp_reflection::enum1, ::std::int32_t>>
4591   [[deprecated("Use `FOO.m1_ref() = BAR;` instead of `FOO.set_m1(BAR);`")]]
4592   ::std::map<::test_cpp2::cpp_reflection::enum1, ::std::int32_t>& set_m1(T_structC_m1_struct_setter&& m1_) {
4593     m1_ref() = std::forward<T_structC_m1_struct_setter>(m1_);
4594     return __fbthrift_field_m1;
4595   }
4596   const ::std::map<::test_cpp2::cpp_reflection::enum1, ::test_cpp2::cpp_reflection::enum2>& get_m2() const&;
4597   ::std::map<::test_cpp2::cpp_reflection::enum1, ::test_cpp2::cpp_reflection::enum2> get_m2() &&;
4598 
4599   template <typename T_structC_m2_struct_setter = ::std::map<::test_cpp2::cpp_reflection::enum1, ::test_cpp2::cpp_reflection::enum2>>
4600   [[deprecated("Use `FOO.m2_ref() = BAR;` instead of `FOO.set_m2(BAR);`")]]
4601   ::std::map<::test_cpp2::cpp_reflection::enum1, ::test_cpp2::cpp_reflection::enum2>& set_m2(T_structC_m2_struct_setter&& m2_) {
4602     m2_ref() = std::forward<T_structC_m2_struct_setter>(m2_);
4603     return __fbthrift_field_m2;
4604   }
4605   const ::std::map<::test_cpp2::cpp_reflection::enum1, ::test_cpp2::cpp_reflection::structB>& get_m3() const&;
4606   ::std::map<::test_cpp2::cpp_reflection::enum1, ::test_cpp2::cpp_reflection::structB> get_m3() &&;
4607 
4608   template <typename T_structC_m3_struct_setter = ::std::map<::test_cpp2::cpp_reflection::enum1, ::test_cpp2::cpp_reflection::structB>>
4609   [[deprecated("Use `FOO.m3_ref() = BAR;` instead of `FOO.set_m3(BAR);`")]]
4610   ::std::map<::test_cpp2::cpp_reflection::enum1, ::test_cpp2::cpp_reflection::structB>& set_m3(T_structC_m3_struct_setter&& m3_) {
4611     m3_ref() = std::forward<T_structC_m3_struct_setter>(m3_);
4612     return __fbthrift_field_m3;
4613   }
4614   const ::std::map<::std::string, ::std::int32_t>& get_n1() const&;
4615   ::std::map<::std::string, ::std::int32_t> get_n1() &&;
4616 
4617   template <typename T_structC_n1_struct_setter = ::std::map<::std::string, ::std::int32_t>>
4618   [[deprecated("Use `FOO.n1_ref() = BAR;` instead of `FOO.set_n1(BAR);`")]]
4619   ::std::map<::std::string, ::std::int32_t>& set_n1(T_structC_n1_struct_setter&& n1_) {
4620     n1_ref() = std::forward<T_structC_n1_struct_setter>(n1_);
4621     return __fbthrift_field_n1;
4622   }
4623   const ::std::map<::std::string, ::test_cpp2::cpp_reflection::enum1>& get_n2() const&;
4624   ::std::map<::std::string, ::test_cpp2::cpp_reflection::enum1> get_n2() &&;
4625 
4626   template <typename T_structC_n2_struct_setter = ::std::map<::std::string, ::test_cpp2::cpp_reflection::enum1>>
4627   [[deprecated("Use `FOO.n2_ref() = BAR;` instead of `FOO.set_n2(BAR);`")]]
4628   ::std::map<::std::string, ::test_cpp2::cpp_reflection::enum1>& set_n2(T_structC_n2_struct_setter&& n2_) {
4629     n2_ref() = std::forward<T_structC_n2_struct_setter>(n2_);
4630     return __fbthrift_field_n2;
4631   }
4632   const ::std::map<::std::string, ::test_cpp2::cpp_reflection::structB>& get_n3() const&;
4633   ::std::map<::std::string, ::test_cpp2::cpp_reflection::structB> get_n3() &&;
4634 
4635   template <typename T_structC_n3_struct_setter = ::std::map<::std::string, ::test_cpp2::cpp_reflection::structB>>
4636   [[deprecated("Use `FOO.n3_ref() = BAR;` instead of `FOO.set_n3(BAR);`")]]
4637   ::std::map<::std::string, ::test_cpp2::cpp_reflection::structB>& set_n3(T_structC_n3_struct_setter&& n3_) {
4638     n3_ref() = std::forward<T_structC_n3_struct_setter>(n3_);
4639     return __fbthrift_field_n3;
4640   }
4641   const ::std::map<::test_cpp2::cpp_reflection::structA, ::std::int32_t>& get_o1() const&;
4642   ::std::map<::test_cpp2::cpp_reflection::structA, ::std::int32_t> get_o1() &&;
4643 
4644   template <typename T_structC_o1_struct_setter = ::std::map<::test_cpp2::cpp_reflection::structA, ::std::int32_t>>
4645   [[deprecated("Use `FOO.o1_ref() = BAR;` instead of `FOO.set_o1(BAR);`")]]
4646   ::std::map<::test_cpp2::cpp_reflection::structA, ::std::int32_t>& set_o1(T_structC_o1_struct_setter&& o1_) {
4647     o1_ref() = std::forward<T_structC_o1_struct_setter>(o1_);
4648     return __fbthrift_field_o1;
4649   }
4650   const ::std::map<::test_cpp2::cpp_reflection::structA, ::test_cpp2::cpp_reflection::enum1>& get_o2() const&;
4651   ::std::map<::test_cpp2::cpp_reflection::structA, ::test_cpp2::cpp_reflection::enum1> get_o2() &&;
4652 
4653   template <typename T_structC_o2_struct_setter = ::std::map<::test_cpp2::cpp_reflection::structA, ::test_cpp2::cpp_reflection::enum1>>
4654   [[deprecated("Use `FOO.o2_ref() = BAR;` instead of `FOO.set_o2(BAR);`")]]
4655   ::std::map<::test_cpp2::cpp_reflection::structA, ::test_cpp2::cpp_reflection::enum1>& set_o2(T_structC_o2_struct_setter&& o2_) {
4656     o2_ref() = std::forward<T_structC_o2_struct_setter>(o2_);
4657     return __fbthrift_field_o2;
4658   }
4659   const ::std::map<::test_cpp2::cpp_reflection::structA, ::test_cpp2::cpp_reflection::structB>& get_o3() const&;
4660   ::std::map<::test_cpp2::cpp_reflection::structA, ::test_cpp2::cpp_reflection::structB> get_o3() &&;
4661 
4662   template <typename T_structC_o3_struct_setter = ::std::map<::test_cpp2::cpp_reflection::structA, ::test_cpp2::cpp_reflection::structB>>
4663   [[deprecated("Use `FOO.o3_ref() = BAR;` instead of `FOO.set_o3(BAR);`")]]
4664   ::std::map<::test_cpp2::cpp_reflection::structA, ::test_cpp2::cpp_reflection::structB>& set_o3(T_structC_o3_struct_setter&& o3_) {
4665     o3_ref() = std::forward<T_structC_o3_struct_setter>(o3_);
4666     return __fbthrift_field_o3;
4667   }
4668 
4669   template <class Protocol_>
4670   uint32_t read(Protocol_* iprot);
4671   template <class Protocol_>
4672   uint32_t serializedSize(Protocol_ const* prot_) const;
4673   template <class Protocol_>
4674   uint32_t serializedSizeZC(Protocol_ const* prot_) const;
4675   template <class Protocol_>
4676   uint32_t write(Protocol_* prot_) const;
4677 
4678  private:
4679   template <class Protocol_>
4680   void readNoXfer(Protocol_* iprot);
4681 
4682   friend class ::apache::thrift::Cpp2Ops<structC>;
4683   friend void swap(structC& a, structC& b);
4684 };
4685 
4686 template <class Protocol_>
4687 uint32_t structC::read(Protocol_* iprot) {
4688   auto _xferStart = iprot->getCursorPosition();
4689   readNoXfer(iprot);
4690   return iprot->getCursorPosition() - _xferStart;
4691 }
4692 
4693 }} // test_cpp2::cpp_reflection
4694 namespace test_cpp2 { namespace cpp_reflection {
4695 class struct1 final  {
4696  private:
4697   friend struct ::apache::thrift::detail::st::struct_private_access;
4698 
4699   //  used by a static_assert in the corresponding source
4700   static constexpr bool __fbthrift_cpp2_gen_json = false;
4701   static constexpr bool __fbthrift_cpp2_gen_nimble = false;
4702   static constexpr bool __fbthrift_cpp2_gen_has_thrift_uri = false;
4703 
4704   void __fbthrift_clear();
4705 
4706  public:
4707   using __fbthrift_cpp2_type = struct1;
4708   static constexpr bool __fbthrift_cpp2_is_union =
4709     false;
4710 
4711 
4712  public:
4713 
4714   struct1();
4715 
4716   // FragileConstructor for use in initialization lists only.
4717   [[deprecated("This constructor is deprecated")]]
4718   struct1(apache::thrift::FragileConstructor, ::std::int32_t field0__arg, ::std::string field1__arg, ::test_cpp2::cpp_reflection::enum1 field2__arg, ::test_cpp2::cpp_reflection::enum2 field3__arg, ::test_cpp2::cpp_reflection::union1 field4__arg, ::test_cpp2::cpp_reflection::union2 field5__arg);
4719 
4720   struct1(struct1&&) noexcept;
4721 
4722   struct1(const struct1& src);
4723 
4724 
4725   struct1& operator=(struct1&&) noexcept;
4726   struct1& operator=(const struct1& src);
4727 
4728   ~struct1();
4729 
4730  public:
4731   ::std::int32_t field0;
4732  private:
4733   ::std::string __fbthrift_field_field1;
4734  private:
4735   ::test_cpp2::cpp_reflection::enum1 __fbthrift_field_field2;
4736  public:
4737   ::test_cpp2::cpp_reflection::enum2 field3;
4738  private:
4739   ::test_cpp2::cpp_reflection::union1 __fbthrift_field_field4;
4740  private:
4741   ::test_cpp2::cpp_reflection::union2 __fbthrift_field_field5;
4742  private:
4743   apache::thrift::detail::isset_bitset<4, false> __isset;
4744 
4745  public:
4746 
4747   bool operator==(const struct1&) const;
4748   bool operator<(const struct1&) const;
4749 
4750   template <typename..., typename T = ::std::int32_t>
4751   FOLLY_ERASE ::apache::thrift::required_field_ref<const T&> field0_ref() const& {
4752     return ::apache::thrift::required_field_ref<const T&>{this->field0};
4753   }
4754 
4755   template <typename..., typename T = ::std::int32_t>
4756   FOLLY_ERASE ::apache::thrift::required_field_ref<const T&&> field0_ref() const&& {
4757     return ::apache::thrift::required_field_ref<const T&&>{static_cast<const T&&>(this->field0)};
4758   }
4759 
4760   template <typename..., typename T = ::std::int32_t>
4761   FOLLY_ERASE ::apache::thrift::required_field_ref<T&> field0_ref() & {
4762     return ::apache::thrift::required_field_ref<T&>{this->field0};
4763   }
4764 
4765   template <typename..., typename T = ::std::int32_t>
4766   FOLLY_ERASE ::apache::thrift::required_field_ref<T&&> field0_ref() && {
4767     return ::apache::thrift::required_field_ref<T&&>{static_cast<T&&>(this->field0)};
4768   }
4769 
4770   template <typename..., typename T = ::std::string>
4771   FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> field1_ref() const& {
4772     return {this->__fbthrift_field_field1, __isset.at(0), __isset.bit(0)};
4773   }
4774 
4775   template <typename..., typename T = ::std::string>
4776   FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> field1_ref() const&& {
4777     return {static_cast<const T&&>(this->__fbthrift_field_field1), __isset.at(0), __isset.bit(0)};
4778   }
4779 
4780   template <typename..., typename T = ::std::string>
4781   FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> field1_ref() & {
4782     return {this->__fbthrift_field_field1, __isset.at(0), __isset.bit(0)};
4783   }
4784 
4785   template <typename..., typename T = ::std::string>
4786   FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> field1_ref() && {
4787     return {static_cast<T&&>(this->__fbthrift_field_field1), __isset.at(0), __isset.bit(0)};
4788   }
4789 
4790   template <typename..., typename T = ::std::string>
4791   FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> field1() const& {
4792     return {this->__fbthrift_field_field1, __isset.at(0), __isset.bit(0)};
4793   }
4794 
4795   template <typename..., typename T = ::std::string>
4796   FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> field1() const&& {
4797     return {static_cast<const T&&>(this->__fbthrift_field_field1), __isset.at(0), __isset.bit(0)};
4798   }
4799 
4800   template <typename..., typename T = ::std::string>
4801   FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> field1() & {
4802     return {this->__fbthrift_field_field1, __isset.at(0), __isset.bit(0)};
4803   }
4804 
4805   template <typename..., typename T = ::std::string>
4806   FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> field1() && {
4807     return {static_cast<T&&>(this->__fbthrift_field_field1), __isset.at(0), __isset.bit(0)};
4808   }
4809 
4810   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum1>
4811   FOLLY_ERASE ::apache::thrift::field_ref<const T&> field2_ref() const& {
4812     return {this->__fbthrift_field_field2, __isset.at(1), __isset.bit(1)};
4813   }
4814 
4815   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum1>
4816   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> field2_ref() const&& {
4817     return {static_cast<const T&&>(this->__fbthrift_field_field2), __isset.at(1), __isset.bit(1)};
4818   }
4819 
4820   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum1>
4821   FOLLY_ERASE ::apache::thrift::field_ref<T&> field2_ref() & {
4822     return {this->__fbthrift_field_field2, __isset.at(1), __isset.bit(1)};
4823   }
4824 
4825   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum1>
4826   FOLLY_ERASE ::apache::thrift::field_ref<T&&> field2_ref() && {
4827     return {static_cast<T&&>(this->__fbthrift_field_field2), __isset.at(1), __isset.bit(1)};
4828   }
4829 
4830   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum1>
4831   FOLLY_ERASE ::apache::thrift::field_ref<const T&> field2() const& {
4832     return {this->__fbthrift_field_field2, __isset.at(1), __isset.bit(1)};
4833   }
4834 
4835   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum1>
4836   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> field2() const&& {
4837     return {static_cast<const T&&>(this->__fbthrift_field_field2), __isset.at(1), __isset.bit(1)};
4838   }
4839 
4840   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum1>
4841   FOLLY_ERASE ::apache::thrift::field_ref<T&> field2() & {
4842     return {this->__fbthrift_field_field2, __isset.at(1), __isset.bit(1)};
4843   }
4844 
4845   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum1>
4846   FOLLY_ERASE ::apache::thrift::field_ref<T&&> field2() && {
4847     return {static_cast<T&&>(this->__fbthrift_field_field2), __isset.at(1), __isset.bit(1)};
4848   }
4849 
4850   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum2>
4851   FOLLY_ERASE ::apache::thrift::required_field_ref<const T&> field3_ref() const& {
4852     return ::apache::thrift::required_field_ref<const T&>{this->field3};
4853   }
4854 
4855   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum2>
4856   FOLLY_ERASE ::apache::thrift::required_field_ref<const T&&> field3_ref() const&& {
4857     return ::apache::thrift::required_field_ref<const T&&>{static_cast<const T&&>(this->field3)};
4858   }
4859 
4860   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum2>
4861   FOLLY_ERASE ::apache::thrift::required_field_ref<T&> field3_ref() & {
4862     return ::apache::thrift::required_field_ref<T&>{this->field3};
4863   }
4864 
4865   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum2>
4866   FOLLY_ERASE ::apache::thrift::required_field_ref<T&&> field3_ref() && {
4867     return ::apache::thrift::required_field_ref<T&&>{static_cast<T&&>(this->field3)};
4868   }
4869 
4870   template <typename..., typename T = ::test_cpp2::cpp_reflection::union1>
4871   FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> field4_ref() const& {
4872     return {this->__fbthrift_field_field4, __isset.at(2), __isset.bit(2)};
4873   }
4874 
4875   template <typename..., typename T = ::test_cpp2::cpp_reflection::union1>
4876   FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> field4_ref() const&& {
4877     return {static_cast<const T&&>(this->__fbthrift_field_field4), __isset.at(2), __isset.bit(2)};
4878   }
4879 
4880   template <typename..., typename T = ::test_cpp2::cpp_reflection::union1>
4881   FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> field4_ref() & {
4882     return {this->__fbthrift_field_field4, __isset.at(2), __isset.bit(2)};
4883   }
4884 
4885   template <typename..., typename T = ::test_cpp2::cpp_reflection::union1>
4886   FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> field4_ref() && {
4887     return {static_cast<T&&>(this->__fbthrift_field_field4), __isset.at(2), __isset.bit(2)};
4888   }
4889 
4890   template <typename..., typename T = ::test_cpp2::cpp_reflection::union1>
4891   FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> field4() const& {
4892     return {this->__fbthrift_field_field4, __isset.at(2), __isset.bit(2)};
4893   }
4894 
4895   template <typename..., typename T = ::test_cpp2::cpp_reflection::union1>
4896   FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> field4() const&& {
4897     return {static_cast<const T&&>(this->__fbthrift_field_field4), __isset.at(2), __isset.bit(2)};
4898   }
4899 
4900   template <typename..., typename T = ::test_cpp2::cpp_reflection::union1>
4901   FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> field4() & {
4902     return {this->__fbthrift_field_field4, __isset.at(2), __isset.bit(2)};
4903   }
4904 
4905   template <typename..., typename T = ::test_cpp2::cpp_reflection::union1>
4906   FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> field4() && {
4907     return {static_cast<T&&>(this->__fbthrift_field_field4), __isset.at(2), __isset.bit(2)};
4908   }
4909 
4910   template <typename..., typename T = ::test_cpp2::cpp_reflection::union2>
4911   FOLLY_ERASE ::apache::thrift::field_ref<const T&> field5_ref() const& {
4912     return {this->__fbthrift_field_field5, __isset.at(3), __isset.bit(3)};
4913   }
4914 
4915   template <typename..., typename T = ::test_cpp2::cpp_reflection::union2>
4916   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> field5_ref() const&& {
4917     return {static_cast<const T&&>(this->__fbthrift_field_field5), __isset.at(3), __isset.bit(3)};
4918   }
4919 
4920   template <typename..., typename T = ::test_cpp2::cpp_reflection::union2>
4921   FOLLY_ERASE ::apache::thrift::field_ref<T&> field5_ref() & {
4922     return {this->__fbthrift_field_field5, __isset.at(3), __isset.bit(3)};
4923   }
4924 
4925   template <typename..., typename T = ::test_cpp2::cpp_reflection::union2>
4926   FOLLY_ERASE ::apache::thrift::field_ref<T&&> field5_ref() && {
4927     return {static_cast<T&&>(this->__fbthrift_field_field5), __isset.at(3), __isset.bit(3)};
4928   }
4929 
4930   template <typename..., typename T = ::test_cpp2::cpp_reflection::union2>
4931   FOLLY_ERASE ::apache::thrift::field_ref<const T&> field5() const& {
4932     return {this->__fbthrift_field_field5, __isset.at(3), __isset.bit(3)};
4933   }
4934 
4935   template <typename..., typename T = ::test_cpp2::cpp_reflection::union2>
4936   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> field5() const&& {
4937     return {static_cast<const T&&>(this->__fbthrift_field_field5), __isset.at(3), __isset.bit(3)};
4938   }
4939 
4940   template <typename..., typename T = ::test_cpp2::cpp_reflection::union2>
4941   FOLLY_ERASE ::apache::thrift::field_ref<T&> field5() & {
4942     return {this->__fbthrift_field_field5, __isset.at(3), __isset.bit(3)};
4943   }
4944 
4945   template <typename..., typename T = ::test_cpp2::cpp_reflection::union2>
4946   FOLLY_ERASE ::apache::thrift::field_ref<T&&> field5() && {
4947     return {static_cast<T&&>(this->__fbthrift_field_field5), __isset.at(3), __isset.bit(3)};
4948   }
4949 
4950   ::std::int32_t get_field0() const {
4951     return field0;
4952   }
4953 
4954   [[deprecated("Use `FOO.field0_ref() = BAR;` instead of `FOO.set_field0(BAR);`")]]
4955   ::std::int32_t& set_field0(::std::int32_t field0_) {
4956     field0_ref() = field0_;
4957     return field0;
4958   }
4959 
4960   const ::std::string* get_field1() const& {
4961     return field1_ref() ? std::addressof(__fbthrift_field_field1) : nullptr;
4962   }
4963 
4964   ::std::string* get_field1() & {
4965     return field1_ref() ? std::addressof(__fbthrift_field_field1) : nullptr;
4966   }
4967   ::std::string* get_field1() && = delete;
4968 
4969   template <typename T_struct1_field1_struct_setter = ::std::string>
4970   [[deprecated("Use `FOO.field1_ref() = BAR;` instead of `FOO.set_field1(BAR);`")]]
4971   ::std::string& set_field1(T_struct1_field1_struct_setter&& field1_) {
4972     field1_ref() = std::forward<T_struct1_field1_struct_setter>(field1_);
4973     return __fbthrift_field_field1;
4974   }
4975 
4976   ::test_cpp2::cpp_reflection::enum1 get_field2() const {
4977     return __fbthrift_field_field2;
4978   }
4979 
4980   [[deprecated("Use `FOO.field2_ref() = BAR;` instead of `FOO.set_field2(BAR);`")]]
4981   ::test_cpp2::cpp_reflection::enum1& set_field2(::test_cpp2::cpp_reflection::enum1 field2_) {
4982     field2_ref() = field2_;
4983     return __fbthrift_field_field2;
4984   }
4985 
4986   ::test_cpp2::cpp_reflection::enum2 get_field3() const {
4987     return field3;
4988   }
4989 
4990   [[deprecated("Use `FOO.field3_ref() = BAR;` instead of `FOO.set_field3(BAR);`")]]
4991   ::test_cpp2::cpp_reflection::enum2& set_field3(::test_cpp2::cpp_reflection::enum2 field3_) {
4992     field3_ref() = field3_;
4993     return field3;
4994   }
4995   const ::test_cpp2::cpp_reflection::union1* get_field4() const&;
4996   ::test_cpp2::cpp_reflection::union1* get_field4() &;
4997   ::test_cpp2::cpp_reflection::union1* get_field4() && = delete;
4998 
4999   template <typename T_struct1_field4_struct_setter = ::test_cpp2::cpp_reflection::union1>
5000   [[deprecated("Use `FOO.field4_ref() = BAR;` instead of `FOO.set_field4(BAR);`")]]
5001   ::test_cpp2::cpp_reflection::union1& set_field4(T_struct1_field4_struct_setter&& field4_) {
5002     field4_ref() = std::forward<T_struct1_field4_struct_setter>(field4_);
5003     return __fbthrift_field_field4;
5004   }
5005   const ::test_cpp2::cpp_reflection::union2& get_field5() const&;
5006   ::test_cpp2::cpp_reflection::union2 get_field5() &&;
5007 
5008   template <typename T_struct1_field5_struct_setter = ::test_cpp2::cpp_reflection::union2>
5009   [[deprecated("Use `FOO.field5_ref() = BAR;` instead of `FOO.set_field5(BAR);`")]]
5010   ::test_cpp2::cpp_reflection::union2& set_field5(T_struct1_field5_struct_setter&& field5_) {
5011     field5_ref() = std::forward<T_struct1_field5_struct_setter>(field5_);
5012     return __fbthrift_field_field5;
5013   }
5014 
5015   template <class Protocol_>
5016   uint32_t read(Protocol_* iprot);
5017   template <class Protocol_>
5018   uint32_t serializedSize(Protocol_ const* prot_) const;
5019   template <class Protocol_>
5020   uint32_t serializedSizeZC(Protocol_ const* prot_) const;
5021   template <class Protocol_>
5022   uint32_t write(Protocol_* prot_) const;
5023 
5024  private:
5025   template <class Protocol_>
5026   void readNoXfer(Protocol_* iprot);
5027 
5028   friend class ::apache::thrift::Cpp2Ops<struct1>;
5029   friend void swap(struct1& a, struct1& b);
5030 };
5031 
5032 template <class Protocol_>
5033 uint32_t struct1::read(Protocol_* iprot) {
5034   auto _xferStart = iprot->getCursorPosition();
5035   readNoXfer(iprot);
5036   return iprot->getCursorPosition() - _xferStart;
5037 }
5038 
5039 }} // test_cpp2::cpp_reflection
5040 namespace test_cpp2 { namespace cpp_reflection {
5041 class struct2 final  {
5042  private:
5043   friend struct ::apache::thrift::detail::st::struct_private_access;
5044 
5045   //  used by a static_assert in the corresponding source
5046   static constexpr bool __fbthrift_cpp2_gen_json = false;
5047   static constexpr bool __fbthrift_cpp2_gen_nimble = false;
5048   static constexpr bool __fbthrift_cpp2_gen_has_thrift_uri = false;
5049 
5050   void __fbthrift_clear();
5051 
5052  public:
5053   using __fbthrift_cpp2_type = struct2;
5054   static constexpr bool __fbthrift_cpp2_is_union =
5055     false;
5056 
5057 
5058  public:
5059 
5060   struct2();
5061 
5062   // FragileConstructor for use in initialization lists only.
5063   [[deprecated("This constructor is deprecated")]]
5064   struct2(apache::thrift::FragileConstructor, ::std::int32_t fieldA__arg, ::std::string fieldB__arg, ::test_cpp2::cpp_reflection::enum1 fieldC__arg, ::test_cpp2::cpp_reflection::enum2 fieldD__arg, ::test_cpp2::cpp_reflection::union1 fieldE__arg, ::test_cpp2::cpp_reflection::union2 fieldF__arg, ::test_cpp2::cpp_reflection::struct1 fieldG__arg);
5065 
5066   struct2(struct2&&) noexcept;
5067 
5068   struct2(const struct2& src);
5069 
5070 
5071   struct2& operator=(struct2&&) noexcept;
5072   struct2& operator=(const struct2& src);
5073 
5074   ~struct2();
5075 
5076  private:
5077   ::std::int32_t __fbthrift_field_fieldA;
5078  private:
5079   ::std::string __fbthrift_field_fieldB;
5080  private:
5081   ::test_cpp2::cpp_reflection::enum1 __fbthrift_field_fieldC;
5082  private:
5083   ::test_cpp2::cpp_reflection::enum2 __fbthrift_field_fieldD;
5084  private:
5085   ::test_cpp2::cpp_reflection::union1 __fbthrift_field_fieldE;
5086  private:
5087   ::test_cpp2::cpp_reflection::union2 __fbthrift_field_fieldF;
5088  private:
5089   ::test_cpp2::cpp_reflection::struct1 __fbthrift_field_fieldG;
5090  private:
5091   apache::thrift::detail::isset_bitset<7, false> __isset;
5092 
5093  public:
5094 
5095   bool operator==(const struct2&) const;
5096   bool operator<(const struct2&) const;
5097 
5098   template <typename..., typename T = ::std::int32_t>
5099   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldA_ref() const& {
5100     return {this->__fbthrift_field_fieldA, __isset.at(0), __isset.bit(0)};
5101   }
5102 
5103   template <typename..., typename T = ::std::int32_t>
5104   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldA_ref() const&& {
5105     return {static_cast<const T&&>(this->__fbthrift_field_fieldA), __isset.at(0), __isset.bit(0)};
5106   }
5107 
5108   template <typename..., typename T = ::std::int32_t>
5109   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldA_ref() & {
5110     return {this->__fbthrift_field_fieldA, __isset.at(0), __isset.bit(0)};
5111   }
5112 
5113   template <typename..., typename T = ::std::int32_t>
5114   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldA_ref() && {
5115     return {static_cast<T&&>(this->__fbthrift_field_fieldA), __isset.at(0), __isset.bit(0)};
5116   }
5117 
5118   template <typename..., typename T = ::std::int32_t>
5119   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldA() const& {
5120     return {this->__fbthrift_field_fieldA, __isset.at(0), __isset.bit(0)};
5121   }
5122 
5123   template <typename..., typename T = ::std::int32_t>
5124   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldA() const&& {
5125     return {static_cast<const T&&>(this->__fbthrift_field_fieldA), __isset.at(0), __isset.bit(0)};
5126   }
5127 
5128   template <typename..., typename T = ::std::int32_t>
5129   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldA() & {
5130     return {this->__fbthrift_field_fieldA, __isset.at(0), __isset.bit(0)};
5131   }
5132 
5133   template <typename..., typename T = ::std::int32_t>
5134   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldA() && {
5135     return {static_cast<T&&>(this->__fbthrift_field_fieldA), __isset.at(0), __isset.bit(0)};
5136   }
5137 
5138   template <typename..., typename T = ::std::string>
5139   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldB_ref() const& {
5140     return {this->__fbthrift_field_fieldB, __isset.at(1), __isset.bit(1)};
5141   }
5142 
5143   template <typename..., typename T = ::std::string>
5144   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldB_ref() const&& {
5145     return {static_cast<const T&&>(this->__fbthrift_field_fieldB), __isset.at(1), __isset.bit(1)};
5146   }
5147 
5148   template <typename..., typename T = ::std::string>
5149   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldB_ref() & {
5150     return {this->__fbthrift_field_fieldB, __isset.at(1), __isset.bit(1)};
5151   }
5152 
5153   template <typename..., typename T = ::std::string>
5154   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldB_ref() && {
5155     return {static_cast<T&&>(this->__fbthrift_field_fieldB), __isset.at(1), __isset.bit(1)};
5156   }
5157 
5158   template <typename..., typename T = ::std::string>
5159   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldB() const& {
5160     return {this->__fbthrift_field_fieldB, __isset.at(1), __isset.bit(1)};
5161   }
5162 
5163   template <typename..., typename T = ::std::string>
5164   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldB() const&& {
5165     return {static_cast<const T&&>(this->__fbthrift_field_fieldB), __isset.at(1), __isset.bit(1)};
5166   }
5167 
5168   template <typename..., typename T = ::std::string>
5169   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldB() & {
5170     return {this->__fbthrift_field_fieldB, __isset.at(1), __isset.bit(1)};
5171   }
5172 
5173   template <typename..., typename T = ::std::string>
5174   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldB() && {
5175     return {static_cast<T&&>(this->__fbthrift_field_fieldB), __isset.at(1), __isset.bit(1)};
5176   }
5177 
5178   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum1>
5179   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldC_ref() const& {
5180     return {this->__fbthrift_field_fieldC, __isset.at(2), __isset.bit(2)};
5181   }
5182 
5183   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum1>
5184   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldC_ref() const&& {
5185     return {static_cast<const T&&>(this->__fbthrift_field_fieldC), __isset.at(2), __isset.bit(2)};
5186   }
5187 
5188   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum1>
5189   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldC_ref() & {
5190     return {this->__fbthrift_field_fieldC, __isset.at(2), __isset.bit(2)};
5191   }
5192 
5193   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum1>
5194   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldC_ref() && {
5195     return {static_cast<T&&>(this->__fbthrift_field_fieldC), __isset.at(2), __isset.bit(2)};
5196   }
5197 
5198   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum1>
5199   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldC() const& {
5200     return {this->__fbthrift_field_fieldC, __isset.at(2), __isset.bit(2)};
5201   }
5202 
5203   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum1>
5204   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldC() const&& {
5205     return {static_cast<const T&&>(this->__fbthrift_field_fieldC), __isset.at(2), __isset.bit(2)};
5206   }
5207 
5208   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum1>
5209   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldC() & {
5210     return {this->__fbthrift_field_fieldC, __isset.at(2), __isset.bit(2)};
5211   }
5212 
5213   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum1>
5214   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldC() && {
5215     return {static_cast<T&&>(this->__fbthrift_field_fieldC), __isset.at(2), __isset.bit(2)};
5216   }
5217 
5218   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum2>
5219   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldD_ref() const& {
5220     return {this->__fbthrift_field_fieldD, __isset.at(3), __isset.bit(3)};
5221   }
5222 
5223   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum2>
5224   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldD_ref() const&& {
5225     return {static_cast<const T&&>(this->__fbthrift_field_fieldD), __isset.at(3), __isset.bit(3)};
5226   }
5227 
5228   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum2>
5229   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldD_ref() & {
5230     return {this->__fbthrift_field_fieldD, __isset.at(3), __isset.bit(3)};
5231   }
5232 
5233   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum2>
5234   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldD_ref() && {
5235     return {static_cast<T&&>(this->__fbthrift_field_fieldD), __isset.at(3), __isset.bit(3)};
5236   }
5237 
5238   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum2>
5239   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldD() const& {
5240     return {this->__fbthrift_field_fieldD, __isset.at(3), __isset.bit(3)};
5241   }
5242 
5243   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum2>
5244   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldD() const&& {
5245     return {static_cast<const T&&>(this->__fbthrift_field_fieldD), __isset.at(3), __isset.bit(3)};
5246   }
5247 
5248   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum2>
5249   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldD() & {
5250     return {this->__fbthrift_field_fieldD, __isset.at(3), __isset.bit(3)};
5251   }
5252 
5253   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum2>
5254   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldD() && {
5255     return {static_cast<T&&>(this->__fbthrift_field_fieldD), __isset.at(3), __isset.bit(3)};
5256   }
5257 
5258   template <typename..., typename T = ::test_cpp2::cpp_reflection::union1>
5259   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldE_ref() const& {
5260     return {this->__fbthrift_field_fieldE, __isset.at(4), __isset.bit(4)};
5261   }
5262 
5263   template <typename..., typename T = ::test_cpp2::cpp_reflection::union1>
5264   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldE_ref() const&& {
5265     return {static_cast<const T&&>(this->__fbthrift_field_fieldE), __isset.at(4), __isset.bit(4)};
5266   }
5267 
5268   template <typename..., typename T = ::test_cpp2::cpp_reflection::union1>
5269   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldE_ref() & {
5270     return {this->__fbthrift_field_fieldE, __isset.at(4), __isset.bit(4)};
5271   }
5272 
5273   template <typename..., typename T = ::test_cpp2::cpp_reflection::union1>
5274   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldE_ref() && {
5275     return {static_cast<T&&>(this->__fbthrift_field_fieldE), __isset.at(4), __isset.bit(4)};
5276   }
5277 
5278   template <typename..., typename T = ::test_cpp2::cpp_reflection::union1>
5279   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldE() const& {
5280     return {this->__fbthrift_field_fieldE, __isset.at(4), __isset.bit(4)};
5281   }
5282 
5283   template <typename..., typename T = ::test_cpp2::cpp_reflection::union1>
5284   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldE() const&& {
5285     return {static_cast<const T&&>(this->__fbthrift_field_fieldE), __isset.at(4), __isset.bit(4)};
5286   }
5287 
5288   template <typename..., typename T = ::test_cpp2::cpp_reflection::union1>
5289   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldE() & {
5290     return {this->__fbthrift_field_fieldE, __isset.at(4), __isset.bit(4)};
5291   }
5292 
5293   template <typename..., typename T = ::test_cpp2::cpp_reflection::union1>
5294   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldE() && {
5295     return {static_cast<T&&>(this->__fbthrift_field_fieldE), __isset.at(4), __isset.bit(4)};
5296   }
5297 
5298   template <typename..., typename T = ::test_cpp2::cpp_reflection::union2>
5299   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldF_ref() const& {
5300     return {this->__fbthrift_field_fieldF, __isset.at(5), __isset.bit(5)};
5301   }
5302 
5303   template <typename..., typename T = ::test_cpp2::cpp_reflection::union2>
5304   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldF_ref() const&& {
5305     return {static_cast<const T&&>(this->__fbthrift_field_fieldF), __isset.at(5), __isset.bit(5)};
5306   }
5307 
5308   template <typename..., typename T = ::test_cpp2::cpp_reflection::union2>
5309   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldF_ref() & {
5310     return {this->__fbthrift_field_fieldF, __isset.at(5), __isset.bit(5)};
5311   }
5312 
5313   template <typename..., typename T = ::test_cpp2::cpp_reflection::union2>
5314   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldF_ref() && {
5315     return {static_cast<T&&>(this->__fbthrift_field_fieldF), __isset.at(5), __isset.bit(5)};
5316   }
5317 
5318   template <typename..., typename T = ::test_cpp2::cpp_reflection::union2>
5319   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldF() const& {
5320     return {this->__fbthrift_field_fieldF, __isset.at(5), __isset.bit(5)};
5321   }
5322 
5323   template <typename..., typename T = ::test_cpp2::cpp_reflection::union2>
5324   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldF() const&& {
5325     return {static_cast<const T&&>(this->__fbthrift_field_fieldF), __isset.at(5), __isset.bit(5)};
5326   }
5327 
5328   template <typename..., typename T = ::test_cpp2::cpp_reflection::union2>
5329   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldF() & {
5330     return {this->__fbthrift_field_fieldF, __isset.at(5), __isset.bit(5)};
5331   }
5332 
5333   template <typename..., typename T = ::test_cpp2::cpp_reflection::union2>
5334   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldF() && {
5335     return {static_cast<T&&>(this->__fbthrift_field_fieldF), __isset.at(5), __isset.bit(5)};
5336   }
5337 
5338   template <typename..., typename T = ::test_cpp2::cpp_reflection::struct1>
5339   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldG_ref() const& {
5340     return {this->__fbthrift_field_fieldG, __isset.at(6), __isset.bit(6)};
5341   }
5342 
5343   template <typename..., typename T = ::test_cpp2::cpp_reflection::struct1>
5344   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldG_ref() const&& {
5345     return {static_cast<const T&&>(this->__fbthrift_field_fieldG), __isset.at(6), __isset.bit(6)};
5346   }
5347 
5348   template <typename..., typename T = ::test_cpp2::cpp_reflection::struct1>
5349   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldG_ref() & {
5350     return {this->__fbthrift_field_fieldG, __isset.at(6), __isset.bit(6)};
5351   }
5352 
5353   template <typename..., typename T = ::test_cpp2::cpp_reflection::struct1>
5354   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldG_ref() && {
5355     return {static_cast<T&&>(this->__fbthrift_field_fieldG), __isset.at(6), __isset.bit(6)};
5356   }
5357 
5358   template <typename..., typename T = ::test_cpp2::cpp_reflection::struct1>
5359   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldG() const& {
5360     return {this->__fbthrift_field_fieldG, __isset.at(6), __isset.bit(6)};
5361   }
5362 
5363   template <typename..., typename T = ::test_cpp2::cpp_reflection::struct1>
5364   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldG() const&& {
5365     return {static_cast<const T&&>(this->__fbthrift_field_fieldG), __isset.at(6), __isset.bit(6)};
5366   }
5367 
5368   template <typename..., typename T = ::test_cpp2::cpp_reflection::struct1>
5369   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldG() & {
5370     return {this->__fbthrift_field_fieldG, __isset.at(6), __isset.bit(6)};
5371   }
5372 
5373   template <typename..., typename T = ::test_cpp2::cpp_reflection::struct1>
5374   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldG() && {
5375     return {static_cast<T&&>(this->__fbthrift_field_fieldG), __isset.at(6), __isset.bit(6)};
5376   }
5377 
5378   ::std::int32_t get_fieldA() const {
5379     return __fbthrift_field_fieldA;
5380   }
5381 
5382   [[deprecated("Use `FOO.fieldA_ref() = BAR;` instead of `FOO.set_fieldA(BAR);`")]]
5383   ::std::int32_t& set_fieldA(::std::int32_t fieldA_) {
5384     fieldA_ref() = fieldA_;
5385     return __fbthrift_field_fieldA;
5386   }
5387 
5388   const ::std::string& get_fieldB() const& {
5389     return __fbthrift_field_fieldB;
5390   }
5391 
5392   ::std::string get_fieldB() && {
5393     return std::move(__fbthrift_field_fieldB);
5394   }
5395 
5396   template <typename T_struct2_fieldB_struct_setter = ::std::string>
5397   [[deprecated("Use `FOO.fieldB_ref() = BAR;` instead of `FOO.set_fieldB(BAR);`")]]
5398   ::std::string& set_fieldB(T_struct2_fieldB_struct_setter&& fieldB_) {
5399     fieldB_ref() = std::forward<T_struct2_fieldB_struct_setter>(fieldB_);
5400     return __fbthrift_field_fieldB;
5401   }
5402 
5403   ::test_cpp2::cpp_reflection::enum1 get_fieldC() const {
5404     return __fbthrift_field_fieldC;
5405   }
5406 
5407   [[deprecated("Use `FOO.fieldC_ref() = BAR;` instead of `FOO.set_fieldC(BAR);`")]]
5408   ::test_cpp2::cpp_reflection::enum1& set_fieldC(::test_cpp2::cpp_reflection::enum1 fieldC_) {
5409     fieldC_ref() = fieldC_;
5410     return __fbthrift_field_fieldC;
5411   }
5412 
5413   ::test_cpp2::cpp_reflection::enum2 get_fieldD() const {
5414     return __fbthrift_field_fieldD;
5415   }
5416 
5417   [[deprecated("Use `FOO.fieldD_ref() = BAR;` instead of `FOO.set_fieldD(BAR);`")]]
5418   ::test_cpp2::cpp_reflection::enum2& set_fieldD(::test_cpp2::cpp_reflection::enum2 fieldD_) {
5419     fieldD_ref() = fieldD_;
5420     return __fbthrift_field_fieldD;
5421   }
5422   const ::test_cpp2::cpp_reflection::union1& get_fieldE() const&;
5423   ::test_cpp2::cpp_reflection::union1 get_fieldE() &&;
5424 
5425   template <typename T_struct2_fieldE_struct_setter = ::test_cpp2::cpp_reflection::union1>
5426   [[deprecated("Use `FOO.fieldE_ref() = BAR;` instead of `FOO.set_fieldE(BAR);`")]]
5427   ::test_cpp2::cpp_reflection::union1& set_fieldE(T_struct2_fieldE_struct_setter&& fieldE_) {
5428     fieldE_ref() = std::forward<T_struct2_fieldE_struct_setter>(fieldE_);
5429     return __fbthrift_field_fieldE;
5430   }
5431   const ::test_cpp2::cpp_reflection::union2& get_fieldF() const&;
5432   ::test_cpp2::cpp_reflection::union2 get_fieldF() &&;
5433 
5434   template <typename T_struct2_fieldF_struct_setter = ::test_cpp2::cpp_reflection::union2>
5435   [[deprecated("Use `FOO.fieldF_ref() = BAR;` instead of `FOO.set_fieldF(BAR);`")]]
5436   ::test_cpp2::cpp_reflection::union2& set_fieldF(T_struct2_fieldF_struct_setter&& fieldF_) {
5437     fieldF_ref() = std::forward<T_struct2_fieldF_struct_setter>(fieldF_);
5438     return __fbthrift_field_fieldF;
5439   }
5440   const ::test_cpp2::cpp_reflection::struct1& get_fieldG() const&;
5441   ::test_cpp2::cpp_reflection::struct1 get_fieldG() &&;
5442 
5443   template <typename T_struct2_fieldG_struct_setter = ::test_cpp2::cpp_reflection::struct1>
5444   [[deprecated("Use `FOO.fieldG_ref() = BAR;` instead of `FOO.set_fieldG(BAR);`")]]
5445   ::test_cpp2::cpp_reflection::struct1& set_fieldG(T_struct2_fieldG_struct_setter&& fieldG_) {
5446     fieldG_ref() = std::forward<T_struct2_fieldG_struct_setter>(fieldG_);
5447     return __fbthrift_field_fieldG;
5448   }
5449 
5450   template <class Protocol_>
5451   uint32_t read(Protocol_* iprot);
5452   template <class Protocol_>
5453   uint32_t serializedSize(Protocol_ const* prot_) const;
5454   template <class Protocol_>
5455   uint32_t serializedSizeZC(Protocol_ const* prot_) const;
5456   template <class Protocol_>
5457   uint32_t write(Protocol_* prot_) const;
5458 
5459  private:
5460   template <class Protocol_>
5461   void readNoXfer(Protocol_* iprot);
5462 
5463   friend class ::apache::thrift::Cpp2Ops<struct2>;
5464   friend void swap(struct2& a, struct2& b);
5465 };
5466 
5467 template <class Protocol_>
5468 uint32_t struct2::read(Protocol_* iprot) {
5469   auto _xferStart = iprot->getCursorPosition();
5470   readNoXfer(iprot);
5471   return iprot->getCursorPosition() - _xferStart;
5472 }
5473 
5474 }} // test_cpp2::cpp_reflection
5475 namespace test_cpp2 { namespace cpp_reflection {
5476 class struct3 final  {
5477  private:
5478   friend struct ::apache::thrift::detail::st::struct_private_access;
5479 
5480   //  used by a static_assert in the corresponding source
5481   static constexpr bool __fbthrift_cpp2_gen_json = false;
5482   static constexpr bool __fbthrift_cpp2_gen_nimble = false;
5483   static constexpr bool __fbthrift_cpp2_gen_has_thrift_uri = false;
5484 
5485   void __fbthrift_clear();
5486 
5487  public:
5488   using __fbthrift_cpp2_type = struct3;
5489   static constexpr bool __fbthrift_cpp2_is_union =
5490     false;
5491 
5492 
5493  public:
5494 
5495   struct3();
5496 
5497   // FragileConstructor for use in initialization lists only.
5498   [[deprecated("This constructor is deprecated")]]
5499   struct3(apache::thrift::FragileConstructor, ::std::int32_t fieldA__arg, ::std::string fieldB__arg, ::test_cpp2::cpp_reflection::enum1 fieldC__arg, ::test_cpp2::cpp_reflection::enum2 fieldD__arg, ::test_cpp2::cpp_reflection::union1 fieldE__arg, ::test_cpp2::cpp_reflection::union2 fieldF__arg, ::test_cpp2::cpp_reflection::struct1 fieldG__arg, ::test_cpp2::cpp_reflection::union2 fieldH__arg, ::std::vector<::std::int32_t> fieldI__arg, ::std::vector<::std::string> fieldJ__arg, ::std::vector<::std::string> fieldK__arg, ::std::vector<::test_cpp2::cpp_reflection::structA> fieldL__arg, ::std::set<::std::int32_t> fieldM__arg, ::std::set<::std::string> fieldN__arg, ::std::set<::std::string> fieldO__arg, ::std::set<::test_cpp2::cpp_reflection::structB> fieldP__arg, ::std::map<::std::string, ::test_cpp2::cpp_reflection::structA> fieldQ__arg, ::std::map<::std::string, ::test_cpp2::cpp_reflection::structB> fieldR__arg);
5500 
5501   struct3(struct3&&) noexcept;
5502 
5503   struct3(const struct3& src);
5504 
5505 
5506   struct3& operator=(struct3&&) noexcept;
5507   struct3& operator=(const struct3& src);
5508 
5509   ~struct3();
5510 
5511  private:
5512   ::std::int32_t __fbthrift_field_fieldA;
5513  private:
5514   ::std::string __fbthrift_field_fieldB;
5515  private:
5516   ::test_cpp2::cpp_reflection::enum1 __fbthrift_field_fieldC;
5517  private:
5518   ::test_cpp2::cpp_reflection::enum2 __fbthrift_field_fieldD;
5519  private:
5520   ::test_cpp2::cpp_reflection::union1 __fbthrift_field_fieldE;
5521  private:
5522   ::test_cpp2::cpp_reflection::union2 __fbthrift_field_fieldF;
5523  private:
5524   ::test_cpp2::cpp_reflection::struct1 __fbthrift_field_fieldG;
5525  private:
5526   ::test_cpp2::cpp_reflection::union2 __fbthrift_field_fieldH;
5527  private:
5528   ::std::vector<::std::int32_t> __fbthrift_field_fieldI;
5529  private:
5530   ::std::vector<::std::string> __fbthrift_field_fieldJ;
5531  private:
5532   ::std::vector<::std::string> __fbthrift_field_fieldK;
5533  private:
5534   ::std::vector<::test_cpp2::cpp_reflection::structA> __fbthrift_field_fieldL;
5535  private:
5536   ::std::set<::std::int32_t> __fbthrift_field_fieldM;
5537  private:
5538   ::std::set<::std::string> __fbthrift_field_fieldN;
5539  private:
5540   ::std::set<::std::string> __fbthrift_field_fieldO;
5541  private:
5542   ::std::set<::test_cpp2::cpp_reflection::structB> __fbthrift_field_fieldP;
5543  private:
5544   ::std::map<::std::string, ::test_cpp2::cpp_reflection::structA> __fbthrift_field_fieldQ;
5545  private:
5546   ::std::map<::std::string, ::test_cpp2::cpp_reflection::structB> __fbthrift_field_fieldR;
5547  private:
5548   apache::thrift::detail::isset_bitset<18, false> __isset;
5549 
5550  public:
5551 
5552   bool operator==(const struct3&) const;
5553   bool operator<(const struct3&) const;
5554 
5555   template <typename..., typename T = ::std::int32_t>
5556   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldA_ref() const& {
5557     return {this->__fbthrift_field_fieldA, __isset.at(0), __isset.bit(0)};
5558   }
5559 
5560   template <typename..., typename T = ::std::int32_t>
5561   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldA_ref() const&& {
5562     return {static_cast<const T&&>(this->__fbthrift_field_fieldA), __isset.at(0), __isset.bit(0)};
5563   }
5564 
5565   template <typename..., typename T = ::std::int32_t>
5566   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldA_ref() & {
5567     return {this->__fbthrift_field_fieldA, __isset.at(0), __isset.bit(0)};
5568   }
5569 
5570   template <typename..., typename T = ::std::int32_t>
5571   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldA_ref() && {
5572     return {static_cast<T&&>(this->__fbthrift_field_fieldA), __isset.at(0), __isset.bit(0)};
5573   }
5574 
5575   template <typename..., typename T = ::std::int32_t>
5576   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldA() const& {
5577     return {this->__fbthrift_field_fieldA, __isset.at(0), __isset.bit(0)};
5578   }
5579 
5580   template <typename..., typename T = ::std::int32_t>
5581   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldA() const&& {
5582     return {static_cast<const T&&>(this->__fbthrift_field_fieldA), __isset.at(0), __isset.bit(0)};
5583   }
5584 
5585   template <typename..., typename T = ::std::int32_t>
5586   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldA() & {
5587     return {this->__fbthrift_field_fieldA, __isset.at(0), __isset.bit(0)};
5588   }
5589 
5590   template <typename..., typename T = ::std::int32_t>
5591   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldA() && {
5592     return {static_cast<T&&>(this->__fbthrift_field_fieldA), __isset.at(0), __isset.bit(0)};
5593   }
5594 
5595   template <typename..., typename T = ::std::string>
5596   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldB_ref() const& {
5597     return {this->__fbthrift_field_fieldB, __isset.at(1), __isset.bit(1)};
5598   }
5599 
5600   template <typename..., typename T = ::std::string>
5601   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldB_ref() const&& {
5602     return {static_cast<const T&&>(this->__fbthrift_field_fieldB), __isset.at(1), __isset.bit(1)};
5603   }
5604 
5605   template <typename..., typename T = ::std::string>
5606   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldB_ref() & {
5607     return {this->__fbthrift_field_fieldB, __isset.at(1), __isset.bit(1)};
5608   }
5609 
5610   template <typename..., typename T = ::std::string>
5611   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldB_ref() && {
5612     return {static_cast<T&&>(this->__fbthrift_field_fieldB), __isset.at(1), __isset.bit(1)};
5613   }
5614 
5615   template <typename..., typename T = ::std::string>
5616   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldB() const& {
5617     return {this->__fbthrift_field_fieldB, __isset.at(1), __isset.bit(1)};
5618   }
5619 
5620   template <typename..., typename T = ::std::string>
5621   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldB() const&& {
5622     return {static_cast<const T&&>(this->__fbthrift_field_fieldB), __isset.at(1), __isset.bit(1)};
5623   }
5624 
5625   template <typename..., typename T = ::std::string>
5626   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldB() & {
5627     return {this->__fbthrift_field_fieldB, __isset.at(1), __isset.bit(1)};
5628   }
5629 
5630   template <typename..., typename T = ::std::string>
5631   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldB() && {
5632     return {static_cast<T&&>(this->__fbthrift_field_fieldB), __isset.at(1), __isset.bit(1)};
5633   }
5634 
5635   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum1>
5636   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldC_ref() const& {
5637     return {this->__fbthrift_field_fieldC, __isset.at(2), __isset.bit(2)};
5638   }
5639 
5640   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum1>
5641   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldC_ref() const&& {
5642     return {static_cast<const T&&>(this->__fbthrift_field_fieldC), __isset.at(2), __isset.bit(2)};
5643   }
5644 
5645   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum1>
5646   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldC_ref() & {
5647     return {this->__fbthrift_field_fieldC, __isset.at(2), __isset.bit(2)};
5648   }
5649 
5650   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum1>
5651   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldC_ref() && {
5652     return {static_cast<T&&>(this->__fbthrift_field_fieldC), __isset.at(2), __isset.bit(2)};
5653   }
5654 
5655   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum1>
5656   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldC() const& {
5657     return {this->__fbthrift_field_fieldC, __isset.at(2), __isset.bit(2)};
5658   }
5659 
5660   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum1>
5661   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldC() const&& {
5662     return {static_cast<const T&&>(this->__fbthrift_field_fieldC), __isset.at(2), __isset.bit(2)};
5663   }
5664 
5665   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum1>
5666   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldC() & {
5667     return {this->__fbthrift_field_fieldC, __isset.at(2), __isset.bit(2)};
5668   }
5669 
5670   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum1>
5671   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldC() && {
5672     return {static_cast<T&&>(this->__fbthrift_field_fieldC), __isset.at(2), __isset.bit(2)};
5673   }
5674 
5675   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum2>
5676   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldD_ref() const& {
5677     return {this->__fbthrift_field_fieldD, __isset.at(3), __isset.bit(3)};
5678   }
5679 
5680   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum2>
5681   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldD_ref() const&& {
5682     return {static_cast<const T&&>(this->__fbthrift_field_fieldD), __isset.at(3), __isset.bit(3)};
5683   }
5684 
5685   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum2>
5686   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldD_ref() & {
5687     return {this->__fbthrift_field_fieldD, __isset.at(3), __isset.bit(3)};
5688   }
5689 
5690   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum2>
5691   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldD_ref() && {
5692     return {static_cast<T&&>(this->__fbthrift_field_fieldD), __isset.at(3), __isset.bit(3)};
5693   }
5694 
5695   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum2>
5696   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldD() const& {
5697     return {this->__fbthrift_field_fieldD, __isset.at(3), __isset.bit(3)};
5698   }
5699 
5700   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum2>
5701   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldD() const&& {
5702     return {static_cast<const T&&>(this->__fbthrift_field_fieldD), __isset.at(3), __isset.bit(3)};
5703   }
5704 
5705   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum2>
5706   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldD() & {
5707     return {this->__fbthrift_field_fieldD, __isset.at(3), __isset.bit(3)};
5708   }
5709 
5710   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum2>
5711   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldD() && {
5712     return {static_cast<T&&>(this->__fbthrift_field_fieldD), __isset.at(3), __isset.bit(3)};
5713   }
5714 
5715   template <typename..., typename T = ::test_cpp2::cpp_reflection::union1>
5716   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldE_ref() const& {
5717     return {this->__fbthrift_field_fieldE, __isset.at(4), __isset.bit(4)};
5718   }
5719 
5720   template <typename..., typename T = ::test_cpp2::cpp_reflection::union1>
5721   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldE_ref() const&& {
5722     return {static_cast<const T&&>(this->__fbthrift_field_fieldE), __isset.at(4), __isset.bit(4)};
5723   }
5724 
5725   template <typename..., typename T = ::test_cpp2::cpp_reflection::union1>
5726   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldE_ref() & {
5727     return {this->__fbthrift_field_fieldE, __isset.at(4), __isset.bit(4)};
5728   }
5729 
5730   template <typename..., typename T = ::test_cpp2::cpp_reflection::union1>
5731   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldE_ref() && {
5732     return {static_cast<T&&>(this->__fbthrift_field_fieldE), __isset.at(4), __isset.bit(4)};
5733   }
5734 
5735   template <typename..., typename T = ::test_cpp2::cpp_reflection::union1>
5736   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldE() const& {
5737     return {this->__fbthrift_field_fieldE, __isset.at(4), __isset.bit(4)};
5738   }
5739 
5740   template <typename..., typename T = ::test_cpp2::cpp_reflection::union1>
5741   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldE() const&& {
5742     return {static_cast<const T&&>(this->__fbthrift_field_fieldE), __isset.at(4), __isset.bit(4)};
5743   }
5744 
5745   template <typename..., typename T = ::test_cpp2::cpp_reflection::union1>
5746   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldE() & {
5747     return {this->__fbthrift_field_fieldE, __isset.at(4), __isset.bit(4)};
5748   }
5749 
5750   template <typename..., typename T = ::test_cpp2::cpp_reflection::union1>
5751   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldE() && {
5752     return {static_cast<T&&>(this->__fbthrift_field_fieldE), __isset.at(4), __isset.bit(4)};
5753   }
5754 
5755   template <typename..., typename T = ::test_cpp2::cpp_reflection::union2>
5756   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldF_ref() const& {
5757     return {this->__fbthrift_field_fieldF, __isset.at(5), __isset.bit(5)};
5758   }
5759 
5760   template <typename..., typename T = ::test_cpp2::cpp_reflection::union2>
5761   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldF_ref() const&& {
5762     return {static_cast<const T&&>(this->__fbthrift_field_fieldF), __isset.at(5), __isset.bit(5)};
5763   }
5764 
5765   template <typename..., typename T = ::test_cpp2::cpp_reflection::union2>
5766   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldF_ref() & {
5767     return {this->__fbthrift_field_fieldF, __isset.at(5), __isset.bit(5)};
5768   }
5769 
5770   template <typename..., typename T = ::test_cpp2::cpp_reflection::union2>
5771   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldF_ref() && {
5772     return {static_cast<T&&>(this->__fbthrift_field_fieldF), __isset.at(5), __isset.bit(5)};
5773   }
5774 
5775   template <typename..., typename T = ::test_cpp2::cpp_reflection::union2>
5776   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldF() const& {
5777     return {this->__fbthrift_field_fieldF, __isset.at(5), __isset.bit(5)};
5778   }
5779 
5780   template <typename..., typename T = ::test_cpp2::cpp_reflection::union2>
5781   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldF() const&& {
5782     return {static_cast<const T&&>(this->__fbthrift_field_fieldF), __isset.at(5), __isset.bit(5)};
5783   }
5784 
5785   template <typename..., typename T = ::test_cpp2::cpp_reflection::union2>
5786   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldF() & {
5787     return {this->__fbthrift_field_fieldF, __isset.at(5), __isset.bit(5)};
5788   }
5789 
5790   template <typename..., typename T = ::test_cpp2::cpp_reflection::union2>
5791   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldF() && {
5792     return {static_cast<T&&>(this->__fbthrift_field_fieldF), __isset.at(5), __isset.bit(5)};
5793   }
5794 
5795   template <typename..., typename T = ::test_cpp2::cpp_reflection::struct1>
5796   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldG_ref() const& {
5797     return {this->__fbthrift_field_fieldG, __isset.at(6), __isset.bit(6)};
5798   }
5799 
5800   template <typename..., typename T = ::test_cpp2::cpp_reflection::struct1>
5801   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldG_ref() const&& {
5802     return {static_cast<const T&&>(this->__fbthrift_field_fieldG), __isset.at(6), __isset.bit(6)};
5803   }
5804 
5805   template <typename..., typename T = ::test_cpp2::cpp_reflection::struct1>
5806   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldG_ref() & {
5807     return {this->__fbthrift_field_fieldG, __isset.at(6), __isset.bit(6)};
5808   }
5809 
5810   template <typename..., typename T = ::test_cpp2::cpp_reflection::struct1>
5811   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldG_ref() && {
5812     return {static_cast<T&&>(this->__fbthrift_field_fieldG), __isset.at(6), __isset.bit(6)};
5813   }
5814 
5815   template <typename..., typename T = ::test_cpp2::cpp_reflection::struct1>
5816   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldG() const& {
5817     return {this->__fbthrift_field_fieldG, __isset.at(6), __isset.bit(6)};
5818   }
5819 
5820   template <typename..., typename T = ::test_cpp2::cpp_reflection::struct1>
5821   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldG() const&& {
5822     return {static_cast<const T&&>(this->__fbthrift_field_fieldG), __isset.at(6), __isset.bit(6)};
5823   }
5824 
5825   template <typename..., typename T = ::test_cpp2::cpp_reflection::struct1>
5826   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldG() & {
5827     return {this->__fbthrift_field_fieldG, __isset.at(6), __isset.bit(6)};
5828   }
5829 
5830   template <typename..., typename T = ::test_cpp2::cpp_reflection::struct1>
5831   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldG() && {
5832     return {static_cast<T&&>(this->__fbthrift_field_fieldG), __isset.at(6), __isset.bit(6)};
5833   }
5834 
5835   template <typename..., typename T = ::test_cpp2::cpp_reflection::union2>
5836   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldH_ref() const& {
5837     return {this->__fbthrift_field_fieldH, __isset.at(7), __isset.bit(7)};
5838   }
5839 
5840   template <typename..., typename T = ::test_cpp2::cpp_reflection::union2>
5841   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldH_ref() const&& {
5842     return {static_cast<const T&&>(this->__fbthrift_field_fieldH), __isset.at(7), __isset.bit(7)};
5843   }
5844 
5845   template <typename..., typename T = ::test_cpp2::cpp_reflection::union2>
5846   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldH_ref() & {
5847     return {this->__fbthrift_field_fieldH, __isset.at(7), __isset.bit(7)};
5848   }
5849 
5850   template <typename..., typename T = ::test_cpp2::cpp_reflection::union2>
5851   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldH_ref() && {
5852     return {static_cast<T&&>(this->__fbthrift_field_fieldH), __isset.at(7), __isset.bit(7)};
5853   }
5854 
5855   template <typename..., typename T = ::test_cpp2::cpp_reflection::union2>
5856   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldH() const& {
5857     return {this->__fbthrift_field_fieldH, __isset.at(7), __isset.bit(7)};
5858   }
5859 
5860   template <typename..., typename T = ::test_cpp2::cpp_reflection::union2>
5861   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldH() const&& {
5862     return {static_cast<const T&&>(this->__fbthrift_field_fieldH), __isset.at(7), __isset.bit(7)};
5863   }
5864 
5865   template <typename..., typename T = ::test_cpp2::cpp_reflection::union2>
5866   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldH() & {
5867     return {this->__fbthrift_field_fieldH, __isset.at(7), __isset.bit(7)};
5868   }
5869 
5870   template <typename..., typename T = ::test_cpp2::cpp_reflection::union2>
5871   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldH() && {
5872     return {static_cast<T&&>(this->__fbthrift_field_fieldH), __isset.at(7), __isset.bit(7)};
5873   }
5874 
5875   template <typename..., typename T = ::std::vector<::std::int32_t>>
5876   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldI_ref() const& {
5877     return {this->__fbthrift_field_fieldI, __isset.at(8), __isset.bit(8)};
5878   }
5879 
5880   template <typename..., typename T = ::std::vector<::std::int32_t>>
5881   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldI_ref() const&& {
5882     return {static_cast<const T&&>(this->__fbthrift_field_fieldI), __isset.at(8), __isset.bit(8)};
5883   }
5884 
5885   template <typename..., typename T = ::std::vector<::std::int32_t>>
5886   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldI_ref() & {
5887     return {this->__fbthrift_field_fieldI, __isset.at(8), __isset.bit(8)};
5888   }
5889 
5890   template <typename..., typename T = ::std::vector<::std::int32_t>>
5891   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldI_ref() && {
5892     return {static_cast<T&&>(this->__fbthrift_field_fieldI), __isset.at(8), __isset.bit(8)};
5893   }
5894 
5895   template <typename..., typename T = ::std::vector<::std::int32_t>>
5896   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldI() const& {
5897     return {this->__fbthrift_field_fieldI, __isset.at(8), __isset.bit(8)};
5898   }
5899 
5900   template <typename..., typename T = ::std::vector<::std::int32_t>>
5901   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldI() const&& {
5902     return {static_cast<const T&&>(this->__fbthrift_field_fieldI), __isset.at(8), __isset.bit(8)};
5903   }
5904 
5905   template <typename..., typename T = ::std::vector<::std::int32_t>>
5906   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldI() & {
5907     return {this->__fbthrift_field_fieldI, __isset.at(8), __isset.bit(8)};
5908   }
5909 
5910   template <typename..., typename T = ::std::vector<::std::int32_t>>
5911   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldI() && {
5912     return {static_cast<T&&>(this->__fbthrift_field_fieldI), __isset.at(8), __isset.bit(8)};
5913   }
5914 
5915   template <typename..., typename T = ::std::vector<::std::string>>
5916   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldJ_ref() const& {
5917     return {this->__fbthrift_field_fieldJ, __isset.at(9), __isset.bit(9)};
5918   }
5919 
5920   template <typename..., typename T = ::std::vector<::std::string>>
5921   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldJ_ref() const&& {
5922     return {static_cast<const T&&>(this->__fbthrift_field_fieldJ), __isset.at(9), __isset.bit(9)};
5923   }
5924 
5925   template <typename..., typename T = ::std::vector<::std::string>>
5926   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldJ_ref() & {
5927     return {this->__fbthrift_field_fieldJ, __isset.at(9), __isset.bit(9)};
5928   }
5929 
5930   template <typename..., typename T = ::std::vector<::std::string>>
5931   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldJ_ref() && {
5932     return {static_cast<T&&>(this->__fbthrift_field_fieldJ), __isset.at(9), __isset.bit(9)};
5933   }
5934 
5935   template <typename..., typename T = ::std::vector<::std::string>>
5936   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldJ() const& {
5937     return {this->__fbthrift_field_fieldJ, __isset.at(9), __isset.bit(9)};
5938   }
5939 
5940   template <typename..., typename T = ::std::vector<::std::string>>
5941   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldJ() const&& {
5942     return {static_cast<const T&&>(this->__fbthrift_field_fieldJ), __isset.at(9), __isset.bit(9)};
5943   }
5944 
5945   template <typename..., typename T = ::std::vector<::std::string>>
5946   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldJ() & {
5947     return {this->__fbthrift_field_fieldJ, __isset.at(9), __isset.bit(9)};
5948   }
5949 
5950   template <typename..., typename T = ::std::vector<::std::string>>
5951   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldJ() && {
5952     return {static_cast<T&&>(this->__fbthrift_field_fieldJ), __isset.at(9), __isset.bit(9)};
5953   }
5954 
5955   template <typename..., typename T = ::std::vector<::std::string>>
5956   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldK_ref() const& {
5957     return {this->__fbthrift_field_fieldK, __isset.at(10), __isset.bit(10)};
5958   }
5959 
5960   template <typename..., typename T = ::std::vector<::std::string>>
5961   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldK_ref() const&& {
5962     return {static_cast<const T&&>(this->__fbthrift_field_fieldK), __isset.at(10), __isset.bit(10)};
5963   }
5964 
5965   template <typename..., typename T = ::std::vector<::std::string>>
5966   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldK_ref() & {
5967     return {this->__fbthrift_field_fieldK, __isset.at(10), __isset.bit(10)};
5968   }
5969 
5970   template <typename..., typename T = ::std::vector<::std::string>>
5971   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldK_ref() && {
5972     return {static_cast<T&&>(this->__fbthrift_field_fieldK), __isset.at(10), __isset.bit(10)};
5973   }
5974 
5975   template <typename..., typename T = ::std::vector<::std::string>>
5976   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldK() const& {
5977     return {this->__fbthrift_field_fieldK, __isset.at(10), __isset.bit(10)};
5978   }
5979 
5980   template <typename..., typename T = ::std::vector<::std::string>>
5981   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldK() const&& {
5982     return {static_cast<const T&&>(this->__fbthrift_field_fieldK), __isset.at(10), __isset.bit(10)};
5983   }
5984 
5985   template <typename..., typename T = ::std::vector<::std::string>>
5986   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldK() & {
5987     return {this->__fbthrift_field_fieldK, __isset.at(10), __isset.bit(10)};
5988   }
5989 
5990   template <typename..., typename T = ::std::vector<::std::string>>
5991   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldK() && {
5992     return {static_cast<T&&>(this->__fbthrift_field_fieldK), __isset.at(10), __isset.bit(10)};
5993   }
5994 
5995   template <typename..., typename T = ::std::vector<::test_cpp2::cpp_reflection::structA>>
5996   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldL_ref() const& {
5997     return {this->__fbthrift_field_fieldL, __isset.at(11), __isset.bit(11)};
5998   }
5999 
6000   template <typename..., typename T = ::std::vector<::test_cpp2::cpp_reflection::structA>>
6001   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldL_ref() const&& {
6002     return {static_cast<const T&&>(this->__fbthrift_field_fieldL), __isset.at(11), __isset.bit(11)};
6003   }
6004 
6005   template <typename..., typename T = ::std::vector<::test_cpp2::cpp_reflection::structA>>
6006   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldL_ref() & {
6007     return {this->__fbthrift_field_fieldL, __isset.at(11), __isset.bit(11)};
6008   }
6009 
6010   template <typename..., typename T = ::std::vector<::test_cpp2::cpp_reflection::structA>>
6011   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldL_ref() && {
6012     return {static_cast<T&&>(this->__fbthrift_field_fieldL), __isset.at(11), __isset.bit(11)};
6013   }
6014 
6015   template <typename..., typename T = ::std::vector<::test_cpp2::cpp_reflection::structA>>
6016   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldL() const& {
6017     return {this->__fbthrift_field_fieldL, __isset.at(11), __isset.bit(11)};
6018   }
6019 
6020   template <typename..., typename T = ::std::vector<::test_cpp2::cpp_reflection::structA>>
6021   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldL() const&& {
6022     return {static_cast<const T&&>(this->__fbthrift_field_fieldL), __isset.at(11), __isset.bit(11)};
6023   }
6024 
6025   template <typename..., typename T = ::std::vector<::test_cpp2::cpp_reflection::structA>>
6026   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldL() & {
6027     return {this->__fbthrift_field_fieldL, __isset.at(11), __isset.bit(11)};
6028   }
6029 
6030   template <typename..., typename T = ::std::vector<::test_cpp2::cpp_reflection::structA>>
6031   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldL() && {
6032     return {static_cast<T&&>(this->__fbthrift_field_fieldL), __isset.at(11), __isset.bit(11)};
6033   }
6034 
6035   template <typename..., typename T = ::std::set<::std::int32_t>>
6036   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldM_ref() const& {
6037     return {this->__fbthrift_field_fieldM, __isset.at(12), __isset.bit(12)};
6038   }
6039 
6040   template <typename..., typename T = ::std::set<::std::int32_t>>
6041   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldM_ref() const&& {
6042     return {static_cast<const T&&>(this->__fbthrift_field_fieldM), __isset.at(12), __isset.bit(12)};
6043   }
6044 
6045   template <typename..., typename T = ::std::set<::std::int32_t>>
6046   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldM_ref() & {
6047     return {this->__fbthrift_field_fieldM, __isset.at(12), __isset.bit(12)};
6048   }
6049 
6050   template <typename..., typename T = ::std::set<::std::int32_t>>
6051   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldM_ref() && {
6052     return {static_cast<T&&>(this->__fbthrift_field_fieldM), __isset.at(12), __isset.bit(12)};
6053   }
6054 
6055   template <typename..., typename T = ::std::set<::std::int32_t>>
6056   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldM() const& {
6057     return {this->__fbthrift_field_fieldM, __isset.at(12), __isset.bit(12)};
6058   }
6059 
6060   template <typename..., typename T = ::std::set<::std::int32_t>>
6061   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldM() const&& {
6062     return {static_cast<const T&&>(this->__fbthrift_field_fieldM), __isset.at(12), __isset.bit(12)};
6063   }
6064 
6065   template <typename..., typename T = ::std::set<::std::int32_t>>
6066   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldM() & {
6067     return {this->__fbthrift_field_fieldM, __isset.at(12), __isset.bit(12)};
6068   }
6069 
6070   template <typename..., typename T = ::std::set<::std::int32_t>>
6071   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldM() && {
6072     return {static_cast<T&&>(this->__fbthrift_field_fieldM), __isset.at(12), __isset.bit(12)};
6073   }
6074 
6075   template <typename..., typename T = ::std::set<::std::string>>
6076   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldN_ref() const& {
6077     return {this->__fbthrift_field_fieldN, __isset.at(13), __isset.bit(13)};
6078   }
6079 
6080   template <typename..., typename T = ::std::set<::std::string>>
6081   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldN_ref() const&& {
6082     return {static_cast<const T&&>(this->__fbthrift_field_fieldN), __isset.at(13), __isset.bit(13)};
6083   }
6084 
6085   template <typename..., typename T = ::std::set<::std::string>>
6086   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldN_ref() & {
6087     return {this->__fbthrift_field_fieldN, __isset.at(13), __isset.bit(13)};
6088   }
6089 
6090   template <typename..., typename T = ::std::set<::std::string>>
6091   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldN_ref() && {
6092     return {static_cast<T&&>(this->__fbthrift_field_fieldN), __isset.at(13), __isset.bit(13)};
6093   }
6094 
6095   template <typename..., typename T = ::std::set<::std::string>>
6096   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldN() const& {
6097     return {this->__fbthrift_field_fieldN, __isset.at(13), __isset.bit(13)};
6098   }
6099 
6100   template <typename..., typename T = ::std::set<::std::string>>
6101   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldN() const&& {
6102     return {static_cast<const T&&>(this->__fbthrift_field_fieldN), __isset.at(13), __isset.bit(13)};
6103   }
6104 
6105   template <typename..., typename T = ::std::set<::std::string>>
6106   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldN() & {
6107     return {this->__fbthrift_field_fieldN, __isset.at(13), __isset.bit(13)};
6108   }
6109 
6110   template <typename..., typename T = ::std::set<::std::string>>
6111   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldN() && {
6112     return {static_cast<T&&>(this->__fbthrift_field_fieldN), __isset.at(13), __isset.bit(13)};
6113   }
6114 
6115   template <typename..., typename T = ::std::set<::std::string>>
6116   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldO_ref() const& {
6117     return {this->__fbthrift_field_fieldO, __isset.at(14), __isset.bit(14)};
6118   }
6119 
6120   template <typename..., typename T = ::std::set<::std::string>>
6121   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldO_ref() const&& {
6122     return {static_cast<const T&&>(this->__fbthrift_field_fieldO), __isset.at(14), __isset.bit(14)};
6123   }
6124 
6125   template <typename..., typename T = ::std::set<::std::string>>
6126   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldO_ref() & {
6127     return {this->__fbthrift_field_fieldO, __isset.at(14), __isset.bit(14)};
6128   }
6129 
6130   template <typename..., typename T = ::std::set<::std::string>>
6131   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldO_ref() && {
6132     return {static_cast<T&&>(this->__fbthrift_field_fieldO), __isset.at(14), __isset.bit(14)};
6133   }
6134 
6135   template <typename..., typename T = ::std::set<::std::string>>
6136   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldO() const& {
6137     return {this->__fbthrift_field_fieldO, __isset.at(14), __isset.bit(14)};
6138   }
6139 
6140   template <typename..., typename T = ::std::set<::std::string>>
6141   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldO() const&& {
6142     return {static_cast<const T&&>(this->__fbthrift_field_fieldO), __isset.at(14), __isset.bit(14)};
6143   }
6144 
6145   template <typename..., typename T = ::std::set<::std::string>>
6146   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldO() & {
6147     return {this->__fbthrift_field_fieldO, __isset.at(14), __isset.bit(14)};
6148   }
6149 
6150   template <typename..., typename T = ::std::set<::std::string>>
6151   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldO() && {
6152     return {static_cast<T&&>(this->__fbthrift_field_fieldO), __isset.at(14), __isset.bit(14)};
6153   }
6154 
6155   template <typename..., typename T = ::std::set<::test_cpp2::cpp_reflection::structB>>
6156   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldP_ref() const& {
6157     return {this->__fbthrift_field_fieldP, __isset.at(15), __isset.bit(15)};
6158   }
6159 
6160   template <typename..., typename T = ::std::set<::test_cpp2::cpp_reflection::structB>>
6161   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldP_ref() const&& {
6162     return {static_cast<const T&&>(this->__fbthrift_field_fieldP), __isset.at(15), __isset.bit(15)};
6163   }
6164 
6165   template <typename..., typename T = ::std::set<::test_cpp2::cpp_reflection::structB>>
6166   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldP_ref() & {
6167     return {this->__fbthrift_field_fieldP, __isset.at(15), __isset.bit(15)};
6168   }
6169 
6170   template <typename..., typename T = ::std::set<::test_cpp2::cpp_reflection::structB>>
6171   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldP_ref() && {
6172     return {static_cast<T&&>(this->__fbthrift_field_fieldP), __isset.at(15), __isset.bit(15)};
6173   }
6174 
6175   template <typename..., typename T = ::std::set<::test_cpp2::cpp_reflection::structB>>
6176   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldP() const& {
6177     return {this->__fbthrift_field_fieldP, __isset.at(15), __isset.bit(15)};
6178   }
6179 
6180   template <typename..., typename T = ::std::set<::test_cpp2::cpp_reflection::structB>>
6181   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldP() const&& {
6182     return {static_cast<const T&&>(this->__fbthrift_field_fieldP), __isset.at(15), __isset.bit(15)};
6183   }
6184 
6185   template <typename..., typename T = ::std::set<::test_cpp2::cpp_reflection::structB>>
6186   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldP() & {
6187     return {this->__fbthrift_field_fieldP, __isset.at(15), __isset.bit(15)};
6188   }
6189 
6190   template <typename..., typename T = ::std::set<::test_cpp2::cpp_reflection::structB>>
6191   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldP() && {
6192     return {static_cast<T&&>(this->__fbthrift_field_fieldP), __isset.at(15), __isset.bit(15)};
6193   }
6194 
6195   template <typename..., typename T = ::std::map<::std::string, ::test_cpp2::cpp_reflection::structA>>
6196   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldQ_ref() const& {
6197     return {this->__fbthrift_field_fieldQ, __isset.at(16), __isset.bit(16)};
6198   }
6199 
6200   template <typename..., typename T = ::std::map<::std::string, ::test_cpp2::cpp_reflection::structA>>
6201   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldQ_ref() const&& {
6202     return {static_cast<const T&&>(this->__fbthrift_field_fieldQ), __isset.at(16), __isset.bit(16)};
6203   }
6204 
6205   template <typename..., typename T = ::std::map<::std::string, ::test_cpp2::cpp_reflection::structA>>
6206   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldQ_ref() & {
6207     return {this->__fbthrift_field_fieldQ, __isset.at(16), __isset.bit(16)};
6208   }
6209 
6210   template <typename..., typename T = ::std::map<::std::string, ::test_cpp2::cpp_reflection::structA>>
6211   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldQ_ref() && {
6212     return {static_cast<T&&>(this->__fbthrift_field_fieldQ), __isset.at(16), __isset.bit(16)};
6213   }
6214 
6215   template <typename..., typename T = ::std::map<::std::string, ::test_cpp2::cpp_reflection::structA>>
6216   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldQ() const& {
6217     return {this->__fbthrift_field_fieldQ, __isset.at(16), __isset.bit(16)};
6218   }
6219 
6220   template <typename..., typename T = ::std::map<::std::string, ::test_cpp2::cpp_reflection::structA>>
6221   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldQ() const&& {
6222     return {static_cast<const T&&>(this->__fbthrift_field_fieldQ), __isset.at(16), __isset.bit(16)};
6223   }
6224 
6225   template <typename..., typename T = ::std::map<::std::string, ::test_cpp2::cpp_reflection::structA>>
6226   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldQ() & {
6227     return {this->__fbthrift_field_fieldQ, __isset.at(16), __isset.bit(16)};
6228   }
6229 
6230   template <typename..., typename T = ::std::map<::std::string, ::test_cpp2::cpp_reflection::structA>>
6231   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldQ() && {
6232     return {static_cast<T&&>(this->__fbthrift_field_fieldQ), __isset.at(16), __isset.bit(16)};
6233   }
6234 
6235   template <typename..., typename T = ::std::map<::std::string, ::test_cpp2::cpp_reflection::structB>>
6236   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldR_ref() const& {
6237     return {this->__fbthrift_field_fieldR, __isset.at(17), __isset.bit(17)};
6238   }
6239 
6240   template <typename..., typename T = ::std::map<::std::string, ::test_cpp2::cpp_reflection::structB>>
6241   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldR_ref() const&& {
6242     return {static_cast<const T&&>(this->__fbthrift_field_fieldR), __isset.at(17), __isset.bit(17)};
6243   }
6244 
6245   template <typename..., typename T = ::std::map<::std::string, ::test_cpp2::cpp_reflection::structB>>
6246   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldR_ref() & {
6247     return {this->__fbthrift_field_fieldR, __isset.at(17), __isset.bit(17)};
6248   }
6249 
6250   template <typename..., typename T = ::std::map<::std::string, ::test_cpp2::cpp_reflection::structB>>
6251   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldR_ref() && {
6252     return {static_cast<T&&>(this->__fbthrift_field_fieldR), __isset.at(17), __isset.bit(17)};
6253   }
6254 
6255   template <typename..., typename T = ::std::map<::std::string, ::test_cpp2::cpp_reflection::structB>>
6256   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldR() const& {
6257     return {this->__fbthrift_field_fieldR, __isset.at(17), __isset.bit(17)};
6258   }
6259 
6260   template <typename..., typename T = ::std::map<::std::string, ::test_cpp2::cpp_reflection::structB>>
6261   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldR() const&& {
6262     return {static_cast<const T&&>(this->__fbthrift_field_fieldR), __isset.at(17), __isset.bit(17)};
6263   }
6264 
6265   template <typename..., typename T = ::std::map<::std::string, ::test_cpp2::cpp_reflection::structB>>
6266   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldR() & {
6267     return {this->__fbthrift_field_fieldR, __isset.at(17), __isset.bit(17)};
6268   }
6269 
6270   template <typename..., typename T = ::std::map<::std::string, ::test_cpp2::cpp_reflection::structB>>
6271   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldR() && {
6272     return {static_cast<T&&>(this->__fbthrift_field_fieldR), __isset.at(17), __isset.bit(17)};
6273   }
6274 
6275   ::std::int32_t get_fieldA() const {
6276     return __fbthrift_field_fieldA;
6277   }
6278 
6279   [[deprecated("Use `FOO.fieldA_ref() = BAR;` instead of `FOO.set_fieldA(BAR);`")]]
6280   ::std::int32_t& set_fieldA(::std::int32_t fieldA_) {
6281     fieldA_ref() = fieldA_;
6282     return __fbthrift_field_fieldA;
6283   }
6284 
6285   const ::std::string& get_fieldB() const& {
6286     return __fbthrift_field_fieldB;
6287   }
6288 
6289   ::std::string get_fieldB() && {
6290     return std::move(__fbthrift_field_fieldB);
6291   }
6292 
6293   template <typename T_struct3_fieldB_struct_setter = ::std::string>
6294   [[deprecated("Use `FOO.fieldB_ref() = BAR;` instead of `FOO.set_fieldB(BAR);`")]]
6295   ::std::string& set_fieldB(T_struct3_fieldB_struct_setter&& fieldB_) {
6296     fieldB_ref() = std::forward<T_struct3_fieldB_struct_setter>(fieldB_);
6297     return __fbthrift_field_fieldB;
6298   }
6299 
6300   ::test_cpp2::cpp_reflection::enum1 get_fieldC() const {
6301     return __fbthrift_field_fieldC;
6302   }
6303 
6304   [[deprecated("Use `FOO.fieldC_ref() = BAR;` instead of `FOO.set_fieldC(BAR);`")]]
6305   ::test_cpp2::cpp_reflection::enum1& set_fieldC(::test_cpp2::cpp_reflection::enum1 fieldC_) {
6306     fieldC_ref() = fieldC_;
6307     return __fbthrift_field_fieldC;
6308   }
6309 
6310   ::test_cpp2::cpp_reflection::enum2 get_fieldD() const {
6311     return __fbthrift_field_fieldD;
6312   }
6313 
6314   [[deprecated("Use `FOO.fieldD_ref() = BAR;` instead of `FOO.set_fieldD(BAR);`")]]
6315   ::test_cpp2::cpp_reflection::enum2& set_fieldD(::test_cpp2::cpp_reflection::enum2 fieldD_) {
6316     fieldD_ref() = fieldD_;
6317     return __fbthrift_field_fieldD;
6318   }
6319   const ::test_cpp2::cpp_reflection::union1& get_fieldE() const&;
6320   ::test_cpp2::cpp_reflection::union1 get_fieldE() &&;
6321 
6322   template <typename T_struct3_fieldE_struct_setter = ::test_cpp2::cpp_reflection::union1>
6323   [[deprecated("Use `FOO.fieldE_ref() = BAR;` instead of `FOO.set_fieldE(BAR);`")]]
6324   ::test_cpp2::cpp_reflection::union1& set_fieldE(T_struct3_fieldE_struct_setter&& fieldE_) {
6325     fieldE_ref() = std::forward<T_struct3_fieldE_struct_setter>(fieldE_);
6326     return __fbthrift_field_fieldE;
6327   }
6328   const ::test_cpp2::cpp_reflection::union2& get_fieldF() const&;
6329   ::test_cpp2::cpp_reflection::union2 get_fieldF() &&;
6330 
6331   template <typename T_struct3_fieldF_struct_setter = ::test_cpp2::cpp_reflection::union2>
6332   [[deprecated("Use `FOO.fieldF_ref() = BAR;` instead of `FOO.set_fieldF(BAR);`")]]
6333   ::test_cpp2::cpp_reflection::union2& set_fieldF(T_struct3_fieldF_struct_setter&& fieldF_) {
6334     fieldF_ref() = std::forward<T_struct3_fieldF_struct_setter>(fieldF_);
6335     return __fbthrift_field_fieldF;
6336   }
6337   const ::test_cpp2::cpp_reflection::struct1& get_fieldG() const&;
6338   ::test_cpp2::cpp_reflection::struct1 get_fieldG() &&;
6339 
6340   template <typename T_struct3_fieldG_struct_setter = ::test_cpp2::cpp_reflection::struct1>
6341   [[deprecated("Use `FOO.fieldG_ref() = BAR;` instead of `FOO.set_fieldG(BAR);`")]]
6342   ::test_cpp2::cpp_reflection::struct1& set_fieldG(T_struct3_fieldG_struct_setter&& fieldG_) {
6343     fieldG_ref() = std::forward<T_struct3_fieldG_struct_setter>(fieldG_);
6344     return __fbthrift_field_fieldG;
6345   }
6346   const ::test_cpp2::cpp_reflection::union2& get_fieldH() const&;
6347   ::test_cpp2::cpp_reflection::union2 get_fieldH() &&;
6348 
6349   template <typename T_struct3_fieldH_struct_setter = ::test_cpp2::cpp_reflection::union2>
6350   [[deprecated("Use `FOO.fieldH_ref() = BAR;` instead of `FOO.set_fieldH(BAR);`")]]
6351   ::test_cpp2::cpp_reflection::union2& set_fieldH(T_struct3_fieldH_struct_setter&& fieldH_) {
6352     fieldH_ref() = std::forward<T_struct3_fieldH_struct_setter>(fieldH_);
6353     return __fbthrift_field_fieldH;
6354   }
6355   const ::std::vector<::std::int32_t>& get_fieldI() const&;
6356   ::std::vector<::std::int32_t> get_fieldI() &&;
6357 
6358   template <typename T_struct3_fieldI_struct_setter = ::std::vector<::std::int32_t>>
6359   [[deprecated("Use `FOO.fieldI_ref() = BAR;` instead of `FOO.set_fieldI(BAR);`")]]
6360   ::std::vector<::std::int32_t>& set_fieldI(T_struct3_fieldI_struct_setter&& fieldI_) {
6361     fieldI_ref() = std::forward<T_struct3_fieldI_struct_setter>(fieldI_);
6362     return __fbthrift_field_fieldI;
6363   }
6364   const ::std::vector<::std::string>& get_fieldJ() const&;
6365   ::std::vector<::std::string> get_fieldJ() &&;
6366 
6367   template <typename T_struct3_fieldJ_struct_setter = ::std::vector<::std::string>>
6368   [[deprecated("Use `FOO.fieldJ_ref() = BAR;` instead of `FOO.set_fieldJ(BAR);`")]]
6369   ::std::vector<::std::string>& set_fieldJ(T_struct3_fieldJ_struct_setter&& fieldJ_) {
6370     fieldJ_ref() = std::forward<T_struct3_fieldJ_struct_setter>(fieldJ_);
6371     return __fbthrift_field_fieldJ;
6372   }
6373   const ::std::vector<::std::string>& get_fieldK() const&;
6374   ::std::vector<::std::string> get_fieldK() &&;
6375 
6376   template <typename T_struct3_fieldK_struct_setter = ::std::vector<::std::string>>
6377   [[deprecated("Use `FOO.fieldK_ref() = BAR;` instead of `FOO.set_fieldK(BAR);`")]]
6378   ::std::vector<::std::string>& set_fieldK(T_struct3_fieldK_struct_setter&& fieldK_) {
6379     fieldK_ref() = std::forward<T_struct3_fieldK_struct_setter>(fieldK_);
6380     return __fbthrift_field_fieldK;
6381   }
6382   const ::std::vector<::test_cpp2::cpp_reflection::structA>& get_fieldL() const&;
6383   ::std::vector<::test_cpp2::cpp_reflection::structA> get_fieldL() &&;
6384 
6385   template <typename T_struct3_fieldL_struct_setter = ::std::vector<::test_cpp2::cpp_reflection::structA>>
6386   [[deprecated("Use `FOO.fieldL_ref() = BAR;` instead of `FOO.set_fieldL(BAR);`")]]
6387   ::std::vector<::test_cpp2::cpp_reflection::structA>& set_fieldL(T_struct3_fieldL_struct_setter&& fieldL_) {
6388     fieldL_ref() = std::forward<T_struct3_fieldL_struct_setter>(fieldL_);
6389     return __fbthrift_field_fieldL;
6390   }
6391   const ::std::set<::std::int32_t>& get_fieldM() const&;
6392   ::std::set<::std::int32_t> get_fieldM() &&;
6393 
6394   template <typename T_struct3_fieldM_struct_setter = ::std::set<::std::int32_t>>
6395   [[deprecated("Use `FOO.fieldM_ref() = BAR;` instead of `FOO.set_fieldM(BAR);`")]]
6396   ::std::set<::std::int32_t>& set_fieldM(T_struct3_fieldM_struct_setter&& fieldM_) {
6397     fieldM_ref() = std::forward<T_struct3_fieldM_struct_setter>(fieldM_);
6398     return __fbthrift_field_fieldM;
6399   }
6400   const ::std::set<::std::string>& get_fieldN() const&;
6401   ::std::set<::std::string> get_fieldN() &&;
6402 
6403   template <typename T_struct3_fieldN_struct_setter = ::std::set<::std::string>>
6404   [[deprecated("Use `FOO.fieldN_ref() = BAR;` instead of `FOO.set_fieldN(BAR);`")]]
6405   ::std::set<::std::string>& set_fieldN(T_struct3_fieldN_struct_setter&& fieldN_) {
6406     fieldN_ref() = std::forward<T_struct3_fieldN_struct_setter>(fieldN_);
6407     return __fbthrift_field_fieldN;
6408   }
6409   const ::std::set<::std::string>& get_fieldO() const&;
6410   ::std::set<::std::string> get_fieldO() &&;
6411 
6412   template <typename T_struct3_fieldO_struct_setter = ::std::set<::std::string>>
6413   [[deprecated("Use `FOO.fieldO_ref() = BAR;` instead of `FOO.set_fieldO(BAR);`")]]
6414   ::std::set<::std::string>& set_fieldO(T_struct3_fieldO_struct_setter&& fieldO_) {
6415     fieldO_ref() = std::forward<T_struct3_fieldO_struct_setter>(fieldO_);
6416     return __fbthrift_field_fieldO;
6417   }
6418   const ::std::set<::test_cpp2::cpp_reflection::structB>& get_fieldP() const&;
6419   ::std::set<::test_cpp2::cpp_reflection::structB> get_fieldP() &&;
6420 
6421   template <typename T_struct3_fieldP_struct_setter = ::std::set<::test_cpp2::cpp_reflection::structB>>
6422   [[deprecated("Use `FOO.fieldP_ref() = BAR;` instead of `FOO.set_fieldP(BAR);`")]]
6423   ::std::set<::test_cpp2::cpp_reflection::structB>& set_fieldP(T_struct3_fieldP_struct_setter&& fieldP_) {
6424     fieldP_ref() = std::forward<T_struct3_fieldP_struct_setter>(fieldP_);
6425     return __fbthrift_field_fieldP;
6426   }
6427   const ::std::map<::std::string, ::test_cpp2::cpp_reflection::structA>& get_fieldQ() const&;
6428   ::std::map<::std::string, ::test_cpp2::cpp_reflection::structA> get_fieldQ() &&;
6429 
6430   template <typename T_struct3_fieldQ_struct_setter = ::std::map<::std::string, ::test_cpp2::cpp_reflection::structA>>
6431   [[deprecated("Use `FOO.fieldQ_ref() = BAR;` instead of `FOO.set_fieldQ(BAR);`")]]
6432   ::std::map<::std::string, ::test_cpp2::cpp_reflection::structA>& set_fieldQ(T_struct3_fieldQ_struct_setter&& fieldQ_) {
6433     fieldQ_ref() = std::forward<T_struct3_fieldQ_struct_setter>(fieldQ_);
6434     return __fbthrift_field_fieldQ;
6435   }
6436   const ::std::map<::std::string, ::test_cpp2::cpp_reflection::structB>& get_fieldR() const&;
6437   ::std::map<::std::string, ::test_cpp2::cpp_reflection::structB> get_fieldR() &&;
6438 
6439   template <typename T_struct3_fieldR_struct_setter = ::std::map<::std::string, ::test_cpp2::cpp_reflection::structB>>
6440   [[deprecated("Use `FOO.fieldR_ref() = BAR;` instead of `FOO.set_fieldR(BAR);`")]]
6441   ::std::map<::std::string, ::test_cpp2::cpp_reflection::structB>& set_fieldR(T_struct3_fieldR_struct_setter&& fieldR_) {
6442     fieldR_ref() = std::forward<T_struct3_fieldR_struct_setter>(fieldR_);
6443     return __fbthrift_field_fieldR;
6444   }
6445 
6446   template <class Protocol_>
6447   uint32_t read(Protocol_* iprot);
6448   template <class Protocol_>
6449   uint32_t serializedSize(Protocol_ const* prot_) const;
6450   template <class Protocol_>
6451   uint32_t serializedSizeZC(Protocol_ const* prot_) const;
6452   template <class Protocol_>
6453   uint32_t write(Protocol_* prot_) const;
6454 
6455  private:
6456   template <class Protocol_>
6457   void readNoXfer(Protocol_* iprot);
6458 
6459   friend class ::apache::thrift::Cpp2Ops<struct3>;
6460   friend void swap(struct3& a, struct3& b);
6461 };
6462 
6463 template <class Protocol_>
6464 uint32_t struct3::read(Protocol_* iprot) {
6465   auto _xferStart = iprot->getCursorPosition();
6466   readNoXfer(iprot);
6467   return iprot->getCursorPosition() - _xferStart;
6468 }
6469 
6470 }} // test_cpp2::cpp_reflection
6471 namespace test_cpp2 { namespace cpp_reflection {
6472 class struct4 final  {
6473  private:
6474   friend struct ::apache::thrift::detail::st::struct_private_access;
6475 
6476   //  used by a static_assert in the corresponding source
6477   static constexpr bool __fbthrift_cpp2_gen_json = false;
6478   static constexpr bool __fbthrift_cpp2_gen_nimble = false;
6479   static constexpr bool __fbthrift_cpp2_gen_has_thrift_uri = false;
6480 
6481   void __fbthrift_clear();
6482 
6483  public:
6484   using __fbthrift_cpp2_type = struct4;
6485   static constexpr bool __fbthrift_cpp2_is_union =
6486     false;
6487 
6488 
6489  public:
6490 
6491   struct4() :
6492       field0(),
6493       __fbthrift_field_field2(),
6494       field3(std::make_unique<::test_cpp2::cpp_reflection::structA>()) {
6495   }
6496   // FragileConstructor for use in initialization lists only.
6497   [[deprecated("This constructor is deprecated")]]
6498   struct4(apache::thrift::FragileConstructor, ::std::int32_t field0__arg, ::std::string field1__arg, ::test_cpp2::cpp_reflection::enum1 field2__arg, ::std::unique_ptr<::test_cpp2::cpp_reflection::structA> field3__arg);
6499 
6500   struct4(struct4&&) noexcept;
6501   struct4(const struct4& src);
6502 
6503 
6504   struct4& operator=(struct4&&) noexcept;
6505   struct4& operator=(const struct4& src);
6506  public:
6507   ::std::int32_t field0;
6508  private:
6509   ::std::string __fbthrift_field_field1;
6510  private:
6511   ::test_cpp2::cpp_reflection::enum1 __fbthrift_field_field2;
6512  public:
6513   ::std::unique_ptr<::test_cpp2::cpp_reflection::structA> field3;
6514  private:
6515   apache::thrift::detail::isset_bitset<2, false> __isset;
6516 
6517  public:
6518 
6519   bool operator==(const struct4&) const;
6520   bool operator<(const struct4&) const;
6521 
6522   template <typename..., typename T = ::std::int32_t>
6523   FOLLY_ERASE ::apache::thrift::required_field_ref<const T&> field0_ref() const& {
6524     return ::apache::thrift::required_field_ref<const T&>{this->field0};
6525   }
6526 
6527   template <typename..., typename T = ::std::int32_t>
6528   FOLLY_ERASE ::apache::thrift::required_field_ref<const T&&> field0_ref() const&& {
6529     return ::apache::thrift::required_field_ref<const T&&>{static_cast<const T&&>(this->field0)};
6530   }
6531 
6532   template <typename..., typename T = ::std::int32_t>
6533   FOLLY_ERASE ::apache::thrift::required_field_ref<T&> field0_ref() & {
6534     return ::apache::thrift::required_field_ref<T&>{this->field0};
6535   }
6536 
6537   template <typename..., typename T = ::std::int32_t>
6538   FOLLY_ERASE ::apache::thrift::required_field_ref<T&&> field0_ref() && {
6539     return ::apache::thrift::required_field_ref<T&&>{static_cast<T&&>(this->field0)};
6540   }
6541 
6542   template <typename..., typename T = ::std::string>
6543   FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> field1_ref() const& {
6544     return {this->__fbthrift_field_field1, __isset.at(0), __isset.bit(0)};
6545   }
6546 
6547   template <typename..., typename T = ::std::string>
6548   FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> field1_ref() const&& {
6549     return {static_cast<const T&&>(this->__fbthrift_field_field1), __isset.at(0), __isset.bit(0)};
6550   }
6551 
6552   template <typename..., typename T = ::std::string>
6553   FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> field1_ref() & {
6554     return {this->__fbthrift_field_field1, __isset.at(0), __isset.bit(0)};
6555   }
6556 
6557   template <typename..., typename T = ::std::string>
6558   FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> field1_ref() && {
6559     return {static_cast<T&&>(this->__fbthrift_field_field1), __isset.at(0), __isset.bit(0)};
6560   }
6561 
6562   template <typename..., typename T = ::std::string>
6563   FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> field1() const& {
6564     return {this->__fbthrift_field_field1, __isset.at(0), __isset.bit(0)};
6565   }
6566 
6567   template <typename..., typename T = ::std::string>
6568   FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> field1() const&& {
6569     return {static_cast<const T&&>(this->__fbthrift_field_field1), __isset.at(0), __isset.bit(0)};
6570   }
6571 
6572   template <typename..., typename T = ::std::string>
6573   FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> field1() & {
6574     return {this->__fbthrift_field_field1, __isset.at(0), __isset.bit(0)};
6575   }
6576 
6577   template <typename..., typename T = ::std::string>
6578   FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> field1() && {
6579     return {static_cast<T&&>(this->__fbthrift_field_field1), __isset.at(0), __isset.bit(0)};
6580   }
6581 
6582   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum1>
6583   FOLLY_ERASE ::apache::thrift::field_ref<const T&> field2_ref() const& {
6584     return {this->__fbthrift_field_field2, __isset.at(1), __isset.bit(1)};
6585   }
6586 
6587   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum1>
6588   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> field2_ref() const&& {
6589     return {static_cast<const T&&>(this->__fbthrift_field_field2), __isset.at(1), __isset.bit(1)};
6590   }
6591 
6592   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum1>
6593   FOLLY_ERASE ::apache::thrift::field_ref<T&> field2_ref() & {
6594     return {this->__fbthrift_field_field2, __isset.at(1), __isset.bit(1)};
6595   }
6596 
6597   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum1>
6598   FOLLY_ERASE ::apache::thrift::field_ref<T&&> field2_ref() && {
6599     return {static_cast<T&&>(this->__fbthrift_field_field2), __isset.at(1), __isset.bit(1)};
6600   }
6601 
6602   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum1>
6603   FOLLY_ERASE ::apache::thrift::field_ref<const T&> field2() const& {
6604     return {this->__fbthrift_field_field2, __isset.at(1), __isset.bit(1)};
6605   }
6606 
6607   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum1>
6608   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> field2() const&& {
6609     return {static_cast<const T&&>(this->__fbthrift_field_field2), __isset.at(1), __isset.bit(1)};
6610   }
6611 
6612   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum1>
6613   FOLLY_ERASE ::apache::thrift::field_ref<T&> field2() & {
6614     return {this->__fbthrift_field_field2, __isset.at(1), __isset.bit(1)};
6615   }
6616 
6617   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum1>
6618   FOLLY_ERASE ::apache::thrift::field_ref<T&&> field2() && {
6619     return {static_cast<T&&>(this->__fbthrift_field_field2), __isset.at(1), __isset.bit(1)};
6620   }
6621   template <typename ..., typename T = ::std::unique_ptr<::test_cpp2::cpp_reflection::structA>>
6622   FOLLY_ERASE T& field3_ref() & { return field3; }
6623 
6624   template <typename ..., typename T = ::std::unique_ptr<::test_cpp2::cpp_reflection::structA>>
6625   FOLLY_ERASE const T& field3_ref() const& { return field3; }
6626 
6627   template <typename ..., typename T = ::std::unique_ptr<::test_cpp2::cpp_reflection::structA>>
6628   FOLLY_ERASE T&& field3_ref() && { return static_cast<T&&>(field3); }
6629 
6630   template <typename ..., typename T = ::std::unique_ptr<::test_cpp2::cpp_reflection::structA>>
6631   FOLLY_ERASE const T&& field3_ref() const&& { return static_cast<const T&&>(field3); }
6632 
6633   ::std::int32_t get_field0() const {
6634     return field0;
6635   }
6636 
6637   [[deprecated("Use `FOO.field0_ref() = BAR;` instead of `FOO.set_field0(BAR);`")]]
6638   ::std::int32_t& set_field0(::std::int32_t field0_) {
6639     field0_ref() = field0_;
6640     return field0;
6641   }
6642 
6643   const ::std::string* get_field1() const& {
6644     return field1_ref() ? std::addressof(__fbthrift_field_field1) : nullptr;
6645   }
6646 
6647   ::std::string* get_field1() & {
6648     return field1_ref() ? std::addressof(__fbthrift_field_field1) : nullptr;
6649   }
6650   ::std::string* get_field1() && = delete;
6651 
6652   template <typename T_struct4_field1_struct_setter = ::std::string>
6653   [[deprecated("Use `FOO.field1_ref() = BAR;` instead of `FOO.set_field1(BAR);`")]]
6654   ::std::string& set_field1(T_struct4_field1_struct_setter&& field1_) {
6655     field1_ref() = std::forward<T_struct4_field1_struct_setter>(field1_);
6656     return __fbthrift_field_field1;
6657   }
6658 
6659   ::test_cpp2::cpp_reflection::enum1 get_field2() const {
6660     return __fbthrift_field_field2;
6661   }
6662 
6663   [[deprecated("Use `FOO.field2_ref() = BAR;` instead of `FOO.set_field2(BAR);`")]]
6664   ::test_cpp2::cpp_reflection::enum1& set_field2(::test_cpp2::cpp_reflection::enum1 field2_) {
6665     field2_ref() = field2_;
6666     return __fbthrift_field_field2;
6667   }
6668 
6669   template <class Protocol_>
6670   uint32_t read(Protocol_* iprot);
6671   template <class Protocol_>
6672   uint32_t serializedSize(Protocol_ const* prot_) const;
6673   template <class Protocol_>
6674   uint32_t serializedSizeZC(Protocol_ const* prot_) const;
6675   template <class Protocol_>
6676   uint32_t write(Protocol_* prot_) const;
6677 
6678  private:
6679   template <class Protocol_>
6680   void readNoXfer(Protocol_* iprot);
6681 
6682   friend class ::apache::thrift::Cpp2Ops<struct4>;
6683   friend void swap(struct4& a, struct4& b);
6684 };
6685 
6686 template <class Protocol_>
6687 uint32_t struct4::read(Protocol_* iprot) {
6688   auto _xferStart = iprot->getCursorPosition();
6689   readNoXfer(iprot);
6690   return iprot->getCursorPosition() - _xferStart;
6691 }
6692 
6693 }} // test_cpp2::cpp_reflection
6694 namespace test_cpp2 { namespace cpp_reflection {
6695 class struct5 final  {
6696  private:
6697   friend struct ::apache::thrift::detail::st::struct_private_access;
6698 
6699   //  used by a static_assert in the corresponding source
6700   static constexpr bool __fbthrift_cpp2_gen_json = false;
6701   static constexpr bool __fbthrift_cpp2_gen_nimble = false;
6702   static constexpr bool __fbthrift_cpp2_gen_has_thrift_uri = false;
6703 
6704   void __fbthrift_clear();
6705 
6706  public:
6707   using __fbthrift_cpp2_type = struct5;
6708   static constexpr bool __fbthrift_cpp2_is_union =
6709     false;
6710 
6711 
6712  public:
6713 
6714   struct5();
6715 
6716   // FragileConstructor for use in initialization lists only.
6717   [[deprecated("This constructor is deprecated")]]
6718   struct5(apache::thrift::FragileConstructor, ::std::int32_t field0__arg, ::std::string field1__arg, ::test_cpp2::cpp_reflection::enum1 field2__arg, ::test_cpp2::cpp_reflection::structA field3__arg, ::test_cpp2::cpp_reflection::structB field4__arg);
6719 
6720   struct5(struct5&&) noexcept;
6721 
6722   struct5(const struct5& src);
6723 
6724 
6725   struct5& operator=(struct5&&) noexcept;
6726   struct5& operator=(const struct5& src);
6727 
6728   ~struct5();
6729 
6730  public:
6731   ::std::int32_t field0;
6732  private:
6733   ::std::string __fbthrift_field_field1;
6734  private:
6735   ::test_cpp2::cpp_reflection::enum1 __fbthrift_field_field2;
6736  private:
6737   ::test_cpp2::cpp_reflection::structA __fbthrift_field_field3;
6738  private:
6739   ::test_cpp2::cpp_reflection::structB __fbthrift_field_field4;
6740  private:
6741   apache::thrift::detail::isset_bitset<4, false> __isset;
6742 
6743  public:
6744 
6745   bool operator==(const struct5&) const;
6746   bool operator<(const struct5&) const;
6747 
6748   template <typename..., typename T = ::std::int32_t>
6749   FOLLY_ERASE ::apache::thrift::required_field_ref<const T&> field0_ref() const& {
6750     return ::apache::thrift::required_field_ref<const T&>{this->field0};
6751   }
6752 
6753   template <typename..., typename T = ::std::int32_t>
6754   FOLLY_ERASE ::apache::thrift::required_field_ref<const T&&> field0_ref() const&& {
6755     return ::apache::thrift::required_field_ref<const T&&>{static_cast<const T&&>(this->field0)};
6756   }
6757 
6758   template <typename..., typename T = ::std::int32_t>
6759   FOLLY_ERASE ::apache::thrift::required_field_ref<T&> field0_ref() & {
6760     return ::apache::thrift::required_field_ref<T&>{this->field0};
6761   }
6762 
6763   template <typename..., typename T = ::std::int32_t>
6764   FOLLY_ERASE ::apache::thrift::required_field_ref<T&&> field0_ref() && {
6765     return ::apache::thrift::required_field_ref<T&&>{static_cast<T&&>(this->field0)};
6766   }
6767 
6768   template <typename..., typename T = ::std::string>
6769   FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> field1_ref() const& {
6770     return {this->__fbthrift_field_field1, __isset.at(0), __isset.bit(0)};
6771   }
6772 
6773   template <typename..., typename T = ::std::string>
6774   FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> field1_ref() const&& {
6775     return {static_cast<const T&&>(this->__fbthrift_field_field1), __isset.at(0), __isset.bit(0)};
6776   }
6777 
6778   template <typename..., typename T = ::std::string>
6779   FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> field1_ref() & {
6780     return {this->__fbthrift_field_field1, __isset.at(0), __isset.bit(0)};
6781   }
6782 
6783   template <typename..., typename T = ::std::string>
6784   FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> field1_ref() && {
6785     return {static_cast<T&&>(this->__fbthrift_field_field1), __isset.at(0), __isset.bit(0)};
6786   }
6787 
6788   template <typename..., typename T = ::std::string>
6789   FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> field1() const& {
6790     return {this->__fbthrift_field_field1, __isset.at(0), __isset.bit(0)};
6791   }
6792 
6793   template <typename..., typename T = ::std::string>
6794   FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> field1() const&& {
6795     return {static_cast<const T&&>(this->__fbthrift_field_field1), __isset.at(0), __isset.bit(0)};
6796   }
6797 
6798   template <typename..., typename T = ::std::string>
6799   FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> field1() & {
6800     return {this->__fbthrift_field_field1, __isset.at(0), __isset.bit(0)};
6801   }
6802 
6803   template <typename..., typename T = ::std::string>
6804   FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> field1() && {
6805     return {static_cast<T&&>(this->__fbthrift_field_field1), __isset.at(0), __isset.bit(0)};
6806   }
6807 
6808   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum1>
6809   FOLLY_ERASE ::apache::thrift::field_ref<const T&> field2_ref() const& {
6810     return {this->__fbthrift_field_field2, __isset.at(1), __isset.bit(1)};
6811   }
6812 
6813   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum1>
6814   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> field2_ref() const&& {
6815     return {static_cast<const T&&>(this->__fbthrift_field_field2), __isset.at(1), __isset.bit(1)};
6816   }
6817 
6818   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum1>
6819   FOLLY_ERASE ::apache::thrift::field_ref<T&> field2_ref() & {
6820     return {this->__fbthrift_field_field2, __isset.at(1), __isset.bit(1)};
6821   }
6822 
6823   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum1>
6824   FOLLY_ERASE ::apache::thrift::field_ref<T&&> field2_ref() && {
6825     return {static_cast<T&&>(this->__fbthrift_field_field2), __isset.at(1), __isset.bit(1)};
6826   }
6827 
6828   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum1>
6829   FOLLY_ERASE ::apache::thrift::field_ref<const T&> field2() const& {
6830     return {this->__fbthrift_field_field2, __isset.at(1), __isset.bit(1)};
6831   }
6832 
6833   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum1>
6834   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> field2() const&& {
6835     return {static_cast<const T&&>(this->__fbthrift_field_field2), __isset.at(1), __isset.bit(1)};
6836   }
6837 
6838   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum1>
6839   FOLLY_ERASE ::apache::thrift::field_ref<T&> field2() & {
6840     return {this->__fbthrift_field_field2, __isset.at(1), __isset.bit(1)};
6841   }
6842 
6843   template <typename..., typename T = ::test_cpp2::cpp_reflection::enum1>
6844   FOLLY_ERASE ::apache::thrift::field_ref<T&&> field2() && {
6845     return {static_cast<T&&>(this->__fbthrift_field_field2), __isset.at(1), __isset.bit(1)};
6846   }
6847 
6848   template <typename..., typename T = ::test_cpp2::cpp_reflection::structA>
6849   FOLLY_ERASE ::apache::thrift::field_ref<const T&> field3_ref() const& {
6850     return {this->__fbthrift_field_field3, __isset.at(2), __isset.bit(2)};
6851   }
6852 
6853   template <typename..., typename T = ::test_cpp2::cpp_reflection::structA>
6854   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> field3_ref() const&& {
6855     return {static_cast<const T&&>(this->__fbthrift_field_field3), __isset.at(2), __isset.bit(2)};
6856   }
6857 
6858   template <typename..., typename T = ::test_cpp2::cpp_reflection::structA>
6859   FOLLY_ERASE ::apache::thrift::field_ref<T&> field3_ref() & {
6860     return {this->__fbthrift_field_field3, __isset.at(2), __isset.bit(2)};
6861   }
6862 
6863   template <typename..., typename T = ::test_cpp2::cpp_reflection::structA>
6864   FOLLY_ERASE ::apache::thrift::field_ref<T&&> field3_ref() && {
6865     return {static_cast<T&&>(this->__fbthrift_field_field3), __isset.at(2), __isset.bit(2)};
6866   }
6867 
6868   template <typename..., typename T = ::test_cpp2::cpp_reflection::structA>
6869   FOLLY_ERASE ::apache::thrift::field_ref<const T&> field3() const& {
6870     return {this->__fbthrift_field_field3, __isset.at(2), __isset.bit(2)};
6871   }
6872 
6873   template <typename..., typename T = ::test_cpp2::cpp_reflection::structA>
6874   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> field3() const&& {
6875     return {static_cast<const T&&>(this->__fbthrift_field_field3), __isset.at(2), __isset.bit(2)};
6876   }
6877 
6878   template <typename..., typename T = ::test_cpp2::cpp_reflection::structA>
6879   FOLLY_ERASE ::apache::thrift::field_ref<T&> field3() & {
6880     return {this->__fbthrift_field_field3, __isset.at(2), __isset.bit(2)};
6881   }
6882 
6883   template <typename..., typename T = ::test_cpp2::cpp_reflection::structA>
6884   FOLLY_ERASE ::apache::thrift::field_ref<T&&> field3() && {
6885     return {static_cast<T&&>(this->__fbthrift_field_field3), __isset.at(2), __isset.bit(2)};
6886   }
6887 
6888   template <typename..., typename T = ::test_cpp2::cpp_reflection::structB>
6889   FOLLY_ERASE ::apache::thrift::field_ref<const T&> field4_ref() const& {
6890     return {this->__fbthrift_field_field4, __isset.at(3), __isset.bit(3)};
6891   }
6892 
6893   template <typename..., typename T = ::test_cpp2::cpp_reflection::structB>
6894   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> field4_ref() const&& {
6895     return {static_cast<const T&&>(this->__fbthrift_field_field4), __isset.at(3), __isset.bit(3)};
6896   }
6897 
6898   template <typename..., typename T = ::test_cpp2::cpp_reflection::structB>
6899   FOLLY_ERASE ::apache::thrift::field_ref<T&> field4_ref() & {
6900     return {this->__fbthrift_field_field4, __isset.at(3), __isset.bit(3)};
6901   }
6902 
6903   template <typename..., typename T = ::test_cpp2::cpp_reflection::structB>
6904   FOLLY_ERASE ::apache::thrift::field_ref<T&&> field4_ref() && {
6905     return {static_cast<T&&>(this->__fbthrift_field_field4), __isset.at(3), __isset.bit(3)};
6906   }
6907 
6908   template <typename..., typename T = ::test_cpp2::cpp_reflection::structB>
6909   FOLLY_ERASE ::apache::thrift::field_ref<const T&> field4() const& {
6910     return {this->__fbthrift_field_field4, __isset.at(3), __isset.bit(3)};
6911   }
6912 
6913   template <typename..., typename T = ::test_cpp2::cpp_reflection::structB>
6914   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> field4() const&& {
6915     return {static_cast<const T&&>(this->__fbthrift_field_field4), __isset.at(3), __isset.bit(3)};
6916   }
6917 
6918   template <typename..., typename T = ::test_cpp2::cpp_reflection::structB>
6919   FOLLY_ERASE ::apache::thrift::field_ref<T&> field4() & {
6920     return {this->__fbthrift_field_field4, __isset.at(3), __isset.bit(3)};
6921   }
6922 
6923   template <typename..., typename T = ::test_cpp2::cpp_reflection::structB>
6924   FOLLY_ERASE ::apache::thrift::field_ref<T&&> field4() && {
6925     return {static_cast<T&&>(this->__fbthrift_field_field4), __isset.at(3), __isset.bit(3)};
6926   }
6927 
6928   ::std::int32_t get_field0() const {
6929     return field0;
6930   }
6931 
6932   [[deprecated("Use `FOO.field0_ref() = BAR;` instead of `FOO.set_field0(BAR);`")]]
6933   ::std::int32_t& set_field0(::std::int32_t field0_) {
6934     field0_ref() = field0_;
6935     return field0;
6936   }
6937 
6938   const ::std::string* get_field1() const& {
6939     return field1_ref() ? std::addressof(__fbthrift_field_field1) : nullptr;
6940   }
6941 
6942   ::std::string* get_field1() & {
6943     return field1_ref() ? std::addressof(__fbthrift_field_field1) : nullptr;
6944   }
6945   ::std::string* get_field1() && = delete;
6946 
6947   template <typename T_struct5_field1_struct_setter = ::std::string>
6948   [[deprecated("Use `FOO.field1_ref() = BAR;` instead of `FOO.set_field1(BAR);`")]]
6949   ::std::string& set_field1(T_struct5_field1_struct_setter&& field1_) {
6950     field1_ref() = std::forward<T_struct5_field1_struct_setter>(field1_);
6951     return __fbthrift_field_field1;
6952   }
6953 
6954   ::test_cpp2::cpp_reflection::enum1 get_field2() const {
6955     return __fbthrift_field_field2;
6956   }
6957 
6958   [[deprecated("Use `FOO.field2_ref() = BAR;` instead of `FOO.set_field2(BAR);`")]]
6959   ::test_cpp2::cpp_reflection::enum1& set_field2(::test_cpp2::cpp_reflection::enum1 field2_) {
6960     field2_ref() = field2_;
6961     return __fbthrift_field_field2;
6962   }
6963   const ::test_cpp2::cpp_reflection::structA& get_field3() const&;
6964   ::test_cpp2::cpp_reflection::structA get_field3() &&;
6965 
6966   template <typename T_struct5_field3_struct_setter = ::test_cpp2::cpp_reflection::structA>
6967   [[deprecated("Use `FOO.field3_ref() = BAR;` instead of `FOO.set_field3(BAR);`")]]
6968   ::test_cpp2::cpp_reflection::structA& set_field3(T_struct5_field3_struct_setter&& field3_) {
6969     field3_ref() = std::forward<T_struct5_field3_struct_setter>(field3_);
6970     return __fbthrift_field_field3;
6971   }
6972   const ::test_cpp2::cpp_reflection::structB& get_field4() const&;
6973   ::test_cpp2::cpp_reflection::structB get_field4() &&;
6974 
6975   template <typename T_struct5_field4_struct_setter = ::test_cpp2::cpp_reflection::structB>
6976   [[deprecated("Use `FOO.field4_ref() = BAR;` instead of `FOO.set_field4(BAR);`")]]
6977   ::test_cpp2::cpp_reflection::structB& set_field4(T_struct5_field4_struct_setter&& field4_) {
6978     field4_ref() = std::forward<T_struct5_field4_struct_setter>(field4_);
6979     return __fbthrift_field_field4;
6980   }
6981 
6982   template <class Protocol_>
6983   uint32_t read(Protocol_* iprot);
6984   template <class Protocol_>
6985   uint32_t serializedSize(Protocol_ const* prot_) const;
6986   template <class Protocol_>
6987   uint32_t serializedSizeZC(Protocol_ const* prot_) const;
6988   template <class Protocol_>
6989   uint32_t write(Protocol_* prot_) const;
6990 
6991  private:
6992   template <class Protocol_>
6993   void readNoXfer(Protocol_* iprot);
6994 
6995   friend class ::apache::thrift::Cpp2Ops<struct5>;
6996   friend void swap(struct5& a, struct5& b);
6997 };
6998 
6999 template <class Protocol_>
7000 uint32_t struct5::read(Protocol_* iprot) {
7001   auto _xferStart = iprot->getCursorPosition();
7002   readNoXfer(iprot);
7003   return iprot->getCursorPosition() - _xferStart;
7004 }
7005 
7006 }} // test_cpp2::cpp_reflection
7007 namespace test_cpp2 { namespace cpp_reflection {
7008 class struct_binary final  {
7009  private:
7010   friend struct ::apache::thrift::detail::st::struct_private_access;
7011 
7012   //  used by a static_assert in the corresponding source
7013   static constexpr bool __fbthrift_cpp2_gen_json = false;
7014   static constexpr bool __fbthrift_cpp2_gen_nimble = false;
7015   static constexpr bool __fbthrift_cpp2_gen_has_thrift_uri = false;
7016 
7017   void __fbthrift_clear();
7018 
7019  public:
7020   using __fbthrift_cpp2_type = struct_binary;
7021   static constexpr bool __fbthrift_cpp2_is_union =
7022     false;
7023 
7024 
7025  public:
7026 
7027   struct_binary() {
7028   }
7029   // FragileConstructor for use in initialization lists only.
7030   [[deprecated("This constructor is deprecated")]]
7031   struct_binary(apache::thrift::FragileConstructor, ::std::string bi__arg);
7032 
7033   struct_binary(struct_binary&&) noexcept;
7034 
7035   struct_binary(const struct_binary& src);
7036 
7037 
7038   struct_binary& operator=(struct_binary&&) noexcept;
7039   struct_binary& operator=(const struct_binary& src);
7040  private:
7041   ::std::string __fbthrift_field_bi;
7042  private:
7043   apache::thrift::detail::isset_bitset<1, false> __isset;
7044 
7045  public:
7046 
7047   bool operator==(const struct_binary&) const;
7048   bool operator<(const struct_binary&) const;
7049 
7050   template <typename..., typename T = ::std::string>
7051   FOLLY_ERASE ::apache::thrift::field_ref<const T&> bi_ref() const& {
7052     return {this->__fbthrift_field_bi, __isset.at(0), __isset.bit(0)};
7053   }
7054 
7055   template <typename..., typename T = ::std::string>
7056   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> bi_ref() const&& {
7057     return {static_cast<const T&&>(this->__fbthrift_field_bi), __isset.at(0), __isset.bit(0)};
7058   }
7059 
7060   template <typename..., typename T = ::std::string>
7061   FOLLY_ERASE ::apache::thrift::field_ref<T&> bi_ref() & {
7062     return {this->__fbthrift_field_bi, __isset.at(0), __isset.bit(0)};
7063   }
7064 
7065   template <typename..., typename T = ::std::string>
7066   FOLLY_ERASE ::apache::thrift::field_ref<T&&> bi_ref() && {
7067     return {static_cast<T&&>(this->__fbthrift_field_bi), __isset.at(0), __isset.bit(0)};
7068   }
7069 
7070   template <typename..., typename T = ::std::string>
7071   FOLLY_ERASE ::apache::thrift::field_ref<const T&> bi() const& {
7072     return {this->__fbthrift_field_bi, __isset.at(0), __isset.bit(0)};
7073   }
7074 
7075   template <typename..., typename T = ::std::string>
7076   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> bi() const&& {
7077     return {static_cast<const T&&>(this->__fbthrift_field_bi), __isset.at(0), __isset.bit(0)};
7078   }
7079 
7080   template <typename..., typename T = ::std::string>
7081   FOLLY_ERASE ::apache::thrift::field_ref<T&> bi() & {
7082     return {this->__fbthrift_field_bi, __isset.at(0), __isset.bit(0)};
7083   }
7084 
7085   template <typename..., typename T = ::std::string>
7086   FOLLY_ERASE ::apache::thrift::field_ref<T&&> bi() && {
7087     return {static_cast<T&&>(this->__fbthrift_field_bi), __isset.at(0), __isset.bit(0)};
7088   }
7089 
7090   const ::std::string& get_bi() const& {
7091     return __fbthrift_field_bi;
7092   }
7093 
7094   ::std::string get_bi() && {
7095     return std::move(__fbthrift_field_bi);
7096   }
7097 
7098   template <typename T_struct_binary_bi_struct_setter = ::std::string>
7099   [[deprecated("Use `FOO.bi_ref() = BAR;` instead of `FOO.set_bi(BAR);`")]]
7100   ::std::string& set_bi(T_struct_binary_bi_struct_setter&& bi_) {
7101     bi_ref() = std::forward<T_struct_binary_bi_struct_setter>(bi_);
7102     return __fbthrift_field_bi;
7103   }
7104 
7105   template <class Protocol_>
7106   uint32_t read(Protocol_* iprot);
7107   template <class Protocol_>
7108   uint32_t serializedSize(Protocol_ const* prot_) const;
7109   template <class Protocol_>
7110   uint32_t serializedSizeZC(Protocol_ const* prot_) const;
7111   template <class Protocol_>
7112   uint32_t write(Protocol_* prot_) const;
7113 
7114  private:
7115   template <class Protocol_>
7116   void readNoXfer(Protocol_* iprot);
7117 
7118   friend class ::apache::thrift::Cpp2Ops<struct_binary>;
7119   friend void swap(struct_binary& a, struct_binary& b);
7120 };
7121 
7122 template <class Protocol_>
7123 uint32_t struct_binary::read(Protocol_* iprot) {
7124   auto _xferStart = iprot->getCursorPosition();
7125   readNoXfer(iprot);
7126   return iprot->getCursorPosition() - _xferStart;
7127 }
7128 
7129 }} // test_cpp2::cpp_reflection
7130 namespace test_cpp2 { namespace cpp_reflection {
7131 class dep_A_struct final  {
7132  private:
7133   friend struct ::apache::thrift::detail::st::struct_private_access;
7134 
7135   //  used by a static_assert in the corresponding source
7136   static constexpr bool __fbthrift_cpp2_gen_json = false;
7137   static constexpr bool __fbthrift_cpp2_gen_nimble = false;
7138   static constexpr bool __fbthrift_cpp2_gen_has_thrift_uri = false;
7139 
7140   void __fbthrift_clear();
7141 
7142  public:
7143   using __fbthrift_cpp2_type = dep_A_struct;
7144   static constexpr bool __fbthrift_cpp2_is_union =
7145     false;
7146 
7147 
7148  public:
7149 
7150   dep_A_struct() :
7151       __fbthrift_field_i_a() {
7152   }
7153   // FragileConstructor for use in initialization lists only.
7154   [[deprecated("This constructor is deprecated")]]
7155   dep_A_struct(apache::thrift::FragileConstructor, ::test_cpp2::cpp_reflection::dep_B_struct b__arg, ::test_cpp2::cpp_reflection::dep_C_struct c__arg, ::std::int32_t i_a__arg);
7156 
7157   dep_A_struct(dep_A_struct&&) = default;
7158 
7159   dep_A_struct(const dep_A_struct&) = default;
7160 
7161 
7162   dep_A_struct& operator=(dep_A_struct&&) = default;
7163 
7164   dep_A_struct& operator=(const dep_A_struct&) = default;
7165  private:
7166   ::test_cpp2::cpp_reflection::dep_B_struct __fbthrift_field_b;
7167  private:
7168   ::test_cpp2::cpp_reflection::dep_C_struct __fbthrift_field_c;
7169  private:
7170   ::std::int32_t __fbthrift_field_i_a;
7171  private:
7172   apache::thrift::detail::isset_bitset<3, false> __isset;
7173 
7174  public:
7175 
7176   bool operator==(const dep_A_struct&) const;
7177   bool operator<(const dep_A_struct&) const;
7178 
7179   template <typename..., typename T = ::test_cpp2::cpp_reflection::dep_B_struct>
7180   FOLLY_ERASE ::apache::thrift::field_ref<const T&> b_ref() const& {
7181     return {this->__fbthrift_field_b, __isset.at(0), __isset.bit(0)};
7182   }
7183 
7184   template <typename..., typename T = ::test_cpp2::cpp_reflection::dep_B_struct>
7185   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> b_ref() const&& {
7186     return {static_cast<const T&&>(this->__fbthrift_field_b), __isset.at(0), __isset.bit(0)};
7187   }
7188 
7189   template <typename..., typename T = ::test_cpp2::cpp_reflection::dep_B_struct>
7190   FOLLY_ERASE ::apache::thrift::field_ref<T&> b_ref() & {
7191     return {this->__fbthrift_field_b, __isset.at(0), __isset.bit(0)};
7192   }
7193 
7194   template <typename..., typename T = ::test_cpp2::cpp_reflection::dep_B_struct>
7195   FOLLY_ERASE ::apache::thrift::field_ref<T&&> b_ref() && {
7196     return {static_cast<T&&>(this->__fbthrift_field_b), __isset.at(0), __isset.bit(0)};
7197   }
7198 
7199   template <typename..., typename T = ::test_cpp2::cpp_reflection::dep_B_struct>
7200   FOLLY_ERASE ::apache::thrift::field_ref<const T&> b() const& {
7201     return {this->__fbthrift_field_b, __isset.at(0), __isset.bit(0)};
7202   }
7203 
7204   template <typename..., typename T = ::test_cpp2::cpp_reflection::dep_B_struct>
7205   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> b() const&& {
7206     return {static_cast<const T&&>(this->__fbthrift_field_b), __isset.at(0), __isset.bit(0)};
7207   }
7208 
7209   template <typename..., typename T = ::test_cpp2::cpp_reflection::dep_B_struct>
7210   FOLLY_ERASE ::apache::thrift::field_ref<T&> b() & {
7211     return {this->__fbthrift_field_b, __isset.at(0), __isset.bit(0)};
7212   }
7213 
7214   template <typename..., typename T = ::test_cpp2::cpp_reflection::dep_B_struct>
7215   FOLLY_ERASE ::apache::thrift::field_ref<T&&> b() && {
7216     return {static_cast<T&&>(this->__fbthrift_field_b), __isset.at(0), __isset.bit(0)};
7217   }
7218 
7219   template <typename..., typename T = ::test_cpp2::cpp_reflection::dep_C_struct>
7220   FOLLY_ERASE ::apache::thrift::field_ref<const T&> c_ref() const& {
7221     return {this->__fbthrift_field_c, __isset.at(1), __isset.bit(1)};
7222   }
7223 
7224   template <typename..., typename T = ::test_cpp2::cpp_reflection::dep_C_struct>
7225   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> c_ref() const&& {
7226     return {static_cast<const T&&>(this->__fbthrift_field_c), __isset.at(1), __isset.bit(1)};
7227   }
7228 
7229   template <typename..., typename T = ::test_cpp2::cpp_reflection::dep_C_struct>
7230   FOLLY_ERASE ::apache::thrift::field_ref<T&> c_ref() & {
7231     return {this->__fbthrift_field_c, __isset.at(1), __isset.bit(1)};
7232   }
7233 
7234   template <typename..., typename T = ::test_cpp2::cpp_reflection::dep_C_struct>
7235   FOLLY_ERASE ::apache::thrift::field_ref<T&&> c_ref() && {
7236     return {static_cast<T&&>(this->__fbthrift_field_c), __isset.at(1), __isset.bit(1)};
7237   }
7238 
7239   template <typename..., typename T = ::test_cpp2::cpp_reflection::dep_C_struct>
7240   FOLLY_ERASE ::apache::thrift::field_ref<const T&> c() const& {
7241     return {this->__fbthrift_field_c, __isset.at(1), __isset.bit(1)};
7242   }
7243 
7244   template <typename..., typename T = ::test_cpp2::cpp_reflection::dep_C_struct>
7245   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> c() const&& {
7246     return {static_cast<const T&&>(this->__fbthrift_field_c), __isset.at(1), __isset.bit(1)};
7247   }
7248 
7249   template <typename..., typename T = ::test_cpp2::cpp_reflection::dep_C_struct>
7250   FOLLY_ERASE ::apache::thrift::field_ref<T&> c() & {
7251     return {this->__fbthrift_field_c, __isset.at(1), __isset.bit(1)};
7252   }
7253 
7254   template <typename..., typename T = ::test_cpp2::cpp_reflection::dep_C_struct>
7255   FOLLY_ERASE ::apache::thrift::field_ref<T&&> c() && {
7256     return {static_cast<T&&>(this->__fbthrift_field_c), __isset.at(1), __isset.bit(1)};
7257   }
7258 
7259   template <typename..., typename T = ::std::int32_t>
7260   FOLLY_ERASE ::apache::thrift::field_ref<const T&> i_a_ref() const& {
7261     return {this->__fbthrift_field_i_a, __isset.at(2), __isset.bit(2)};
7262   }
7263 
7264   template <typename..., typename T = ::std::int32_t>
7265   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> i_a_ref() const&& {
7266     return {static_cast<const T&&>(this->__fbthrift_field_i_a), __isset.at(2), __isset.bit(2)};
7267   }
7268 
7269   template <typename..., typename T = ::std::int32_t>
7270   FOLLY_ERASE ::apache::thrift::field_ref<T&> i_a_ref() & {
7271     return {this->__fbthrift_field_i_a, __isset.at(2), __isset.bit(2)};
7272   }
7273 
7274   template <typename..., typename T = ::std::int32_t>
7275   FOLLY_ERASE ::apache::thrift::field_ref<T&&> i_a_ref() && {
7276     return {static_cast<T&&>(this->__fbthrift_field_i_a), __isset.at(2), __isset.bit(2)};
7277   }
7278 
7279   template <typename..., typename T = ::std::int32_t>
7280   FOLLY_ERASE ::apache::thrift::field_ref<const T&> i_a() const& {
7281     return {this->__fbthrift_field_i_a, __isset.at(2), __isset.bit(2)};
7282   }
7283 
7284   template <typename..., typename T = ::std::int32_t>
7285   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> i_a() const&& {
7286     return {static_cast<const T&&>(this->__fbthrift_field_i_a), __isset.at(2), __isset.bit(2)};
7287   }
7288 
7289   template <typename..., typename T = ::std::int32_t>
7290   FOLLY_ERASE ::apache::thrift::field_ref<T&> i_a() & {
7291     return {this->__fbthrift_field_i_a, __isset.at(2), __isset.bit(2)};
7292   }
7293 
7294   template <typename..., typename T = ::std::int32_t>
7295   FOLLY_ERASE ::apache::thrift::field_ref<T&&> i_a() && {
7296     return {static_cast<T&&>(this->__fbthrift_field_i_a), __isset.at(2), __isset.bit(2)};
7297   }
7298   const ::test_cpp2::cpp_reflection::dep_B_struct& get_b() const&;
7299   ::test_cpp2::cpp_reflection::dep_B_struct get_b() &&;
7300 
7301   template <typename T_dep_A_struct_b_struct_setter = ::test_cpp2::cpp_reflection::dep_B_struct>
7302   [[deprecated("Use `FOO.b_ref() = BAR;` instead of `FOO.set_b(BAR);`")]]
7303   ::test_cpp2::cpp_reflection::dep_B_struct& set_b(T_dep_A_struct_b_struct_setter&& b_) {
7304     b_ref() = std::forward<T_dep_A_struct_b_struct_setter>(b_);
7305     return __fbthrift_field_b;
7306   }
7307   const ::test_cpp2::cpp_reflection::dep_C_struct& get_c() const&;
7308   ::test_cpp2::cpp_reflection::dep_C_struct get_c() &&;
7309 
7310   template <typename T_dep_A_struct_c_struct_setter = ::test_cpp2::cpp_reflection::dep_C_struct>
7311   [[deprecated("Use `FOO.c_ref() = BAR;` instead of `FOO.set_c(BAR);`")]]
7312   ::test_cpp2::cpp_reflection::dep_C_struct& set_c(T_dep_A_struct_c_struct_setter&& c_) {
7313     c_ref() = std::forward<T_dep_A_struct_c_struct_setter>(c_);
7314     return __fbthrift_field_c;
7315   }
7316 
7317   ::std::int32_t get_i_a() const {
7318     return __fbthrift_field_i_a;
7319   }
7320 
7321   [[deprecated("Use `FOO.i_a_ref() = BAR;` instead of `FOO.set_i_a(BAR);`")]]
7322   ::std::int32_t& set_i_a(::std::int32_t i_a_) {
7323     i_a_ref() = i_a_;
7324     return __fbthrift_field_i_a;
7325   }
7326 
7327   template <class Protocol_>
7328   uint32_t read(Protocol_* iprot);
7329   template <class Protocol_>
7330   uint32_t serializedSize(Protocol_ const* prot_) const;
7331   template <class Protocol_>
7332   uint32_t serializedSizeZC(Protocol_ const* prot_) const;
7333   template <class Protocol_>
7334   uint32_t write(Protocol_* prot_) const;
7335 
7336  private:
7337   template <class Protocol_>
7338   void readNoXfer(Protocol_* iprot);
7339 
7340   friend class ::apache::thrift::Cpp2Ops<dep_A_struct>;
7341   friend void swap(dep_A_struct& a, dep_A_struct& b);
7342 };
7343 
7344 template <class Protocol_>
7345 uint32_t dep_A_struct::read(Protocol_* iprot) {
7346   auto _xferStart = iprot->getCursorPosition();
7347   readNoXfer(iprot);
7348   return iprot->getCursorPosition() - _xferStart;
7349 }
7350 
7351 }} // test_cpp2::cpp_reflection
7352 namespace test_cpp2 { namespace cpp_reflection {
7353 class dep_B_struct final  {
7354  private:
7355   friend struct ::apache::thrift::detail::st::struct_private_access;
7356 
7357   //  used by a static_assert in the corresponding source
7358   static constexpr bool __fbthrift_cpp2_gen_json = false;
7359   static constexpr bool __fbthrift_cpp2_gen_nimble = false;
7360   static constexpr bool __fbthrift_cpp2_gen_has_thrift_uri = false;
7361 
7362   void __fbthrift_clear();
7363 
7364  public:
7365   using __fbthrift_cpp2_type = dep_B_struct;
7366   static constexpr bool __fbthrift_cpp2_is_union =
7367     false;
7368 
7369 
7370  public:
7371 
7372   dep_B_struct() :
7373       __fbthrift_field_i_a() {
7374   }
7375   // FragileConstructor for use in initialization lists only.
7376   [[deprecated("This constructor is deprecated")]]
7377   dep_B_struct(apache::thrift::FragileConstructor, ::test_cpp2::cpp_reflection::dep_B_struct b__arg, ::test_cpp2::cpp_reflection::dep_C_struct c__arg, ::std::int32_t i_a__arg);
7378 
7379   dep_B_struct(dep_B_struct&&) = default;
7380 
7381   dep_B_struct(const dep_B_struct&) = default;
7382 
7383 
7384   dep_B_struct& operator=(dep_B_struct&&) = default;
7385 
7386   dep_B_struct& operator=(const dep_B_struct&) = default;
7387  private:
7388   ::test_cpp2::cpp_reflection::dep_B_struct __fbthrift_field_b;
7389  private:
7390   ::test_cpp2::cpp_reflection::dep_C_struct __fbthrift_field_c;
7391  private:
7392   ::std::int32_t __fbthrift_field_i_a;
7393  private:
7394   apache::thrift::detail::isset_bitset<3, false> __isset;
7395 
7396  public:
7397 
7398   bool operator==(const dep_B_struct&) const;
7399   bool operator<(const dep_B_struct&) const;
7400 
7401   template <typename..., typename T = ::test_cpp2::cpp_reflection::dep_B_struct>
7402   FOLLY_ERASE ::apache::thrift::field_ref<const T&> b_ref() const& {
7403     return {this->__fbthrift_field_b, __isset.at(0), __isset.bit(0)};
7404   }
7405 
7406   template <typename..., typename T = ::test_cpp2::cpp_reflection::dep_B_struct>
7407   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> b_ref() const&& {
7408     return {static_cast<const T&&>(this->__fbthrift_field_b), __isset.at(0), __isset.bit(0)};
7409   }
7410 
7411   template <typename..., typename T = ::test_cpp2::cpp_reflection::dep_B_struct>
7412   FOLLY_ERASE ::apache::thrift::field_ref<T&> b_ref() & {
7413     return {this->__fbthrift_field_b, __isset.at(0), __isset.bit(0)};
7414   }
7415 
7416   template <typename..., typename T = ::test_cpp2::cpp_reflection::dep_B_struct>
7417   FOLLY_ERASE ::apache::thrift::field_ref<T&&> b_ref() && {
7418     return {static_cast<T&&>(this->__fbthrift_field_b), __isset.at(0), __isset.bit(0)};
7419   }
7420 
7421   template <typename..., typename T = ::test_cpp2::cpp_reflection::dep_B_struct>
7422   FOLLY_ERASE ::apache::thrift::field_ref<const T&> b() const& {
7423     return {this->__fbthrift_field_b, __isset.at(0), __isset.bit(0)};
7424   }
7425 
7426   template <typename..., typename T = ::test_cpp2::cpp_reflection::dep_B_struct>
7427   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> b() const&& {
7428     return {static_cast<const T&&>(this->__fbthrift_field_b), __isset.at(0), __isset.bit(0)};
7429   }
7430 
7431   template <typename..., typename T = ::test_cpp2::cpp_reflection::dep_B_struct>
7432   FOLLY_ERASE ::apache::thrift::field_ref<T&> b() & {
7433     return {this->__fbthrift_field_b, __isset.at(0), __isset.bit(0)};
7434   }
7435 
7436   template <typename..., typename T = ::test_cpp2::cpp_reflection::dep_B_struct>
7437   FOLLY_ERASE ::apache::thrift::field_ref<T&&> b() && {
7438     return {static_cast<T&&>(this->__fbthrift_field_b), __isset.at(0), __isset.bit(0)};
7439   }
7440 
7441   template <typename..., typename T = ::test_cpp2::cpp_reflection::dep_C_struct>
7442   FOLLY_ERASE ::apache::thrift::field_ref<const T&> c_ref() const& {
7443     return {this->__fbthrift_field_c, __isset.at(1), __isset.bit(1)};
7444   }
7445 
7446   template <typename..., typename T = ::test_cpp2::cpp_reflection::dep_C_struct>
7447   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> c_ref() const&& {
7448     return {static_cast<const T&&>(this->__fbthrift_field_c), __isset.at(1), __isset.bit(1)};
7449   }
7450 
7451   template <typename..., typename T = ::test_cpp2::cpp_reflection::dep_C_struct>
7452   FOLLY_ERASE ::apache::thrift::field_ref<T&> c_ref() & {
7453     return {this->__fbthrift_field_c, __isset.at(1), __isset.bit(1)};
7454   }
7455 
7456   template <typename..., typename T = ::test_cpp2::cpp_reflection::dep_C_struct>
7457   FOLLY_ERASE ::apache::thrift::field_ref<T&&> c_ref() && {
7458     return {static_cast<T&&>(this->__fbthrift_field_c), __isset.at(1), __isset.bit(1)};
7459   }
7460 
7461   template <typename..., typename T = ::test_cpp2::cpp_reflection::dep_C_struct>
7462   FOLLY_ERASE ::apache::thrift::field_ref<const T&> c() const& {
7463     return {this->__fbthrift_field_c, __isset.at(1), __isset.bit(1)};
7464   }
7465 
7466   template <typename..., typename T = ::test_cpp2::cpp_reflection::dep_C_struct>
7467   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> c() const&& {
7468     return {static_cast<const T&&>(this->__fbthrift_field_c), __isset.at(1), __isset.bit(1)};
7469   }
7470 
7471   template <typename..., typename T = ::test_cpp2::cpp_reflection::dep_C_struct>
7472   FOLLY_ERASE ::apache::thrift::field_ref<T&> c() & {
7473     return {this->__fbthrift_field_c, __isset.at(1), __isset.bit(1)};
7474   }
7475 
7476   template <typename..., typename T = ::test_cpp2::cpp_reflection::dep_C_struct>
7477   FOLLY_ERASE ::apache::thrift::field_ref<T&&> c() && {
7478     return {static_cast<T&&>(this->__fbthrift_field_c), __isset.at(1), __isset.bit(1)};
7479   }
7480 
7481   template <typename..., typename T = ::std::int32_t>
7482   FOLLY_ERASE ::apache::thrift::field_ref<const T&> i_a_ref() const& {
7483     return {this->__fbthrift_field_i_a, __isset.at(2), __isset.bit(2)};
7484   }
7485 
7486   template <typename..., typename T = ::std::int32_t>
7487   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> i_a_ref() const&& {
7488     return {static_cast<const T&&>(this->__fbthrift_field_i_a), __isset.at(2), __isset.bit(2)};
7489   }
7490 
7491   template <typename..., typename T = ::std::int32_t>
7492   FOLLY_ERASE ::apache::thrift::field_ref<T&> i_a_ref() & {
7493     return {this->__fbthrift_field_i_a, __isset.at(2), __isset.bit(2)};
7494   }
7495 
7496   template <typename..., typename T = ::std::int32_t>
7497   FOLLY_ERASE ::apache::thrift::field_ref<T&&> i_a_ref() && {
7498     return {static_cast<T&&>(this->__fbthrift_field_i_a), __isset.at(2), __isset.bit(2)};
7499   }
7500 
7501   template <typename..., typename T = ::std::int32_t>
7502   FOLLY_ERASE ::apache::thrift::field_ref<const T&> i_a() const& {
7503     return {this->__fbthrift_field_i_a, __isset.at(2), __isset.bit(2)};
7504   }
7505 
7506   template <typename..., typename T = ::std::int32_t>
7507   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> i_a() const&& {
7508     return {static_cast<const T&&>(this->__fbthrift_field_i_a), __isset.at(2), __isset.bit(2)};
7509   }
7510 
7511   template <typename..., typename T = ::std::int32_t>
7512   FOLLY_ERASE ::apache::thrift::field_ref<T&> i_a() & {
7513     return {this->__fbthrift_field_i_a, __isset.at(2), __isset.bit(2)};
7514   }
7515 
7516   template <typename..., typename T = ::std::int32_t>
7517   FOLLY_ERASE ::apache::thrift::field_ref<T&&> i_a() && {
7518     return {static_cast<T&&>(this->__fbthrift_field_i_a), __isset.at(2), __isset.bit(2)};
7519   }
7520   const ::test_cpp2::cpp_reflection::dep_B_struct& get_b() const&;
7521   ::test_cpp2::cpp_reflection::dep_B_struct get_b() &&;
7522 
7523   template <typename T_dep_B_struct_b_struct_setter = ::test_cpp2::cpp_reflection::dep_B_struct>
7524   [[deprecated("Use `FOO.b_ref() = BAR;` instead of `FOO.set_b(BAR);`")]]
7525   ::test_cpp2::cpp_reflection::dep_B_struct& set_b(T_dep_B_struct_b_struct_setter&& b_) {
7526     b_ref() = std::forward<T_dep_B_struct_b_struct_setter>(b_);
7527     return __fbthrift_field_b;
7528   }
7529   const ::test_cpp2::cpp_reflection::dep_C_struct& get_c() const&;
7530   ::test_cpp2::cpp_reflection::dep_C_struct get_c() &&;
7531 
7532   template <typename T_dep_B_struct_c_struct_setter = ::test_cpp2::cpp_reflection::dep_C_struct>
7533   [[deprecated("Use `FOO.c_ref() = BAR;` instead of `FOO.set_c(BAR);`")]]
7534   ::test_cpp2::cpp_reflection::dep_C_struct& set_c(T_dep_B_struct_c_struct_setter&& c_) {
7535     c_ref() = std::forward<T_dep_B_struct_c_struct_setter>(c_);
7536     return __fbthrift_field_c;
7537   }
7538 
7539   ::std::int32_t get_i_a() const {
7540     return __fbthrift_field_i_a;
7541   }
7542 
7543   [[deprecated("Use `FOO.i_a_ref() = BAR;` instead of `FOO.set_i_a(BAR);`")]]
7544   ::std::int32_t& set_i_a(::std::int32_t i_a_) {
7545     i_a_ref() = i_a_;
7546     return __fbthrift_field_i_a;
7547   }
7548 
7549   template <class Protocol_>
7550   uint32_t read(Protocol_* iprot);
7551   template <class Protocol_>
7552   uint32_t serializedSize(Protocol_ const* prot_) const;
7553   template <class Protocol_>
7554   uint32_t serializedSizeZC(Protocol_ const* prot_) const;
7555   template <class Protocol_>
7556   uint32_t write(Protocol_* prot_) const;
7557 
7558  private:
7559   template <class Protocol_>
7560   void readNoXfer(Protocol_* iprot);
7561 
7562   friend class ::apache::thrift::Cpp2Ops<dep_B_struct>;
7563   friend void swap(dep_B_struct& a, dep_B_struct& b);
7564 };
7565 
7566 template <class Protocol_>
7567 uint32_t dep_B_struct::read(Protocol_* iprot) {
7568   auto _xferStart = iprot->getCursorPosition();
7569   readNoXfer(iprot);
7570   return iprot->getCursorPosition() - _xferStart;
7571 }
7572 
7573 }} // test_cpp2::cpp_reflection
7574 namespace test_cpp2 { namespace cpp_reflection {
7575 class annotated final  {
7576  private:
7577   friend struct ::apache::thrift::detail::st::struct_private_access;
7578 
7579   //  used by a static_assert in the corresponding source
7580   static constexpr bool __fbthrift_cpp2_gen_json = false;
7581   static constexpr bool __fbthrift_cpp2_gen_nimble = false;
7582   static constexpr bool __fbthrift_cpp2_gen_has_thrift_uri = false;
7583 
7584   void __fbthrift_clear();
7585 
7586  public:
7587   using __fbthrift_cpp2_type = annotated;
7588   static constexpr bool __fbthrift_cpp2_is_union =
7589     false;
7590 
7591 
7592  public:
7593 
7594   annotated() :
7595       __fbthrift_field_a() {
7596   }
7597   // FragileConstructor for use in initialization lists only.
7598   [[deprecated("This constructor is deprecated")]]
7599   annotated(apache::thrift::FragileConstructor, ::std::int32_t a__arg);
7600 
7601   annotated(annotated&&) = default;
7602 
7603   annotated(const annotated&) = default;
7604 
7605 
7606   annotated& operator=(annotated&&) = default;
7607 
7608   annotated& operator=(const annotated&) = default;
7609  private:
7610   ::std::int32_t __fbthrift_field_a;
7611  private:
7612   apache::thrift::detail::isset_bitset<1, false> __isset;
7613 
7614  public:
7615 
7616   bool operator==(const annotated&) const;
7617   bool operator<(const annotated&) const;
7618 
7619   template <typename..., typename T = ::std::int32_t>
7620   FOLLY_ERASE ::apache::thrift::field_ref<const T&> a_ref() const& {
7621     return {this->__fbthrift_field_a, __isset.at(0), __isset.bit(0)};
7622   }
7623 
7624   template <typename..., typename T = ::std::int32_t>
7625   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> a_ref() const&& {
7626     return {static_cast<const T&&>(this->__fbthrift_field_a), __isset.at(0), __isset.bit(0)};
7627   }
7628 
7629   template <typename..., typename T = ::std::int32_t>
7630   FOLLY_ERASE ::apache::thrift::field_ref<T&> a_ref() & {
7631     return {this->__fbthrift_field_a, __isset.at(0), __isset.bit(0)};
7632   }
7633 
7634   template <typename..., typename T = ::std::int32_t>
7635   FOLLY_ERASE ::apache::thrift::field_ref<T&&> a_ref() && {
7636     return {static_cast<T&&>(this->__fbthrift_field_a), __isset.at(0), __isset.bit(0)};
7637   }
7638 
7639   template <typename..., typename T = ::std::int32_t>
7640   FOLLY_ERASE ::apache::thrift::field_ref<const T&> a() const& {
7641     return {this->__fbthrift_field_a, __isset.at(0), __isset.bit(0)};
7642   }
7643 
7644   template <typename..., typename T = ::std::int32_t>
7645   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> a() const&& {
7646     return {static_cast<const T&&>(this->__fbthrift_field_a), __isset.at(0), __isset.bit(0)};
7647   }
7648 
7649   template <typename..., typename T = ::std::int32_t>
7650   FOLLY_ERASE ::apache::thrift::field_ref<T&> a() & {
7651     return {this->__fbthrift_field_a, __isset.at(0), __isset.bit(0)};
7652   }
7653 
7654   template <typename..., typename T = ::std::int32_t>
7655   FOLLY_ERASE ::apache::thrift::field_ref<T&&> a() && {
7656     return {static_cast<T&&>(this->__fbthrift_field_a), __isset.at(0), __isset.bit(0)};
7657   }
7658 
7659   ::std::int32_t get_a() const {
7660     return __fbthrift_field_a;
7661   }
7662 
7663   [[deprecated("Use `FOO.a_ref() = BAR;` instead of `FOO.set_a(BAR);`")]]
7664   ::std::int32_t& set_a(::std::int32_t a_) {
7665     a_ref() = a_;
7666     return __fbthrift_field_a;
7667   }
7668 
7669   template <class Protocol_>
7670   uint32_t read(Protocol_* iprot);
7671   template <class Protocol_>
7672   uint32_t serializedSize(Protocol_ const* prot_) const;
7673   template <class Protocol_>
7674   uint32_t serializedSizeZC(Protocol_ const* prot_) const;
7675   template <class Protocol_>
7676   uint32_t write(Protocol_* prot_) const;
7677 
7678  private:
7679   template <class Protocol_>
7680   void readNoXfer(Protocol_* iprot);
7681 
7682   friend class ::apache::thrift::Cpp2Ops<annotated>;
7683   friend void swap(annotated& a, annotated& b);
7684 };
7685 
7686 template <class Protocol_>
7687 uint32_t annotated::read(Protocol_* iprot) {
7688   auto _xferStart = iprot->getCursorPosition();
7689   readNoXfer(iprot);
7690   return iprot->getCursorPosition() - _xferStart;
7691 }
7692 
7693 }} // test_cpp2::cpp_reflection
7694 namespace test_cpp2 { namespace cpp_reflection {
7695 class union_with_special_names final  {
7696  private:
7697   friend struct ::apache::thrift::detail::st::struct_private_access;
7698 
7699   //  used by a static_assert in the corresponding source
7700   static constexpr bool __fbthrift_cpp2_gen_json = false;
7701   static constexpr bool __fbthrift_cpp2_gen_nimble = false;
7702   static constexpr bool __fbthrift_cpp2_gen_has_thrift_uri = false;
7703 
7704   void __fbthrift_clear();
7705 
7706  public:
7707   using __fbthrift_cpp2_type = union_with_special_names;
7708   static constexpr bool __fbthrift_cpp2_is_union =
7709     true;
7710 
7711 
7712  public:
7713   enum Type : int {
7714     __EMPTY__ = 0,
7715     get = 1,
7716     getter = 2,
7717     lists = 3,
7718     maps = 4,
7719     name = 5,
7720     name_to_value = 6,
7721     names = 7,
7722     prefix_tree = 8,
7723     sets = 9,
7724     setter = 10,
7725     str = 11,
7726     strings = 12,
7727     type = 13,
7728     value = 14,
7729     value_to_name = 15,
7730     values = 16,
7731     id = 17,
7732     ids = 18,
7733     descriptor = 19,
7734     descriptors = 20,
7735     key = 21,
7736     keys = 22,
7737     annotation = 23,
7738     annotations = 24,
7739     member = 25,
7740     members = 26,
7741     field = 27,
7742     fields = 28,
7743   } ;
7744 
7745   union_with_special_names()
7746       : type_(Type::__EMPTY__) {}
7747 
7748   union_with_special_names(union_with_special_names&& rhs) noexcept
7749       : type_(Type::__EMPTY__) {
7750     if (this == &rhs) { return; }
7751     if (rhs.type_ == Type::__EMPTY__) { return; }
7752     switch (rhs.type_) {
7753       case Type::get:
7754       {
7755         set_get(std::move(rhs.value_.get));
7756         break;
7757       }
7758       case Type::getter:
7759       {
7760         set_getter(std::move(rhs.value_.getter));
7761         break;
7762       }
7763       case Type::lists:
7764       {
7765         set_lists(std::move(rhs.value_.lists));
7766         break;
7767       }
7768       case Type::maps:
7769       {
7770         set_maps(std::move(rhs.value_.maps));
7771         break;
7772       }
7773       case Type::name:
7774       {
7775         set_name(std::move(rhs.value_.name));
7776         break;
7777       }
7778       case Type::name_to_value:
7779       {
7780         set_name_to_value(std::move(rhs.value_.name_to_value));
7781         break;
7782       }
7783       case Type::names:
7784       {
7785         set_names(std::move(rhs.value_.names));
7786         break;
7787       }
7788       case Type::prefix_tree:
7789       {
7790         set_prefix_tree(std::move(rhs.value_.prefix_tree));
7791         break;
7792       }
7793       case Type::sets:
7794       {
7795         set_sets(std::move(rhs.value_.sets));
7796         break;
7797       }
7798       case Type::setter:
7799       {
7800         set_setter(std::move(rhs.value_.setter));
7801         break;
7802       }
7803       case Type::str:
7804       {
7805         set_str(std::move(rhs.value_.str));
7806         break;
7807       }
7808       case Type::strings:
7809       {
7810         set_strings(std::move(rhs.value_.strings));
7811         break;
7812       }
7813       case Type::type:
7814       {
7815         set_type(std::move(rhs.value_.type));
7816         break;
7817       }
7818       case Type::value:
7819       {
7820         set_value(std::move(rhs.value_.value));
7821         break;
7822       }
7823       case Type::value_to_name:
7824       {
7825         set_value_to_name(std::move(rhs.value_.value_to_name));
7826         break;
7827       }
7828       case Type::values:
7829       {
7830         set_values(std::move(rhs.value_.values));
7831         break;
7832       }
7833       case Type::id:
7834       {
7835         set_id(std::move(rhs.value_.id));
7836         break;
7837       }
7838       case Type::ids:
7839       {
7840         set_ids(std::move(rhs.value_.ids));
7841         break;
7842       }
7843       case Type::descriptor:
7844       {
7845         set_descriptor(std::move(rhs.value_.descriptor));
7846         break;
7847       }
7848       case Type::descriptors:
7849       {
7850         set_descriptors(std::move(rhs.value_.descriptors));
7851         break;
7852       }
7853       case Type::key:
7854       {
7855         set_key(std::move(rhs.value_.key));
7856         break;
7857       }
7858       case Type::keys:
7859       {
7860         set_keys(std::move(rhs.value_.keys));
7861         break;
7862       }
7863       case Type::annotation:
7864       {
7865         set_annotation(std::move(rhs.value_.annotation));
7866         break;
7867       }
7868       case Type::annotations:
7869       {
7870         set_annotations(std::move(rhs.value_.annotations));
7871         break;
7872       }
7873       case Type::member:
7874       {
7875         set_member(std::move(rhs.value_.member));
7876         break;
7877       }
7878       case Type::members:
7879       {
7880         set_members(std::move(rhs.value_.members));
7881         break;
7882       }
7883       case Type::field:
7884       {
7885         set_field(std::move(rhs.value_.field));
7886         break;
7887       }
7888       case Type::fields:
7889       {
7890         set_fields(std::move(rhs.value_.fields));
7891         break;
7892       }
7893       default:
7894       {
7895         assert(false);
7896         break;
7897       }
7898     }
7899     apache::thrift::clear(rhs);
7900   }
7901 
7902   union_with_special_names(const union_with_special_names& rhs)
7903       : type_(Type::__EMPTY__) {
7904     if (this == &rhs) { return; }
7905     if (rhs.type_ == Type::__EMPTY__) { return; }
7906     switch (rhs.type_) {
7907       case Type::get:
7908       {
7909         set_get(rhs.value_.get);
7910         break;
7911       }
7912       case Type::getter:
7913       {
7914         set_getter(rhs.value_.getter);
7915         break;
7916       }
7917       case Type::lists:
7918       {
7919         set_lists(rhs.value_.lists);
7920         break;
7921       }
7922       case Type::maps:
7923       {
7924         set_maps(rhs.value_.maps);
7925         break;
7926       }
7927       case Type::name:
7928       {
7929         set_name(rhs.value_.name);
7930         break;
7931       }
7932       case Type::name_to_value:
7933       {
7934         set_name_to_value(rhs.value_.name_to_value);
7935         break;
7936       }
7937       case Type::names:
7938       {
7939         set_names(rhs.value_.names);
7940         break;
7941       }
7942       case Type::prefix_tree:
7943       {
7944         set_prefix_tree(rhs.value_.prefix_tree);
7945         break;
7946       }
7947       case Type::sets:
7948       {
7949         set_sets(rhs.value_.sets);
7950         break;
7951       }
7952       case Type::setter:
7953       {
7954         set_setter(rhs.value_.setter);
7955         break;
7956       }
7957       case Type::str:
7958       {
7959         set_str(rhs.value_.str);
7960         break;
7961       }
7962       case Type::strings:
7963       {
7964         set_strings(rhs.value_.strings);
7965         break;
7966       }
7967       case Type::type:
7968       {
7969         set_type(rhs.value_.type);
7970         break;
7971       }
7972       case Type::value:
7973       {
7974         set_value(rhs.value_.value);
7975         break;
7976       }
7977       case Type::value_to_name:
7978       {
7979         set_value_to_name(rhs.value_.value_to_name);
7980         break;
7981       }
7982       case Type::values:
7983       {
7984         set_values(rhs.value_.values);
7985         break;
7986       }
7987       case Type::id:
7988       {
7989         set_id(rhs.value_.id);
7990         break;
7991       }
7992       case Type::ids:
7993       {
7994         set_ids(rhs.value_.ids);
7995         break;
7996       }
7997       case Type::descriptor:
7998       {
7999         set_descriptor(rhs.value_.descriptor);
8000         break;
8001       }
8002       case Type::descriptors:
8003       {
8004         set_descriptors(rhs.value_.descriptors);
8005         break;
8006       }
8007       case Type::key:
8008       {
8009         set_key(rhs.value_.key);
8010         break;
8011       }
8012       case Type::keys:
8013       {
8014         set_keys(rhs.value_.keys);
8015         break;
8016       }
8017       case Type::annotation:
8018       {
8019         set_annotation(rhs.value_.annotation);
8020         break;
8021       }
8022       case Type::annotations:
8023       {
8024         set_annotations(rhs.value_.annotations);
8025         break;
8026       }
8027       case Type::member:
8028       {
8029         set_member(rhs.value_.member);
8030         break;
8031       }
8032       case Type::members:
8033       {
8034         set_members(rhs.value_.members);
8035         break;
8036       }
8037       case Type::field:
8038       {
8039         set_field(rhs.value_.field);
8040         break;
8041       }
8042       case Type::fields:
8043       {
8044         set_fields(rhs.value_.fields);
8045         break;
8046       }
8047       default:
8048       {
8049         assert(false);
8050         break;
8051       }
8052     }
8053   }
8054 
8055   union_with_special_names& operator=(union_with_special_names&& rhs) noexcept {
8056     if (this == &rhs) { return *this; }
8057     __fbthrift_clear();
8058     if (rhs.type_ == Type::__EMPTY__) { return *this; }
8059     switch (rhs.type_) {
8060       case Type::get:
8061       {
8062         set_get(std::move(rhs.value_.get));
8063         break;
8064       }
8065       case Type::getter:
8066       {
8067         set_getter(std::move(rhs.value_.getter));
8068         break;
8069       }
8070       case Type::lists:
8071       {
8072         set_lists(std::move(rhs.value_.lists));
8073         break;
8074       }
8075       case Type::maps:
8076       {
8077         set_maps(std::move(rhs.value_.maps));
8078         break;
8079       }
8080       case Type::name:
8081       {
8082         set_name(std::move(rhs.value_.name));
8083         break;
8084       }
8085       case Type::name_to_value:
8086       {
8087         set_name_to_value(std::move(rhs.value_.name_to_value));
8088         break;
8089       }
8090       case Type::names:
8091       {
8092         set_names(std::move(rhs.value_.names));
8093         break;
8094       }
8095       case Type::prefix_tree:
8096       {
8097         set_prefix_tree(std::move(rhs.value_.prefix_tree));
8098         break;
8099       }
8100       case Type::sets:
8101       {
8102         set_sets(std::move(rhs.value_.sets));
8103         break;
8104       }
8105       case Type::setter:
8106       {
8107         set_setter(std::move(rhs.value_.setter));
8108         break;
8109       }
8110       case Type::str:
8111       {
8112         set_str(std::move(rhs.value_.str));
8113         break;
8114       }
8115       case Type::strings:
8116       {
8117         set_strings(std::move(rhs.value_.strings));
8118         break;
8119       }
8120       case Type::type:
8121       {
8122         set_type(std::move(rhs.value_.type));
8123         break;
8124       }
8125       case Type::value:
8126       {
8127         set_value(std::move(rhs.value_.value));
8128         break;
8129       }
8130       case Type::value_to_name:
8131       {
8132         set_value_to_name(std::move(rhs.value_.value_to_name));
8133         break;
8134       }
8135       case Type::values:
8136       {
8137         set_values(std::move(rhs.value_.values));
8138         break;
8139       }
8140       case Type::id:
8141       {
8142         set_id(std::move(rhs.value_.id));
8143         break;
8144       }
8145       case Type::ids:
8146       {
8147         set_ids(std::move(rhs.value_.ids));
8148         break;
8149       }
8150       case Type::descriptor:
8151       {
8152         set_descriptor(std::move(rhs.value_.descriptor));
8153         break;
8154       }
8155       case Type::descriptors:
8156       {
8157         set_descriptors(std::move(rhs.value_.descriptors));
8158         break;
8159       }
8160       case Type::key:
8161       {
8162         set_key(std::move(rhs.value_.key));
8163         break;
8164       }
8165       case Type::keys:
8166       {
8167         set_keys(std::move(rhs.value_.keys));
8168         break;
8169       }
8170       case Type::annotation:
8171       {
8172         set_annotation(std::move(rhs.value_.annotation));
8173         break;
8174       }
8175       case Type::annotations:
8176       {
8177         set_annotations(std::move(rhs.value_.annotations));
8178         break;
8179       }
8180       case Type::member:
8181       {
8182         set_member(std::move(rhs.value_.member));
8183         break;
8184       }
8185       case Type::members:
8186       {
8187         set_members(std::move(rhs.value_.members));
8188         break;
8189       }
8190       case Type::field:
8191       {
8192         set_field(std::move(rhs.value_.field));
8193         break;
8194       }
8195       case Type::fields:
8196       {
8197         set_fields(std::move(rhs.value_.fields));
8198         break;
8199       }
8200       default:
8201       {
8202         assert(false);
8203         break;
8204       }
8205     }
8206     apache::thrift::clear(rhs);
8207     return *this;
8208   }
8209 
8210   union_with_special_names& operator=(const union_with_special_names& rhs) {
8211     if (this == &rhs) { return *this; }
8212     __fbthrift_clear();
8213     if (rhs.type_ == Type::__EMPTY__) { return *this; }
8214     switch (rhs.type_) {
8215       case Type::get:
8216       {
8217         set_get(rhs.value_.get);
8218         break;
8219       }
8220       case Type::getter:
8221       {
8222         set_getter(rhs.value_.getter);
8223         break;
8224       }
8225       case Type::lists:
8226       {
8227         set_lists(rhs.value_.lists);
8228         break;
8229       }
8230       case Type::maps:
8231       {
8232         set_maps(rhs.value_.maps);
8233         break;
8234       }
8235       case Type::name:
8236       {
8237         set_name(rhs.value_.name);
8238         break;
8239       }
8240       case Type::name_to_value:
8241       {
8242         set_name_to_value(rhs.value_.name_to_value);
8243         break;
8244       }
8245       case Type::names:
8246       {
8247         set_names(rhs.value_.names);
8248         break;
8249       }
8250       case Type::prefix_tree:
8251       {
8252         set_prefix_tree(rhs.value_.prefix_tree);
8253         break;
8254       }
8255       case Type::sets:
8256       {
8257         set_sets(rhs.value_.sets);
8258         break;
8259       }
8260       case Type::setter:
8261       {
8262         set_setter(rhs.value_.setter);
8263         break;
8264       }
8265       case Type::str:
8266       {
8267         set_str(rhs.value_.str);
8268         break;
8269       }
8270       case Type::strings:
8271       {
8272         set_strings(rhs.value_.strings);
8273         break;
8274       }
8275       case Type::type:
8276       {
8277         set_type(rhs.value_.type);
8278         break;
8279       }
8280       case Type::value:
8281       {
8282         set_value(rhs.value_.value);
8283         break;
8284       }
8285       case Type::value_to_name:
8286       {
8287         set_value_to_name(rhs.value_.value_to_name);
8288         break;
8289       }
8290       case Type::values:
8291       {
8292         set_values(rhs.value_.values);
8293         break;
8294       }
8295       case Type::id:
8296       {
8297         set_id(rhs.value_.id);
8298         break;
8299       }
8300       case Type::ids:
8301       {
8302         set_ids(rhs.value_.ids);
8303         break;
8304       }
8305       case Type::descriptor:
8306       {
8307         set_descriptor(rhs.value_.descriptor);
8308         break;
8309       }
8310       case Type::descriptors:
8311       {
8312         set_descriptors(rhs.value_.descriptors);
8313         break;
8314       }
8315       case Type::key:
8316       {
8317         set_key(rhs.value_.key);
8318         break;
8319       }
8320       case Type::keys:
8321       {
8322         set_keys(rhs.value_.keys);
8323         break;
8324       }
8325       case Type::annotation:
8326       {
8327         set_annotation(rhs.value_.annotation);
8328         break;
8329       }
8330       case Type::annotations:
8331       {
8332         set_annotations(rhs.value_.annotations);
8333         break;
8334       }
8335       case Type::member:
8336       {
8337         set_member(rhs.value_.member);
8338         break;
8339       }
8340       case Type::members:
8341       {
8342         set_members(rhs.value_.members);
8343         break;
8344       }
8345       case Type::field:
8346       {
8347         set_field(rhs.value_.field);
8348         break;
8349       }
8350       case Type::fields:
8351       {
8352         set_fields(rhs.value_.fields);
8353         break;
8354       }
8355       default:
8356       {
8357         assert(false);
8358         break;
8359       }
8360     }
8361     return *this;
8362   }
8363 
8364   ~union_with_special_names() {
8365     apache::thrift::clear(*this);
8366   }
8367   union storage_type {
8368     ::std::int32_t get;
8369     ::std::int32_t getter;
8370     ::std::int32_t lists;
8371     ::std::int32_t maps;
8372     ::std::int32_t name;
8373     ::std::int32_t name_to_value;
8374     ::std::int32_t names;
8375     ::std::int32_t prefix_tree;
8376     ::std::int32_t sets;
8377     ::std::int32_t setter;
8378     ::std::int32_t str;
8379     ::std::int32_t strings;
8380     ::std::int32_t type;
8381     ::std::int32_t value;
8382     ::std::int32_t value_to_name;
8383     ::std::int32_t values;
8384     ::std::int32_t id;
8385     ::std::int32_t ids;
8386     ::std::int32_t descriptor;
8387     ::std::int32_t descriptors;
8388     ::std::int32_t key;
8389     ::std::int32_t keys;
8390     ::std::int32_t annotation;
8391     ::std::int32_t annotations;
8392     ::std::int32_t member;
8393     ::std::int32_t members;
8394     ::std::int32_t field;
8395     ::std::int32_t fields;
8396 
8397     storage_type() {}
8398     ~storage_type() {}
8399   } ;
8400 
8401   bool operator==(const union_with_special_names&) const;
8402   bool operator<(const union_with_special_names&) const;
8403 
8404   ::std::int32_t& set_get(::std::int32_t t = ::std::int32_t()) {
8405     __fbthrift_clear();
8406     type_ = Type::get;
8407     ::new (std::addressof(value_.get)) ::std::int32_t(t);
8408     return value_.get;
8409   }
8410 
8411   ::std::int32_t& set_getter(::std::int32_t t = ::std::int32_t()) {
8412     __fbthrift_clear();
8413     type_ = Type::getter;
8414     ::new (std::addressof(value_.getter)) ::std::int32_t(t);
8415     return value_.getter;
8416   }
8417 
8418   ::std::int32_t& set_lists(::std::int32_t t = ::std::int32_t()) {
8419     __fbthrift_clear();
8420     type_ = Type::lists;
8421     ::new (std::addressof(value_.lists)) ::std::int32_t(t);
8422     return value_.lists;
8423   }
8424 
8425   ::std::int32_t& set_maps(::std::int32_t t = ::std::int32_t()) {
8426     __fbthrift_clear();
8427     type_ = Type::maps;
8428     ::new (std::addressof(value_.maps)) ::std::int32_t(t);
8429     return value_.maps;
8430   }
8431 
8432   ::std::int32_t& set_name(::std::int32_t t = ::std::int32_t()) {
8433     __fbthrift_clear();
8434     type_ = Type::name;
8435     ::new (std::addressof(value_.name)) ::std::int32_t(t);
8436     return value_.name;
8437   }
8438 
8439   ::std::int32_t& set_name_to_value(::std::int32_t t = ::std::int32_t()) {
8440     __fbthrift_clear();
8441     type_ = Type::name_to_value;
8442     ::new (std::addressof(value_.name_to_value)) ::std::int32_t(t);
8443     return value_.name_to_value;
8444   }
8445 
8446   ::std::int32_t& set_names(::std::int32_t t = ::std::int32_t()) {
8447     __fbthrift_clear();
8448     type_ = Type::names;
8449     ::new (std::addressof(value_.names)) ::std::int32_t(t);
8450     return value_.names;
8451   }
8452 
8453   ::std::int32_t& set_prefix_tree(::std::int32_t t = ::std::int32_t()) {
8454     __fbthrift_clear();
8455     type_ = Type::prefix_tree;
8456     ::new (std::addressof(value_.prefix_tree)) ::std::int32_t(t);
8457     return value_.prefix_tree;
8458   }
8459 
8460   ::std::int32_t& set_sets(::std::int32_t t = ::std::int32_t()) {
8461     __fbthrift_clear();
8462     type_ = Type::sets;
8463     ::new (std::addressof(value_.sets)) ::std::int32_t(t);
8464     return value_.sets;
8465   }
8466 
8467   ::std::int32_t& set_setter(::std::int32_t t = ::std::int32_t()) {
8468     __fbthrift_clear();
8469     type_ = Type::setter;
8470     ::new (std::addressof(value_.setter)) ::std::int32_t(t);
8471     return value_.setter;
8472   }
8473 
8474   ::std::int32_t& set_str(::std::int32_t t = ::std::int32_t()) {
8475     __fbthrift_clear();
8476     type_ = Type::str;
8477     ::new (std::addressof(value_.str)) ::std::int32_t(t);
8478     return value_.str;
8479   }
8480 
8481   ::std::int32_t& set_strings(::std::int32_t t = ::std::int32_t()) {
8482     __fbthrift_clear();
8483     type_ = Type::strings;
8484     ::new (std::addressof(value_.strings)) ::std::int32_t(t);
8485     return value_.strings;
8486   }
8487 
8488   ::std::int32_t& set_type(::std::int32_t t = ::std::int32_t()) {
8489     __fbthrift_clear();
8490     type_ = Type::type;
8491     ::new (std::addressof(value_.type)) ::std::int32_t(t);
8492     return value_.type;
8493   }
8494 
8495   ::std::int32_t& set_value(::std::int32_t t = ::std::int32_t()) {
8496     __fbthrift_clear();
8497     type_ = Type::value;
8498     ::new (std::addressof(value_.value)) ::std::int32_t(t);
8499     return value_.value;
8500   }
8501 
8502   ::std::int32_t& set_value_to_name(::std::int32_t t = ::std::int32_t()) {
8503     __fbthrift_clear();
8504     type_ = Type::value_to_name;
8505     ::new (std::addressof(value_.value_to_name)) ::std::int32_t(t);
8506     return value_.value_to_name;
8507   }
8508 
8509   ::std::int32_t& set_values(::std::int32_t t = ::std::int32_t()) {
8510     __fbthrift_clear();
8511     type_ = Type::values;
8512     ::new (std::addressof(value_.values)) ::std::int32_t(t);
8513     return value_.values;
8514   }
8515 
8516   ::std::int32_t& set_id(::std::int32_t t = ::std::int32_t()) {
8517     __fbthrift_clear();
8518     type_ = Type::id;
8519     ::new (std::addressof(value_.id)) ::std::int32_t(t);
8520     return value_.id;
8521   }
8522 
8523   ::std::int32_t& set_ids(::std::int32_t t = ::std::int32_t()) {
8524     __fbthrift_clear();
8525     type_ = Type::ids;
8526     ::new (std::addressof(value_.ids)) ::std::int32_t(t);
8527     return value_.ids;
8528   }
8529 
8530   ::std::int32_t& set_descriptor(::std::int32_t t = ::std::int32_t()) {
8531     __fbthrift_clear();
8532     type_ = Type::descriptor;
8533     ::new (std::addressof(value_.descriptor)) ::std::int32_t(t);
8534     return value_.descriptor;
8535   }
8536 
8537   ::std::int32_t& set_descriptors(::std::int32_t t = ::std::int32_t()) {
8538     __fbthrift_clear();
8539     type_ = Type::descriptors;
8540     ::new (std::addressof(value_.descriptors)) ::std::int32_t(t);
8541     return value_.descriptors;
8542   }
8543 
8544   ::std::int32_t& set_key(::std::int32_t t = ::std::int32_t()) {
8545     __fbthrift_clear();
8546     type_ = Type::key;
8547     ::new (std::addressof(value_.key)) ::std::int32_t(t);
8548     return value_.key;
8549   }
8550 
8551   ::std::int32_t& set_keys(::std::int32_t t = ::std::int32_t()) {
8552     __fbthrift_clear();
8553     type_ = Type::keys;
8554     ::new (std::addressof(value_.keys)) ::std::int32_t(t);
8555     return value_.keys;
8556   }
8557 
8558   ::std::int32_t& set_annotation(::std::int32_t t = ::std::int32_t()) {
8559     __fbthrift_clear();
8560     type_ = Type::annotation;
8561     ::new (std::addressof(value_.annotation)) ::std::int32_t(t);
8562     return value_.annotation;
8563   }
8564 
8565   ::std::int32_t& set_annotations(::std::int32_t t = ::std::int32_t()) {
8566     __fbthrift_clear();
8567     type_ = Type::annotations;
8568     ::new (std::addressof(value_.annotations)) ::std::int32_t(t);
8569     return value_.annotations;
8570   }
8571 
8572   ::std::int32_t& set_member(::std::int32_t t = ::std::int32_t()) {
8573     __fbthrift_clear();
8574     type_ = Type::member;
8575     ::new (std::addressof(value_.member)) ::std::int32_t(t);
8576     return value_.member;
8577   }
8578 
8579   ::std::int32_t& set_members(::std::int32_t t = ::std::int32_t()) {
8580     __fbthrift_clear();
8581     type_ = Type::members;
8582     ::new (std::addressof(value_.members)) ::std::int32_t(t);
8583     return value_.members;
8584   }
8585 
8586   ::std::int32_t& set_field(::std::int32_t t = ::std::int32_t()) {
8587     __fbthrift_clear();
8588     type_ = Type::field;
8589     ::new (std::addressof(value_.field)) ::std::int32_t(t);
8590     return value_.field;
8591   }
8592 
8593   ::std::int32_t& set_fields(::std::int32_t t = ::std::int32_t()) {
8594     __fbthrift_clear();
8595     type_ = Type::fields;
8596     ::new (std::addressof(value_.fields)) ::std::int32_t(t);
8597     return value_.fields;
8598   }
8599 
8600   ::std::int32_t const& get_get() const {
8601     if (type_ != Type::get) {
8602       ::apache::thrift::detail::throw_on_bad_field_access();
8603     }
8604     return value_.get;
8605   }
8606 
8607   ::std::int32_t const& get_getter() const {
8608     if (type_ != Type::getter) {
8609       ::apache::thrift::detail::throw_on_bad_field_access();
8610     }
8611     return value_.getter;
8612   }
8613 
8614   ::std::int32_t const& get_lists() const {
8615     if (type_ != Type::lists) {
8616       ::apache::thrift::detail::throw_on_bad_field_access();
8617     }
8618     return value_.lists;
8619   }
8620 
8621   ::std::int32_t const& get_maps() const {
8622     if (type_ != Type::maps) {
8623       ::apache::thrift::detail::throw_on_bad_field_access();
8624     }
8625     return value_.maps;
8626   }
8627 
8628   ::std::int32_t const& get_name() const {
8629     if (type_ != Type::name) {
8630       ::apache::thrift::detail::throw_on_bad_field_access();
8631     }
8632     return value_.name;
8633   }
8634 
8635   ::std::int32_t const& get_name_to_value() const {
8636     if (type_ != Type::name_to_value) {
8637       ::apache::thrift::detail::throw_on_bad_field_access();
8638     }
8639     return value_.name_to_value;
8640   }
8641 
8642   ::std::int32_t const& get_names() const {
8643     if (type_ != Type::names) {
8644       ::apache::thrift::detail::throw_on_bad_field_access();
8645     }
8646     return value_.names;
8647   }
8648 
8649   ::std::int32_t const& get_prefix_tree() const {
8650     if (type_ != Type::prefix_tree) {
8651       ::apache::thrift::detail::throw_on_bad_field_access();
8652     }
8653     return value_.prefix_tree;
8654   }
8655 
8656   ::std::int32_t const& get_sets() const {
8657     if (type_ != Type::sets) {
8658       ::apache::thrift::detail::throw_on_bad_field_access();
8659     }
8660     return value_.sets;
8661   }
8662 
8663   ::std::int32_t const& get_setter() const {
8664     if (type_ != Type::setter) {
8665       ::apache::thrift::detail::throw_on_bad_field_access();
8666     }
8667     return value_.setter;
8668   }
8669 
8670   ::std::int32_t const& get_str() const {
8671     if (type_ != Type::str) {
8672       ::apache::thrift::detail::throw_on_bad_field_access();
8673     }
8674     return value_.str;
8675   }
8676 
8677   ::std::int32_t const& get_strings() const {
8678     if (type_ != Type::strings) {
8679       ::apache::thrift::detail::throw_on_bad_field_access();
8680     }
8681     return value_.strings;
8682   }
8683 
8684   ::std::int32_t const& get_type() const {
8685     if (type_ != Type::type) {
8686       ::apache::thrift::detail::throw_on_bad_field_access();
8687     }
8688     return value_.type;
8689   }
8690 
8691   ::std::int32_t const& get_value() const {
8692     if (type_ != Type::value) {
8693       ::apache::thrift::detail::throw_on_bad_field_access();
8694     }
8695     return value_.value;
8696   }
8697 
8698   ::std::int32_t const& get_value_to_name() const {
8699     if (type_ != Type::value_to_name) {
8700       ::apache::thrift::detail::throw_on_bad_field_access();
8701     }
8702     return value_.value_to_name;
8703   }
8704 
8705   ::std::int32_t const& get_values() const {
8706     if (type_ != Type::values) {
8707       ::apache::thrift::detail::throw_on_bad_field_access();
8708     }
8709     return value_.values;
8710   }
8711 
8712   ::std::int32_t const& get_id() const {
8713     if (type_ != Type::id) {
8714       ::apache::thrift::detail::throw_on_bad_field_access();
8715     }
8716     return value_.id;
8717   }
8718 
8719   ::std::int32_t const& get_ids() const {
8720     if (type_ != Type::ids) {
8721       ::apache::thrift::detail::throw_on_bad_field_access();
8722     }
8723     return value_.ids;
8724   }
8725 
8726   ::std::int32_t const& get_descriptor() const {
8727     if (type_ != Type::descriptor) {
8728       ::apache::thrift::detail::throw_on_bad_field_access();
8729     }
8730     return value_.descriptor;
8731   }
8732 
8733   ::std::int32_t const& get_descriptors() const {
8734     if (type_ != Type::descriptors) {
8735       ::apache::thrift::detail::throw_on_bad_field_access();
8736     }
8737     return value_.descriptors;
8738   }
8739 
8740   ::std::int32_t const& get_key() const {
8741     if (type_ != Type::key) {
8742       ::apache::thrift::detail::throw_on_bad_field_access();
8743     }
8744     return value_.key;
8745   }
8746 
8747   ::std::int32_t const& get_keys() const {
8748     if (type_ != Type::keys) {
8749       ::apache::thrift::detail::throw_on_bad_field_access();
8750     }
8751     return value_.keys;
8752   }
8753 
8754   ::std::int32_t const& get_annotation() const {
8755     if (type_ != Type::annotation) {
8756       ::apache::thrift::detail::throw_on_bad_field_access();
8757     }
8758     return value_.annotation;
8759   }
8760 
8761   ::std::int32_t const& get_annotations() const {
8762     if (type_ != Type::annotations) {
8763       ::apache::thrift::detail::throw_on_bad_field_access();
8764     }
8765     return value_.annotations;
8766   }
8767 
8768   ::std::int32_t const& get_member() const {
8769     if (type_ != Type::member) {
8770       ::apache::thrift::detail::throw_on_bad_field_access();
8771     }
8772     return value_.member;
8773   }
8774 
8775   ::std::int32_t const& get_members() const {
8776     if (type_ != Type::members) {
8777       ::apache::thrift::detail::throw_on_bad_field_access();
8778     }
8779     return value_.members;
8780   }
8781 
8782   ::std::int32_t const& get_field() const {
8783     if (type_ != Type::field) {
8784       ::apache::thrift::detail::throw_on_bad_field_access();
8785     }
8786     return value_.field;
8787   }
8788 
8789   ::std::int32_t const& get_fields() const {
8790     if (type_ != Type::fields) {
8791       ::apache::thrift::detail::throw_on_bad_field_access();
8792     }
8793     return value_.fields;
8794   }
8795 
8796   ::std::int32_t& mutable_get() {
8797     assert(type_ == Type::get);
8798     return value_.get;
8799   }
8800 
8801   ::std::int32_t& mutable_getter() {
8802     assert(type_ == Type::getter);
8803     return value_.getter;
8804   }
8805 
8806   ::std::int32_t& mutable_lists() {
8807     assert(type_ == Type::lists);
8808     return value_.lists;
8809   }
8810 
8811   ::std::int32_t& mutable_maps() {
8812     assert(type_ == Type::maps);
8813     return value_.maps;
8814   }
8815 
8816   ::std::int32_t& mutable_name() {
8817     assert(type_ == Type::name);
8818     return value_.name;
8819   }
8820 
8821   ::std::int32_t& mutable_name_to_value() {
8822     assert(type_ == Type::name_to_value);
8823     return value_.name_to_value;
8824   }
8825 
8826   ::std::int32_t& mutable_names() {
8827     assert(type_ == Type::names);
8828     return value_.names;
8829   }
8830 
8831   ::std::int32_t& mutable_prefix_tree() {
8832     assert(type_ == Type::prefix_tree);
8833     return value_.prefix_tree;
8834   }
8835 
8836   ::std::int32_t& mutable_sets() {
8837     assert(type_ == Type::sets);
8838     return value_.sets;
8839   }
8840 
8841   ::std::int32_t& mutable_setter() {
8842     assert(type_ == Type::setter);
8843     return value_.setter;
8844   }
8845 
8846   ::std::int32_t& mutable_str() {
8847     assert(type_ == Type::str);
8848     return value_.str;
8849   }
8850 
8851   ::std::int32_t& mutable_strings() {
8852     assert(type_ == Type::strings);
8853     return value_.strings;
8854   }
8855 
8856   ::std::int32_t& mutable_type() {
8857     assert(type_ == Type::type);
8858     return value_.type;
8859   }
8860 
8861   ::std::int32_t& mutable_value() {
8862     assert(type_ == Type::value);
8863     return value_.value;
8864   }
8865 
8866   ::std::int32_t& mutable_value_to_name() {
8867     assert(type_ == Type::value_to_name);
8868     return value_.value_to_name;
8869   }
8870 
8871   ::std::int32_t& mutable_values() {
8872     assert(type_ == Type::values);
8873     return value_.values;
8874   }
8875 
8876   ::std::int32_t& mutable_id() {
8877     assert(type_ == Type::id);
8878     return value_.id;
8879   }
8880 
8881   ::std::int32_t& mutable_ids() {
8882     assert(type_ == Type::ids);
8883     return value_.ids;
8884   }
8885 
8886   ::std::int32_t& mutable_descriptor() {
8887     assert(type_ == Type::descriptor);
8888     return value_.descriptor;
8889   }
8890 
8891   ::std::int32_t& mutable_descriptors() {
8892     assert(type_ == Type::descriptors);
8893     return value_.descriptors;
8894   }
8895 
8896   ::std::int32_t& mutable_key() {
8897     assert(type_ == Type::key);
8898     return value_.key;
8899   }
8900 
8901   ::std::int32_t& mutable_keys() {
8902     assert(type_ == Type::keys);
8903     return value_.keys;
8904   }
8905 
8906   ::std::int32_t& mutable_annotation() {
8907     assert(type_ == Type::annotation);
8908     return value_.annotation;
8909   }
8910 
8911   ::std::int32_t& mutable_annotations() {
8912     assert(type_ == Type::annotations);
8913     return value_.annotations;
8914   }
8915 
8916   ::std::int32_t& mutable_member() {
8917     assert(type_ == Type::member);
8918     return value_.member;
8919   }
8920 
8921   ::std::int32_t& mutable_members() {
8922     assert(type_ == Type::members);
8923     return value_.members;
8924   }
8925 
8926   ::std::int32_t& mutable_field() {
8927     assert(type_ == Type::field);
8928     return value_.field;
8929   }
8930 
8931   ::std::int32_t& mutable_fields() {
8932     assert(type_ == Type::fields);
8933     return value_.fields;
8934   }
8935 
8936   ::std::int32_t move_get() {
8937     assert(type_ == Type::get);
8938     return std::move(value_.get);
8939   }
8940 
8941   ::std::int32_t move_getter() {
8942     assert(type_ == Type::getter);
8943     return std::move(value_.getter);
8944   }
8945 
8946   ::std::int32_t move_lists() {
8947     assert(type_ == Type::lists);
8948     return std::move(value_.lists);
8949   }
8950 
8951   ::std::int32_t move_maps() {
8952     assert(type_ == Type::maps);
8953     return std::move(value_.maps);
8954   }
8955 
8956   ::std::int32_t move_name() {
8957     assert(type_ == Type::name);
8958     return std::move(value_.name);
8959   }
8960 
8961   ::std::int32_t move_name_to_value() {
8962     assert(type_ == Type::name_to_value);
8963     return std::move(value_.name_to_value);
8964   }
8965 
8966   ::std::int32_t move_names() {
8967     assert(type_ == Type::names);
8968     return std::move(value_.names);
8969   }
8970 
8971   ::std::int32_t move_prefix_tree() {
8972     assert(type_ == Type::prefix_tree);
8973     return std::move(value_.prefix_tree);
8974   }
8975 
8976   ::std::int32_t move_sets() {
8977     assert(type_ == Type::sets);
8978     return std::move(value_.sets);
8979   }
8980 
8981   ::std::int32_t move_setter() {
8982     assert(type_ == Type::setter);
8983     return std::move(value_.setter);
8984   }
8985 
8986   ::std::int32_t move_str() {
8987     assert(type_ == Type::str);
8988     return std::move(value_.str);
8989   }
8990 
8991   ::std::int32_t move_strings() {
8992     assert(type_ == Type::strings);
8993     return std::move(value_.strings);
8994   }
8995 
8996   ::std::int32_t move_type() {
8997     assert(type_ == Type::type);
8998     return std::move(value_.type);
8999   }
9000 
9001   ::std::int32_t move_value() {
9002     assert(type_ == Type::value);
9003     return std::move(value_.value);
9004   }
9005 
9006   ::std::int32_t move_value_to_name() {
9007     assert(type_ == Type::value_to_name);
9008     return std::move(value_.value_to_name);
9009   }
9010 
9011   ::std::int32_t move_values() {
9012     assert(type_ == Type::values);
9013     return std::move(value_.values);
9014   }
9015 
9016   ::std::int32_t move_id() {
9017     assert(type_ == Type::id);
9018     return std::move(value_.id);
9019   }
9020 
9021   ::std::int32_t move_ids() {
9022     assert(type_ == Type::ids);
9023     return std::move(value_.ids);
9024   }
9025 
9026   ::std::int32_t move_descriptor() {
9027     assert(type_ == Type::descriptor);
9028     return std::move(value_.descriptor);
9029   }
9030 
9031   ::std::int32_t move_descriptors() {
9032     assert(type_ == Type::descriptors);
9033     return std::move(value_.descriptors);
9034   }
9035 
9036   ::std::int32_t move_key() {
9037     assert(type_ == Type::key);
9038     return std::move(value_.key);
9039   }
9040 
9041   ::std::int32_t move_keys() {
9042     assert(type_ == Type::keys);
9043     return std::move(value_.keys);
9044   }
9045 
9046   ::std::int32_t move_annotation() {
9047     assert(type_ == Type::annotation);
9048     return std::move(value_.annotation);
9049   }
9050 
9051   ::std::int32_t move_annotations() {
9052     assert(type_ == Type::annotations);
9053     return std::move(value_.annotations);
9054   }
9055 
9056   ::std::int32_t move_member() {
9057     assert(type_ == Type::member);
9058     return std::move(value_.member);
9059   }
9060 
9061   ::std::int32_t move_members() {
9062     assert(type_ == Type::members);
9063     return std::move(value_.members);
9064   }
9065 
9066   ::std::int32_t move_field() {
9067     assert(type_ == Type::field);
9068     return std::move(value_.field);
9069   }
9070 
9071   ::std::int32_t move_fields() {
9072     assert(type_ == Type::fields);
9073     return std::move(value_.fields);
9074   }
9075 
9076   template <typename..., typename T = ::std::int32_t>
9077   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> get_ref() const& {
9078     return {value_.get, type_, get, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9079   }
9080 
9081   template <typename..., typename T = ::std::int32_t>
9082   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> get_ref() const&& {
9083     return {std::move(value_.get), type_, get, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9084   }
9085 
9086   template <typename..., typename T = ::std::int32_t>
9087   FOLLY_ERASE ::apache::thrift::union_field_ref<T&> get_ref() & {
9088     return {value_.get, type_, get, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9089   }
9090 
9091   template <typename..., typename T = ::std::int32_t>
9092   FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> get_ref() && {
9093     return {std::move(value_.get), type_, get, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9094   }
9095   template <typename..., typename T = ::std::int32_t>
9096   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> getter_ref() const& {
9097     return {value_.getter, type_, getter, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9098   }
9099 
9100   template <typename..., typename T = ::std::int32_t>
9101   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> getter_ref() const&& {
9102     return {std::move(value_.getter), type_, getter, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9103   }
9104 
9105   template <typename..., typename T = ::std::int32_t>
9106   FOLLY_ERASE ::apache::thrift::union_field_ref<T&> getter_ref() & {
9107     return {value_.getter, type_, getter, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9108   }
9109 
9110   template <typename..., typename T = ::std::int32_t>
9111   FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> getter_ref() && {
9112     return {std::move(value_.getter), type_, getter, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9113   }
9114   template <typename..., typename T = ::std::int32_t>
9115   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> lists_ref() const& {
9116     return {value_.lists, type_, lists, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9117   }
9118 
9119   template <typename..., typename T = ::std::int32_t>
9120   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> lists_ref() const&& {
9121     return {std::move(value_.lists), type_, lists, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9122   }
9123 
9124   template <typename..., typename T = ::std::int32_t>
9125   FOLLY_ERASE ::apache::thrift::union_field_ref<T&> lists_ref() & {
9126     return {value_.lists, type_, lists, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9127   }
9128 
9129   template <typename..., typename T = ::std::int32_t>
9130   FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> lists_ref() && {
9131     return {std::move(value_.lists), type_, lists, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9132   }
9133   template <typename..., typename T = ::std::int32_t>
9134   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> maps_ref() const& {
9135     return {value_.maps, type_, maps, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9136   }
9137 
9138   template <typename..., typename T = ::std::int32_t>
9139   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> maps_ref() const&& {
9140     return {std::move(value_.maps), type_, maps, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9141   }
9142 
9143   template <typename..., typename T = ::std::int32_t>
9144   FOLLY_ERASE ::apache::thrift::union_field_ref<T&> maps_ref() & {
9145     return {value_.maps, type_, maps, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9146   }
9147 
9148   template <typename..., typename T = ::std::int32_t>
9149   FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> maps_ref() && {
9150     return {std::move(value_.maps), type_, maps, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9151   }
9152   template <typename..., typename T = ::std::int32_t>
9153   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> name_ref() const& {
9154     return {value_.name, type_, name, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9155   }
9156 
9157   template <typename..., typename T = ::std::int32_t>
9158   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> name_ref() const&& {
9159     return {std::move(value_.name), type_, name, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9160   }
9161 
9162   template <typename..., typename T = ::std::int32_t>
9163   FOLLY_ERASE ::apache::thrift::union_field_ref<T&> name_ref() & {
9164     return {value_.name, type_, name, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9165   }
9166 
9167   template <typename..., typename T = ::std::int32_t>
9168   FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> name_ref() && {
9169     return {std::move(value_.name), type_, name, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9170   }
9171   template <typename..., typename T = ::std::int32_t>
9172   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> name_to_value_ref() const& {
9173     return {value_.name_to_value, type_, name_to_value, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9174   }
9175 
9176   template <typename..., typename T = ::std::int32_t>
9177   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> name_to_value_ref() const&& {
9178     return {std::move(value_.name_to_value), type_, name_to_value, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9179   }
9180 
9181   template <typename..., typename T = ::std::int32_t>
9182   FOLLY_ERASE ::apache::thrift::union_field_ref<T&> name_to_value_ref() & {
9183     return {value_.name_to_value, type_, name_to_value, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9184   }
9185 
9186   template <typename..., typename T = ::std::int32_t>
9187   FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> name_to_value_ref() && {
9188     return {std::move(value_.name_to_value), type_, name_to_value, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9189   }
9190   template <typename..., typename T = ::std::int32_t>
9191   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> names_ref() const& {
9192     return {value_.names, type_, names, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9193   }
9194 
9195   template <typename..., typename T = ::std::int32_t>
9196   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> names_ref() const&& {
9197     return {std::move(value_.names), type_, names, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9198   }
9199 
9200   template <typename..., typename T = ::std::int32_t>
9201   FOLLY_ERASE ::apache::thrift::union_field_ref<T&> names_ref() & {
9202     return {value_.names, type_, names, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9203   }
9204 
9205   template <typename..., typename T = ::std::int32_t>
9206   FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> names_ref() && {
9207     return {std::move(value_.names), type_, names, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9208   }
9209   template <typename..., typename T = ::std::int32_t>
9210   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> prefix_tree_ref() const& {
9211     return {value_.prefix_tree, type_, prefix_tree, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9212   }
9213 
9214   template <typename..., typename T = ::std::int32_t>
9215   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> prefix_tree_ref() const&& {
9216     return {std::move(value_.prefix_tree), type_, prefix_tree, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9217   }
9218 
9219   template <typename..., typename T = ::std::int32_t>
9220   FOLLY_ERASE ::apache::thrift::union_field_ref<T&> prefix_tree_ref() & {
9221     return {value_.prefix_tree, type_, prefix_tree, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9222   }
9223 
9224   template <typename..., typename T = ::std::int32_t>
9225   FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> prefix_tree_ref() && {
9226     return {std::move(value_.prefix_tree), type_, prefix_tree, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9227   }
9228   template <typename..., typename T = ::std::int32_t>
9229   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> sets_ref() const& {
9230     return {value_.sets, type_, sets, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9231   }
9232 
9233   template <typename..., typename T = ::std::int32_t>
9234   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> sets_ref() const&& {
9235     return {std::move(value_.sets), type_, sets, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9236   }
9237 
9238   template <typename..., typename T = ::std::int32_t>
9239   FOLLY_ERASE ::apache::thrift::union_field_ref<T&> sets_ref() & {
9240     return {value_.sets, type_, sets, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9241   }
9242 
9243   template <typename..., typename T = ::std::int32_t>
9244   FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> sets_ref() && {
9245     return {std::move(value_.sets), type_, sets, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9246   }
9247   template <typename..., typename T = ::std::int32_t>
9248   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> setter_ref() const& {
9249     return {value_.setter, type_, setter, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9250   }
9251 
9252   template <typename..., typename T = ::std::int32_t>
9253   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> setter_ref() const&& {
9254     return {std::move(value_.setter), type_, setter, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9255   }
9256 
9257   template <typename..., typename T = ::std::int32_t>
9258   FOLLY_ERASE ::apache::thrift::union_field_ref<T&> setter_ref() & {
9259     return {value_.setter, type_, setter, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9260   }
9261 
9262   template <typename..., typename T = ::std::int32_t>
9263   FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> setter_ref() && {
9264     return {std::move(value_.setter), type_, setter, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9265   }
9266   template <typename..., typename T = ::std::int32_t>
9267   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> str_ref() const& {
9268     return {value_.str, type_, str, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9269   }
9270 
9271   template <typename..., typename T = ::std::int32_t>
9272   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> str_ref() const&& {
9273     return {std::move(value_.str), type_, str, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9274   }
9275 
9276   template <typename..., typename T = ::std::int32_t>
9277   FOLLY_ERASE ::apache::thrift::union_field_ref<T&> str_ref() & {
9278     return {value_.str, type_, str, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9279   }
9280 
9281   template <typename..., typename T = ::std::int32_t>
9282   FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> str_ref() && {
9283     return {std::move(value_.str), type_, str, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9284   }
9285   template <typename..., typename T = ::std::int32_t>
9286   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> strings_ref() const& {
9287     return {value_.strings, type_, strings, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9288   }
9289 
9290   template <typename..., typename T = ::std::int32_t>
9291   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> strings_ref() const&& {
9292     return {std::move(value_.strings), type_, strings, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9293   }
9294 
9295   template <typename..., typename T = ::std::int32_t>
9296   FOLLY_ERASE ::apache::thrift::union_field_ref<T&> strings_ref() & {
9297     return {value_.strings, type_, strings, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9298   }
9299 
9300   template <typename..., typename T = ::std::int32_t>
9301   FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> strings_ref() && {
9302     return {std::move(value_.strings), type_, strings, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9303   }
9304   template <typename..., typename T = ::std::int32_t>
9305   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> type_ref() const& {
9306     return {value_.type, type_, type, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9307   }
9308 
9309   template <typename..., typename T = ::std::int32_t>
9310   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> type_ref() const&& {
9311     return {std::move(value_.type), type_, type, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9312   }
9313 
9314   template <typename..., typename T = ::std::int32_t>
9315   FOLLY_ERASE ::apache::thrift::union_field_ref<T&> type_ref() & {
9316     return {value_.type, type_, type, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9317   }
9318 
9319   template <typename..., typename T = ::std::int32_t>
9320   FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> type_ref() && {
9321     return {std::move(value_.type), type_, type, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9322   }
9323   template <typename..., typename T = ::std::int32_t>
9324   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> value_ref() const& {
9325     return {value_.value, type_, value, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9326   }
9327 
9328   template <typename..., typename T = ::std::int32_t>
9329   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> value_ref() const&& {
9330     return {std::move(value_.value), type_, value, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9331   }
9332 
9333   template <typename..., typename T = ::std::int32_t>
9334   FOLLY_ERASE ::apache::thrift::union_field_ref<T&> value_ref() & {
9335     return {value_.value, type_, value, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9336   }
9337 
9338   template <typename..., typename T = ::std::int32_t>
9339   FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> value_ref() && {
9340     return {std::move(value_.value), type_, value, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9341   }
9342   template <typename..., typename T = ::std::int32_t>
9343   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> value_to_name_ref() const& {
9344     return {value_.value_to_name, type_, value_to_name, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9345   }
9346 
9347   template <typename..., typename T = ::std::int32_t>
9348   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> value_to_name_ref() const&& {
9349     return {std::move(value_.value_to_name), type_, value_to_name, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9350   }
9351 
9352   template <typename..., typename T = ::std::int32_t>
9353   FOLLY_ERASE ::apache::thrift::union_field_ref<T&> value_to_name_ref() & {
9354     return {value_.value_to_name, type_, value_to_name, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9355   }
9356 
9357   template <typename..., typename T = ::std::int32_t>
9358   FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> value_to_name_ref() && {
9359     return {std::move(value_.value_to_name), type_, value_to_name, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9360   }
9361   template <typename..., typename T = ::std::int32_t>
9362   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> values_ref() const& {
9363     return {value_.values, type_, values, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9364   }
9365 
9366   template <typename..., typename T = ::std::int32_t>
9367   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> values_ref() const&& {
9368     return {std::move(value_.values), type_, values, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9369   }
9370 
9371   template <typename..., typename T = ::std::int32_t>
9372   FOLLY_ERASE ::apache::thrift::union_field_ref<T&> values_ref() & {
9373     return {value_.values, type_, values, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9374   }
9375 
9376   template <typename..., typename T = ::std::int32_t>
9377   FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> values_ref() && {
9378     return {std::move(value_.values), type_, values, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9379   }
9380   template <typename..., typename T = ::std::int32_t>
9381   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> id_ref() const& {
9382     return {value_.id, type_, id, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9383   }
9384 
9385   template <typename..., typename T = ::std::int32_t>
9386   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> id_ref() const&& {
9387     return {std::move(value_.id), type_, id, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9388   }
9389 
9390   template <typename..., typename T = ::std::int32_t>
9391   FOLLY_ERASE ::apache::thrift::union_field_ref<T&> id_ref() & {
9392     return {value_.id, type_, id, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9393   }
9394 
9395   template <typename..., typename T = ::std::int32_t>
9396   FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> id_ref() && {
9397     return {std::move(value_.id), type_, id, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9398   }
9399   template <typename..., typename T = ::std::int32_t>
9400   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> ids_ref() const& {
9401     return {value_.ids, type_, ids, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9402   }
9403 
9404   template <typename..., typename T = ::std::int32_t>
9405   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> ids_ref() const&& {
9406     return {std::move(value_.ids), type_, ids, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9407   }
9408 
9409   template <typename..., typename T = ::std::int32_t>
9410   FOLLY_ERASE ::apache::thrift::union_field_ref<T&> ids_ref() & {
9411     return {value_.ids, type_, ids, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9412   }
9413 
9414   template <typename..., typename T = ::std::int32_t>
9415   FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> ids_ref() && {
9416     return {std::move(value_.ids), type_, ids, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9417   }
9418   template <typename..., typename T = ::std::int32_t>
9419   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> descriptor_ref() const& {
9420     return {value_.descriptor, type_, descriptor, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9421   }
9422 
9423   template <typename..., typename T = ::std::int32_t>
9424   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> descriptor_ref() const&& {
9425     return {std::move(value_.descriptor), type_, descriptor, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9426   }
9427 
9428   template <typename..., typename T = ::std::int32_t>
9429   FOLLY_ERASE ::apache::thrift::union_field_ref<T&> descriptor_ref() & {
9430     return {value_.descriptor, type_, descriptor, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9431   }
9432 
9433   template <typename..., typename T = ::std::int32_t>
9434   FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> descriptor_ref() && {
9435     return {std::move(value_.descriptor), type_, descriptor, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9436   }
9437   template <typename..., typename T = ::std::int32_t>
9438   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> descriptors_ref() const& {
9439     return {value_.descriptors, type_, descriptors, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9440   }
9441 
9442   template <typename..., typename T = ::std::int32_t>
9443   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> descriptors_ref() const&& {
9444     return {std::move(value_.descriptors), type_, descriptors, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9445   }
9446 
9447   template <typename..., typename T = ::std::int32_t>
9448   FOLLY_ERASE ::apache::thrift::union_field_ref<T&> descriptors_ref() & {
9449     return {value_.descriptors, type_, descriptors, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9450   }
9451 
9452   template <typename..., typename T = ::std::int32_t>
9453   FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> descriptors_ref() && {
9454     return {std::move(value_.descriptors), type_, descriptors, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9455   }
9456   template <typename..., typename T = ::std::int32_t>
9457   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> key_ref() const& {
9458     return {value_.key, type_, key, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9459   }
9460 
9461   template <typename..., typename T = ::std::int32_t>
9462   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> key_ref() const&& {
9463     return {std::move(value_.key), type_, key, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9464   }
9465 
9466   template <typename..., typename T = ::std::int32_t>
9467   FOLLY_ERASE ::apache::thrift::union_field_ref<T&> key_ref() & {
9468     return {value_.key, type_, key, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9469   }
9470 
9471   template <typename..., typename T = ::std::int32_t>
9472   FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> key_ref() && {
9473     return {std::move(value_.key), type_, key, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9474   }
9475   template <typename..., typename T = ::std::int32_t>
9476   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> keys_ref() const& {
9477     return {value_.keys, type_, keys, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9478   }
9479 
9480   template <typename..., typename T = ::std::int32_t>
9481   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> keys_ref() const&& {
9482     return {std::move(value_.keys), type_, keys, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9483   }
9484 
9485   template <typename..., typename T = ::std::int32_t>
9486   FOLLY_ERASE ::apache::thrift::union_field_ref<T&> keys_ref() & {
9487     return {value_.keys, type_, keys, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9488   }
9489 
9490   template <typename..., typename T = ::std::int32_t>
9491   FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> keys_ref() && {
9492     return {std::move(value_.keys), type_, keys, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9493   }
9494   template <typename..., typename T = ::std::int32_t>
9495   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> annotation_ref() const& {
9496     return {value_.annotation, type_, annotation, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9497   }
9498 
9499   template <typename..., typename T = ::std::int32_t>
9500   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> annotation_ref() const&& {
9501     return {std::move(value_.annotation), type_, annotation, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9502   }
9503 
9504   template <typename..., typename T = ::std::int32_t>
9505   FOLLY_ERASE ::apache::thrift::union_field_ref<T&> annotation_ref() & {
9506     return {value_.annotation, type_, annotation, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9507   }
9508 
9509   template <typename..., typename T = ::std::int32_t>
9510   FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> annotation_ref() && {
9511     return {std::move(value_.annotation), type_, annotation, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9512   }
9513   template <typename..., typename T = ::std::int32_t>
9514   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> annotations_ref() const& {
9515     return {value_.annotations, type_, annotations, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9516   }
9517 
9518   template <typename..., typename T = ::std::int32_t>
9519   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> annotations_ref() const&& {
9520     return {std::move(value_.annotations), type_, annotations, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9521   }
9522 
9523   template <typename..., typename T = ::std::int32_t>
9524   FOLLY_ERASE ::apache::thrift::union_field_ref<T&> annotations_ref() & {
9525     return {value_.annotations, type_, annotations, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9526   }
9527 
9528   template <typename..., typename T = ::std::int32_t>
9529   FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> annotations_ref() && {
9530     return {std::move(value_.annotations), type_, annotations, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9531   }
9532   template <typename..., typename T = ::std::int32_t>
9533   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> member_ref() const& {
9534     return {value_.member, type_, member, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9535   }
9536 
9537   template <typename..., typename T = ::std::int32_t>
9538   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> member_ref() const&& {
9539     return {std::move(value_.member), type_, member, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9540   }
9541 
9542   template <typename..., typename T = ::std::int32_t>
9543   FOLLY_ERASE ::apache::thrift::union_field_ref<T&> member_ref() & {
9544     return {value_.member, type_, member, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9545   }
9546 
9547   template <typename..., typename T = ::std::int32_t>
9548   FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> member_ref() && {
9549     return {std::move(value_.member), type_, member, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9550   }
9551   template <typename..., typename T = ::std::int32_t>
9552   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> members_ref() const& {
9553     return {value_.members, type_, members, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9554   }
9555 
9556   template <typename..., typename T = ::std::int32_t>
9557   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> members_ref() const&& {
9558     return {std::move(value_.members), type_, members, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9559   }
9560 
9561   template <typename..., typename T = ::std::int32_t>
9562   FOLLY_ERASE ::apache::thrift::union_field_ref<T&> members_ref() & {
9563     return {value_.members, type_, members, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9564   }
9565 
9566   template <typename..., typename T = ::std::int32_t>
9567   FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> members_ref() && {
9568     return {std::move(value_.members), type_, members, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9569   }
9570   template <typename..., typename T = ::std::int32_t>
9571   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> field_ref() const& {
9572     return {value_.field, type_, field, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9573   }
9574 
9575   template <typename..., typename T = ::std::int32_t>
9576   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> field_ref() const&& {
9577     return {std::move(value_.field), type_, field, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9578   }
9579 
9580   template <typename..., typename T = ::std::int32_t>
9581   FOLLY_ERASE ::apache::thrift::union_field_ref<T&> field_ref() & {
9582     return {value_.field, type_, field, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9583   }
9584 
9585   template <typename..., typename T = ::std::int32_t>
9586   FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> field_ref() && {
9587     return {std::move(value_.field), type_, field, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9588   }
9589   template <typename..., typename T = ::std::int32_t>
9590   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> fields_ref() const& {
9591     return {value_.fields, type_, fields, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9592   }
9593 
9594   template <typename..., typename T = ::std::int32_t>
9595   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> fields_ref() const&& {
9596     return {std::move(value_.fields), type_, fields, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9597   }
9598 
9599   template <typename..., typename T = ::std::int32_t>
9600   FOLLY_ERASE ::apache::thrift::union_field_ref<T&> fields_ref() & {
9601     return {value_.fields, type_, fields, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9602   }
9603 
9604   template <typename..., typename T = ::std::int32_t>
9605   FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> fields_ref() && {
9606     return {std::move(value_.fields), type_, fields, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
9607   }
9608   Type getType() const { return static_cast<Type>(type_); }
9609 
9610   template <class Protocol_>
9611   uint32_t read(Protocol_* iprot);
9612   template <class Protocol_>
9613   uint32_t serializedSize(Protocol_ const* prot_) const;
9614   template <class Protocol_>
9615   uint32_t serializedSizeZC(Protocol_ const* prot_) const;
9616   template <class Protocol_>
9617   uint32_t write(Protocol_* prot_) const;
9618  protected:
9619   template <class T>
9620   void destruct(T &val) {
9621     (&val)->~T();
9622   }
9623 
9624   storage_type value_;
9625   std::underlying_type_t<Type> type_;
9626 
9627  private:
9628   template <class Protocol_>
9629   void readNoXfer(Protocol_* iprot);
9630 
9631   friend class ::apache::thrift::Cpp2Ops<union_with_special_names>;
9632   friend void swap(union_with_special_names& a, union_with_special_names& b);
9633 };
9634 
9635 template <class Protocol_>
9636 uint32_t union_with_special_names::read(Protocol_* iprot) {
9637   auto _xferStart = iprot->getCursorPosition();
9638   readNoXfer(iprot);
9639   return iprot->getCursorPosition() - _xferStart;
9640 }
9641 
9642 }} // test_cpp2::cpp_reflection
9643 namespace test_cpp2 { namespace cpp_reflection {
9644 class struct_with_special_names final  {
9645  private:
9646   friend struct ::apache::thrift::detail::st::struct_private_access;
9647 
9648   //  used by a static_assert in the corresponding source
9649   static constexpr bool __fbthrift_cpp2_gen_json = false;
9650   static constexpr bool __fbthrift_cpp2_gen_nimble = false;
9651   static constexpr bool __fbthrift_cpp2_gen_has_thrift_uri = false;
9652 
9653   void __fbthrift_clear();
9654 
9655  public:
9656   using __fbthrift_cpp2_type = struct_with_special_names;
9657   static constexpr bool __fbthrift_cpp2_is_union =
9658     false;
9659 
9660 
9661  public:
9662 
9663   struct_with_special_names() :
9664       __fbthrift_field_get(),
9665       __fbthrift_field_getter(),
9666       __fbthrift_field_lists(),
9667       __fbthrift_field_maps(),
9668       __fbthrift_field_name(),
9669       __fbthrift_field_name_to_value(),
9670       __fbthrift_field_names(),
9671       __fbthrift_field_prefix_tree(),
9672       __fbthrift_field_sets(),
9673       __fbthrift_field_setter(),
9674       __fbthrift_field_str(),
9675       __fbthrift_field_strings(),
9676       __fbthrift_field_type(),
9677       __fbthrift_field_value(),
9678       __fbthrift_field_value_to_name(),
9679       __fbthrift_field_values(),
9680       __fbthrift_field_id(),
9681       __fbthrift_field_ids(),
9682       __fbthrift_field_descriptor(),
9683       __fbthrift_field_descriptors(),
9684       __fbthrift_field_key(),
9685       __fbthrift_field_keys(),
9686       __fbthrift_field_annotation(),
9687       __fbthrift_field_annotations(),
9688       __fbthrift_field_member(),
9689       __fbthrift_field_members(),
9690       __fbthrift_field_field(),
9691       __fbthrift_field_fields() {
9692   }
9693   // FragileConstructor for use in initialization lists only.
9694   [[deprecated("This constructor is deprecated")]]
9695   struct_with_special_names(apache::thrift::FragileConstructor, ::std::int32_t get__arg, ::std::int32_t getter__arg, ::std::int32_t lists__arg, ::std::int32_t maps__arg, ::std::int32_t name__arg, ::std::int32_t name_to_value__arg, ::std::int32_t names__arg, ::std::int32_t prefix_tree__arg, ::std::int32_t sets__arg, ::std::int32_t setter__arg, ::std::int32_t str__arg, ::std::int32_t strings__arg, ::std::int32_t type__arg, ::std::int32_t value__arg, ::std::int32_t value_to_name__arg, ::std::int32_t values__arg, ::std::int32_t id__arg, ::std::int32_t ids__arg, ::std::int32_t descriptor__arg, ::std::int32_t descriptors__arg, ::std::int32_t key__arg, ::std::int32_t keys__arg, ::std::int32_t annotation__arg, ::std::int32_t annotations__arg, ::std::int32_t member__arg, ::std::int32_t members__arg, ::std::int32_t field__arg, ::std::int32_t fields__arg);
9696 
9697   struct_with_special_names(struct_with_special_names&&) = default;
9698 
9699   struct_with_special_names(const struct_with_special_names&) = default;
9700 
9701 
9702   struct_with_special_names& operator=(struct_with_special_names&&) = default;
9703 
9704   struct_with_special_names& operator=(const struct_with_special_names&) = default;
9705  private:
9706   ::std::int32_t __fbthrift_field_get;
9707  private:
9708   ::std::int32_t __fbthrift_field_getter;
9709  private:
9710   ::std::int32_t __fbthrift_field_lists;
9711  private:
9712   ::std::int32_t __fbthrift_field_maps;
9713  private:
9714   ::std::int32_t __fbthrift_field_name;
9715  private:
9716   ::std::int32_t __fbthrift_field_name_to_value;
9717  private:
9718   ::std::int32_t __fbthrift_field_names;
9719  private:
9720   ::std::int32_t __fbthrift_field_prefix_tree;
9721  private:
9722   ::std::int32_t __fbthrift_field_sets;
9723  private:
9724   ::std::int32_t __fbthrift_field_setter;
9725  private:
9726   ::std::int32_t __fbthrift_field_str;
9727  private:
9728   ::std::int32_t __fbthrift_field_strings;
9729  private:
9730   ::std::int32_t __fbthrift_field_type;
9731  private:
9732   ::std::int32_t __fbthrift_field_value;
9733  private:
9734   ::std::int32_t __fbthrift_field_value_to_name;
9735  private:
9736   ::std::int32_t __fbthrift_field_values;
9737  private:
9738   ::std::int32_t __fbthrift_field_id;
9739  private:
9740   ::std::int32_t __fbthrift_field_ids;
9741  private:
9742   ::std::int32_t __fbthrift_field_descriptor;
9743  private:
9744   ::std::int32_t __fbthrift_field_descriptors;
9745  private:
9746   ::std::int32_t __fbthrift_field_key;
9747  private:
9748   ::std::int32_t __fbthrift_field_keys;
9749  private:
9750   ::std::int32_t __fbthrift_field_annotation;
9751  private:
9752   ::std::int32_t __fbthrift_field_annotations;
9753  private:
9754   ::std::int32_t __fbthrift_field_member;
9755  private:
9756   ::std::int32_t __fbthrift_field_members;
9757  private:
9758   ::std::int32_t __fbthrift_field_field;
9759  private:
9760   ::std::int32_t __fbthrift_field_fields;
9761  private:
9762   apache::thrift::detail::isset_bitset<28, false> __isset;
9763 
9764  public:
9765 
9766   bool operator==(const struct_with_special_names&) const;
9767   bool operator<(const struct_with_special_names&) const;
9768 
9769   template <typename..., typename T = ::std::int32_t>
9770   FOLLY_ERASE ::apache::thrift::field_ref<const T&> get_ref() const& {
9771     return {this->__fbthrift_field_get, __isset.at(0), __isset.bit(0)};
9772   }
9773 
9774   template <typename..., typename T = ::std::int32_t>
9775   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> get_ref() const&& {
9776     return {static_cast<const T&&>(this->__fbthrift_field_get), __isset.at(0), __isset.bit(0)};
9777   }
9778 
9779   template <typename..., typename T = ::std::int32_t>
9780   FOLLY_ERASE ::apache::thrift::field_ref<T&> get_ref() & {
9781     return {this->__fbthrift_field_get, __isset.at(0), __isset.bit(0)};
9782   }
9783 
9784   template <typename..., typename T = ::std::int32_t>
9785   FOLLY_ERASE ::apache::thrift::field_ref<T&&> get_ref() && {
9786     return {static_cast<T&&>(this->__fbthrift_field_get), __isset.at(0), __isset.bit(0)};
9787   }
9788 
9789   template <typename..., typename T = ::std::int32_t>
9790   FOLLY_ERASE ::apache::thrift::field_ref<const T&> get() const& {
9791     return {this->__fbthrift_field_get, __isset.at(0), __isset.bit(0)};
9792   }
9793 
9794   template <typename..., typename T = ::std::int32_t>
9795   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> get() const&& {
9796     return {static_cast<const T&&>(this->__fbthrift_field_get), __isset.at(0), __isset.bit(0)};
9797   }
9798 
9799   template <typename..., typename T = ::std::int32_t>
9800   FOLLY_ERASE ::apache::thrift::field_ref<T&> get() & {
9801     return {this->__fbthrift_field_get, __isset.at(0), __isset.bit(0)};
9802   }
9803 
9804   template <typename..., typename T = ::std::int32_t>
9805   FOLLY_ERASE ::apache::thrift::field_ref<T&&> get() && {
9806     return {static_cast<T&&>(this->__fbthrift_field_get), __isset.at(0), __isset.bit(0)};
9807   }
9808 
9809   template <typename..., typename T = ::std::int32_t>
9810   FOLLY_ERASE ::apache::thrift::field_ref<const T&> getter_ref() const& {
9811     return {this->__fbthrift_field_getter, __isset.at(1), __isset.bit(1)};
9812   }
9813 
9814   template <typename..., typename T = ::std::int32_t>
9815   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> getter_ref() const&& {
9816     return {static_cast<const T&&>(this->__fbthrift_field_getter), __isset.at(1), __isset.bit(1)};
9817   }
9818 
9819   template <typename..., typename T = ::std::int32_t>
9820   FOLLY_ERASE ::apache::thrift::field_ref<T&> getter_ref() & {
9821     return {this->__fbthrift_field_getter, __isset.at(1), __isset.bit(1)};
9822   }
9823 
9824   template <typename..., typename T = ::std::int32_t>
9825   FOLLY_ERASE ::apache::thrift::field_ref<T&&> getter_ref() && {
9826     return {static_cast<T&&>(this->__fbthrift_field_getter), __isset.at(1), __isset.bit(1)};
9827   }
9828 
9829   template <typename..., typename T = ::std::int32_t>
9830   FOLLY_ERASE ::apache::thrift::field_ref<const T&> getter() const& {
9831     return {this->__fbthrift_field_getter, __isset.at(1), __isset.bit(1)};
9832   }
9833 
9834   template <typename..., typename T = ::std::int32_t>
9835   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> getter() const&& {
9836     return {static_cast<const T&&>(this->__fbthrift_field_getter), __isset.at(1), __isset.bit(1)};
9837   }
9838 
9839   template <typename..., typename T = ::std::int32_t>
9840   FOLLY_ERASE ::apache::thrift::field_ref<T&> getter() & {
9841     return {this->__fbthrift_field_getter, __isset.at(1), __isset.bit(1)};
9842   }
9843 
9844   template <typename..., typename T = ::std::int32_t>
9845   FOLLY_ERASE ::apache::thrift::field_ref<T&&> getter() && {
9846     return {static_cast<T&&>(this->__fbthrift_field_getter), __isset.at(1), __isset.bit(1)};
9847   }
9848 
9849   template <typename..., typename T = ::std::int32_t>
9850   FOLLY_ERASE ::apache::thrift::field_ref<const T&> lists_ref() const& {
9851     return {this->__fbthrift_field_lists, __isset.at(2), __isset.bit(2)};
9852   }
9853 
9854   template <typename..., typename T = ::std::int32_t>
9855   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> lists_ref() const&& {
9856     return {static_cast<const T&&>(this->__fbthrift_field_lists), __isset.at(2), __isset.bit(2)};
9857   }
9858 
9859   template <typename..., typename T = ::std::int32_t>
9860   FOLLY_ERASE ::apache::thrift::field_ref<T&> lists_ref() & {
9861     return {this->__fbthrift_field_lists, __isset.at(2), __isset.bit(2)};
9862   }
9863 
9864   template <typename..., typename T = ::std::int32_t>
9865   FOLLY_ERASE ::apache::thrift::field_ref<T&&> lists_ref() && {
9866     return {static_cast<T&&>(this->__fbthrift_field_lists), __isset.at(2), __isset.bit(2)};
9867   }
9868 
9869   template <typename..., typename T = ::std::int32_t>
9870   FOLLY_ERASE ::apache::thrift::field_ref<const T&> lists() const& {
9871     return {this->__fbthrift_field_lists, __isset.at(2), __isset.bit(2)};
9872   }
9873 
9874   template <typename..., typename T = ::std::int32_t>
9875   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> lists() const&& {
9876     return {static_cast<const T&&>(this->__fbthrift_field_lists), __isset.at(2), __isset.bit(2)};
9877   }
9878 
9879   template <typename..., typename T = ::std::int32_t>
9880   FOLLY_ERASE ::apache::thrift::field_ref<T&> lists() & {
9881     return {this->__fbthrift_field_lists, __isset.at(2), __isset.bit(2)};
9882   }
9883 
9884   template <typename..., typename T = ::std::int32_t>
9885   FOLLY_ERASE ::apache::thrift::field_ref<T&&> lists() && {
9886     return {static_cast<T&&>(this->__fbthrift_field_lists), __isset.at(2), __isset.bit(2)};
9887   }
9888 
9889   template <typename..., typename T = ::std::int32_t>
9890   FOLLY_ERASE ::apache::thrift::field_ref<const T&> maps_ref() const& {
9891     return {this->__fbthrift_field_maps, __isset.at(3), __isset.bit(3)};
9892   }
9893 
9894   template <typename..., typename T = ::std::int32_t>
9895   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> maps_ref() const&& {
9896     return {static_cast<const T&&>(this->__fbthrift_field_maps), __isset.at(3), __isset.bit(3)};
9897   }
9898 
9899   template <typename..., typename T = ::std::int32_t>
9900   FOLLY_ERASE ::apache::thrift::field_ref<T&> maps_ref() & {
9901     return {this->__fbthrift_field_maps, __isset.at(3), __isset.bit(3)};
9902   }
9903 
9904   template <typename..., typename T = ::std::int32_t>
9905   FOLLY_ERASE ::apache::thrift::field_ref<T&&> maps_ref() && {
9906     return {static_cast<T&&>(this->__fbthrift_field_maps), __isset.at(3), __isset.bit(3)};
9907   }
9908 
9909   template <typename..., typename T = ::std::int32_t>
9910   FOLLY_ERASE ::apache::thrift::field_ref<const T&> maps() const& {
9911     return {this->__fbthrift_field_maps, __isset.at(3), __isset.bit(3)};
9912   }
9913 
9914   template <typename..., typename T = ::std::int32_t>
9915   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> maps() const&& {
9916     return {static_cast<const T&&>(this->__fbthrift_field_maps), __isset.at(3), __isset.bit(3)};
9917   }
9918 
9919   template <typename..., typename T = ::std::int32_t>
9920   FOLLY_ERASE ::apache::thrift::field_ref<T&> maps() & {
9921     return {this->__fbthrift_field_maps, __isset.at(3), __isset.bit(3)};
9922   }
9923 
9924   template <typename..., typename T = ::std::int32_t>
9925   FOLLY_ERASE ::apache::thrift::field_ref<T&&> maps() && {
9926     return {static_cast<T&&>(this->__fbthrift_field_maps), __isset.at(3), __isset.bit(3)};
9927   }
9928 
9929   template <typename..., typename T = ::std::int32_t>
9930   FOLLY_ERASE ::apache::thrift::field_ref<const T&> name_ref() const& {
9931     return {this->__fbthrift_field_name, __isset.at(4), __isset.bit(4)};
9932   }
9933 
9934   template <typename..., typename T = ::std::int32_t>
9935   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> name_ref() const&& {
9936     return {static_cast<const T&&>(this->__fbthrift_field_name), __isset.at(4), __isset.bit(4)};
9937   }
9938 
9939   template <typename..., typename T = ::std::int32_t>
9940   FOLLY_ERASE ::apache::thrift::field_ref<T&> name_ref() & {
9941     return {this->__fbthrift_field_name, __isset.at(4), __isset.bit(4)};
9942   }
9943 
9944   template <typename..., typename T = ::std::int32_t>
9945   FOLLY_ERASE ::apache::thrift::field_ref<T&&> name_ref() && {
9946     return {static_cast<T&&>(this->__fbthrift_field_name), __isset.at(4), __isset.bit(4)};
9947   }
9948 
9949   template <typename..., typename T = ::std::int32_t>
9950   FOLLY_ERASE ::apache::thrift::field_ref<const T&> name() const& {
9951     return {this->__fbthrift_field_name, __isset.at(4), __isset.bit(4)};
9952   }
9953 
9954   template <typename..., typename T = ::std::int32_t>
9955   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> name() const&& {
9956     return {static_cast<const T&&>(this->__fbthrift_field_name), __isset.at(4), __isset.bit(4)};
9957   }
9958 
9959   template <typename..., typename T = ::std::int32_t>
9960   FOLLY_ERASE ::apache::thrift::field_ref<T&> name() & {
9961     return {this->__fbthrift_field_name, __isset.at(4), __isset.bit(4)};
9962   }
9963 
9964   template <typename..., typename T = ::std::int32_t>
9965   FOLLY_ERASE ::apache::thrift::field_ref<T&&> name() && {
9966     return {static_cast<T&&>(this->__fbthrift_field_name), __isset.at(4), __isset.bit(4)};
9967   }
9968 
9969   template <typename..., typename T = ::std::int32_t>
9970   FOLLY_ERASE ::apache::thrift::field_ref<const T&> name_to_value_ref() const& {
9971     return {this->__fbthrift_field_name_to_value, __isset.at(5), __isset.bit(5)};
9972   }
9973 
9974   template <typename..., typename T = ::std::int32_t>
9975   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> name_to_value_ref() const&& {
9976     return {static_cast<const T&&>(this->__fbthrift_field_name_to_value), __isset.at(5), __isset.bit(5)};
9977   }
9978 
9979   template <typename..., typename T = ::std::int32_t>
9980   FOLLY_ERASE ::apache::thrift::field_ref<T&> name_to_value_ref() & {
9981     return {this->__fbthrift_field_name_to_value, __isset.at(5), __isset.bit(5)};
9982   }
9983 
9984   template <typename..., typename T = ::std::int32_t>
9985   FOLLY_ERASE ::apache::thrift::field_ref<T&&> name_to_value_ref() && {
9986     return {static_cast<T&&>(this->__fbthrift_field_name_to_value), __isset.at(5), __isset.bit(5)};
9987   }
9988 
9989   template <typename..., typename T = ::std::int32_t>
9990   FOLLY_ERASE ::apache::thrift::field_ref<const T&> name_to_value() const& {
9991     return {this->__fbthrift_field_name_to_value, __isset.at(5), __isset.bit(5)};
9992   }
9993 
9994   template <typename..., typename T = ::std::int32_t>
9995   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> name_to_value() const&& {
9996     return {static_cast<const T&&>(this->__fbthrift_field_name_to_value), __isset.at(5), __isset.bit(5)};
9997   }
9998 
9999   template <typename..., typename T = ::std::int32_t>
10000   FOLLY_ERASE ::apache::thrift::field_ref<T&> name_to_value() & {
10001     return {this->__fbthrift_field_name_to_value, __isset.at(5), __isset.bit(5)};
10002   }
10003 
10004   template <typename..., typename T = ::std::int32_t>
10005   FOLLY_ERASE ::apache::thrift::field_ref<T&&> name_to_value() && {
10006     return {static_cast<T&&>(this->__fbthrift_field_name_to_value), __isset.at(5), __isset.bit(5)};
10007   }
10008 
10009   template <typename..., typename T = ::std::int32_t>
10010   FOLLY_ERASE ::apache::thrift::field_ref<const T&> names_ref() const& {
10011     return {this->__fbthrift_field_names, __isset.at(6), __isset.bit(6)};
10012   }
10013 
10014   template <typename..., typename T = ::std::int32_t>
10015   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> names_ref() const&& {
10016     return {static_cast<const T&&>(this->__fbthrift_field_names), __isset.at(6), __isset.bit(6)};
10017   }
10018 
10019   template <typename..., typename T = ::std::int32_t>
10020   FOLLY_ERASE ::apache::thrift::field_ref<T&> names_ref() & {
10021     return {this->__fbthrift_field_names, __isset.at(6), __isset.bit(6)};
10022   }
10023 
10024   template <typename..., typename T = ::std::int32_t>
10025   FOLLY_ERASE ::apache::thrift::field_ref<T&&> names_ref() && {
10026     return {static_cast<T&&>(this->__fbthrift_field_names), __isset.at(6), __isset.bit(6)};
10027   }
10028 
10029   template <typename..., typename T = ::std::int32_t>
10030   FOLLY_ERASE ::apache::thrift::field_ref<const T&> names() const& {
10031     return {this->__fbthrift_field_names, __isset.at(6), __isset.bit(6)};
10032   }
10033 
10034   template <typename..., typename T = ::std::int32_t>
10035   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> names() const&& {
10036     return {static_cast<const T&&>(this->__fbthrift_field_names), __isset.at(6), __isset.bit(6)};
10037   }
10038 
10039   template <typename..., typename T = ::std::int32_t>
10040   FOLLY_ERASE ::apache::thrift::field_ref<T&> names() & {
10041     return {this->__fbthrift_field_names, __isset.at(6), __isset.bit(6)};
10042   }
10043 
10044   template <typename..., typename T = ::std::int32_t>
10045   FOLLY_ERASE ::apache::thrift::field_ref<T&&> names() && {
10046     return {static_cast<T&&>(this->__fbthrift_field_names), __isset.at(6), __isset.bit(6)};
10047   }
10048 
10049   template <typename..., typename T = ::std::int32_t>
10050   FOLLY_ERASE ::apache::thrift::field_ref<const T&> prefix_tree_ref() const& {
10051     return {this->__fbthrift_field_prefix_tree, __isset.at(7), __isset.bit(7)};
10052   }
10053 
10054   template <typename..., typename T = ::std::int32_t>
10055   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> prefix_tree_ref() const&& {
10056     return {static_cast<const T&&>(this->__fbthrift_field_prefix_tree), __isset.at(7), __isset.bit(7)};
10057   }
10058 
10059   template <typename..., typename T = ::std::int32_t>
10060   FOLLY_ERASE ::apache::thrift::field_ref<T&> prefix_tree_ref() & {
10061     return {this->__fbthrift_field_prefix_tree, __isset.at(7), __isset.bit(7)};
10062   }
10063 
10064   template <typename..., typename T = ::std::int32_t>
10065   FOLLY_ERASE ::apache::thrift::field_ref<T&&> prefix_tree_ref() && {
10066     return {static_cast<T&&>(this->__fbthrift_field_prefix_tree), __isset.at(7), __isset.bit(7)};
10067   }
10068 
10069   template <typename..., typename T = ::std::int32_t>
10070   FOLLY_ERASE ::apache::thrift::field_ref<const T&> prefix_tree() const& {
10071     return {this->__fbthrift_field_prefix_tree, __isset.at(7), __isset.bit(7)};
10072   }
10073 
10074   template <typename..., typename T = ::std::int32_t>
10075   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> prefix_tree() const&& {
10076     return {static_cast<const T&&>(this->__fbthrift_field_prefix_tree), __isset.at(7), __isset.bit(7)};
10077   }
10078 
10079   template <typename..., typename T = ::std::int32_t>
10080   FOLLY_ERASE ::apache::thrift::field_ref<T&> prefix_tree() & {
10081     return {this->__fbthrift_field_prefix_tree, __isset.at(7), __isset.bit(7)};
10082   }
10083 
10084   template <typename..., typename T = ::std::int32_t>
10085   FOLLY_ERASE ::apache::thrift::field_ref<T&&> prefix_tree() && {
10086     return {static_cast<T&&>(this->__fbthrift_field_prefix_tree), __isset.at(7), __isset.bit(7)};
10087   }
10088 
10089   template <typename..., typename T = ::std::int32_t>
10090   FOLLY_ERASE ::apache::thrift::field_ref<const T&> sets_ref() const& {
10091     return {this->__fbthrift_field_sets, __isset.at(8), __isset.bit(8)};
10092   }
10093 
10094   template <typename..., typename T = ::std::int32_t>
10095   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> sets_ref() const&& {
10096     return {static_cast<const T&&>(this->__fbthrift_field_sets), __isset.at(8), __isset.bit(8)};
10097   }
10098 
10099   template <typename..., typename T = ::std::int32_t>
10100   FOLLY_ERASE ::apache::thrift::field_ref<T&> sets_ref() & {
10101     return {this->__fbthrift_field_sets, __isset.at(8), __isset.bit(8)};
10102   }
10103 
10104   template <typename..., typename T = ::std::int32_t>
10105   FOLLY_ERASE ::apache::thrift::field_ref<T&&> sets_ref() && {
10106     return {static_cast<T&&>(this->__fbthrift_field_sets), __isset.at(8), __isset.bit(8)};
10107   }
10108 
10109   template <typename..., typename T = ::std::int32_t>
10110   FOLLY_ERASE ::apache::thrift::field_ref<const T&> sets() const& {
10111     return {this->__fbthrift_field_sets, __isset.at(8), __isset.bit(8)};
10112   }
10113 
10114   template <typename..., typename T = ::std::int32_t>
10115   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> sets() const&& {
10116     return {static_cast<const T&&>(this->__fbthrift_field_sets), __isset.at(8), __isset.bit(8)};
10117   }
10118 
10119   template <typename..., typename T = ::std::int32_t>
10120   FOLLY_ERASE ::apache::thrift::field_ref<T&> sets() & {
10121     return {this->__fbthrift_field_sets, __isset.at(8), __isset.bit(8)};
10122   }
10123 
10124   template <typename..., typename T = ::std::int32_t>
10125   FOLLY_ERASE ::apache::thrift::field_ref<T&&> sets() && {
10126     return {static_cast<T&&>(this->__fbthrift_field_sets), __isset.at(8), __isset.bit(8)};
10127   }
10128 
10129   template <typename..., typename T = ::std::int32_t>
10130   FOLLY_ERASE ::apache::thrift::field_ref<const T&> setter_ref() const& {
10131     return {this->__fbthrift_field_setter, __isset.at(9), __isset.bit(9)};
10132   }
10133 
10134   template <typename..., typename T = ::std::int32_t>
10135   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> setter_ref() const&& {
10136     return {static_cast<const T&&>(this->__fbthrift_field_setter), __isset.at(9), __isset.bit(9)};
10137   }
10138 
10139   template <typename..., typename T = ::std::int32_t>
10140   FOLLY_ERASE ::apache::thrift::field_ref<T&> setter_ref() & {
10141     return {this->__fbthrift_field_setter, __isset.at(9), __isset.bit(9)};
10142   }
10143 
10144   template <typename..., typename T = ::std::int32_t>
10145   FOLLY_ERASE ::apache::thrift::field_ref<T&&> setter_ref() && {
10146     return {static_cast<T&&>(this->__fbthrift_field_setter), __isset.at(9), __isset.bit(9)};
10147   }
10148 
10149   template <typename..., typename T = ::std::int32_t>
10150   FOLLY_ERASE ::apache::thrift::field_ref<const T&> setter() const& {
10151     return {this->__fbthrift_field_setter, __isset.at(9), __isset.bit(9)};
10152   }
10153 
10154   template <typename..., typename T = ::std::int32_t>
10155   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> setter() const&& {
10156     return {static_cast<const T&&>(this->__fbthrift_field_setter), __isset.at(9), __isset.bit(9)};
10157   }
10158 
10159   template <typename..., typename T = ::std::int32_t>
10160   FOLLY_ERASE ::apache::thrift::field_ref<T&> setter() & {
10161     return {this->__fbthrift_field_setter, __isset.at(9), __isset.bit(9)};
10162   }
10163 
10164   template <typename..., typename T = ::std::int32_t>
10165   FOLLY_ERASE ::apache::thrift::field_ref<T&&> setter() && {
10166     return {static_cast<T&&>(this->__fbthrift_field_setter), __isset.at(9), __isset.bit(9)};
10167   }
10168 
10169   template <typename..., typename T = ::std::int32_t>
10170   FOLLY_ERASE ::apache::thrift::field_ref<const T&> str_ref() const& {
10171     return {this->__fbthrift_field_str, __isset.at(10), __isset.bit(10)};
10172   }
10173 
10174   template <typename..., typename T = ::std::int32_t>
10175   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> str_ref() const&& {
10176     return {static_cast<const T&&>(this->__fbthrift_field_str), __isset.at(10), __isset.bit(10)};
10177   }
10178 
10179   template <typename..., typename T = ::std::int32_t>
10180   FOLLY_ERASE ::apache::thrift::field_ref<T&> str_ref() & {
10181     return {this->__fbthrift_field_str, __isset.at(10), __isset.bit(10)};
10182   }
10183 
10184   template <typename..., typename T = ::std::int32_t>
10185   FOLLY_ERASE ::apache::thrift::field_ref<T&&> str_ref() && {
10186     return {static_cast<T&&>(this->__fbthrift_field_str), __isset.at(10), __isset.bit(10)};
10187   }
10188 
10189   template <typename..., typename T = ::std::int32_t>
10190   FOLLY_ERASE ::apache::thrift::field_ref<const T&> str() const& {
10191     return {this->__fbthrift_field_str, __isset.at(10), __isset.bit(10)};
10192   }
10193 
10194   template <typename..., typename T = ::std::int32_t>
10195   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> str() const&& {
10196     return {static_cast<const T&&>(this->__fbthrift_field_str), __isset.at(10), __isset.bit(10)};
10197   }
10198 
10199   template <typename..., typename T = ::std::int32_t>
10200   FOLLY_ERASE ::apache::thrift::field_ref<T&> str() & {
10201     return {this->__fbthrift_field_str, __isset.at(10), __isset.bit(10)};
10202   }
10203 
10204   template <typename..., typename T = ::std::int32_t>
10205   FOLLY_ERASE ::apache::thrift::field_ref<T&&> str() && {
10206     return {static_cast<T&&>(this->__fbthrift_field_str), __isset.at(10), __isset.bit(10)};
10207   }
10208 
10209   template <typename..., typename T = ::std::int32_t>
10210   FOLLY_ERASE ::apache::thrift::field_ref<const T&> strings_ref() const& {
10211     return {this->__fbthrift_field_strings, __isset.at(11), __isset.bit(11)};
10212   }
10213 
10214   template <typename..., typename T = ::std::int32_t>
10215   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> strings_ref() const&& {
10216     return {static_cast<const T&&>(this->__fbthrift_field_strings), __isset.at(11), __isset.bit(11)};
10217   }
10218 
10219   template <typename..., typename T = ::std::int32_t>
10220   FOLLY_ERASE ::apache::thrift::field_ref<T&> strings_ref() & {
10221     return {this->__fbthrift_field_strings, __isset.at(11), __isset.bit(11)};
10222   }
10223 
10224   template <typename..., typename T = ::std::int32_t>
10225   FOLLY_ERASE ::apache::thrift::field_ref<T&&> strings_ref() && {
10226     return {static_cast<T&&>(this->__fbthrift_field_strings), __isset.at(11), __isset.bit(11)};
10227   }
10228 
10229   template <typename..., typename T = ::std::int32_t>
10230   FOLLY_ERASE ::apache::thrift::field_ref<const T&> strings() const& {
10231     return {this->__fbthrift_field_strings, __isset.at(11), __isset.bit(11)};
10232   }
10233 
10234   template <typename..., typename T = ::std::int32_t>
10235   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> strings() const&& {
10236     return {static_cast<const T&&>(this->__fbthrift_field_strings), __isset.at(11), __isset.bit(11)};
10237   }
10238 
10239   template <typename..., typename T = ::std::int32_t>
10240   FOLLY_ERASE ::apache::thrift::field_ref<T&> strings() & {
10241     return {this->__fbthrift_field_strings, __isset.at(11), __isset.bit(11)};
10242   }
10243 
10244   template <typename..., typename T = ::std::int32_t>
10245   FOLLY_ERASE ::apache::thrift::field_ref<T&&> strings() && {
10246     return {static_cast<T&&>(this->__fbthrift_field_strings), __isset.at(11), __isset.bit(11)};
10247   }
10248 
10249   template <typename..., typename T = ::std::int32_t>
10250   FOLLY_ERASE ::apache::thrift::field_ref<const T&> type_ref() const& {
10251     return {this->__fbthrift_field_type, __isset.at(12), __isset.bit(12)};
10252   }
10253 
10254   template <typename..., typename T = ::std::int32_t>
10255   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> type_ref() const&& {
10256     return {static_cast<const T&&>(this->__fbthrift_field_type), __isset.at(12), __isset.bit(12)};
10257   }
10258 
10259   template <typename..., typename T = ::std::int32_t>
10260   FOLLY_ERASE ::apache::thrift::field_ref<T&> type_ref() & {
10261     return {this->__fbthrift_field_type, __isset.at(12), __isset.bit(12)};
10262   }
10263 
10264   template <typename..., typename T = ::std::int32_t>
10265   FOLLY_ERASE ::apache::thrift::field_ref<T&&> type_ref() && {
10266     return {static_cast<T&&>(this->__fbthrift_field_type), __isset.at(12), __isset.bit(12)};
10267   }
10268 
10269   template <typename..., typename T = ::std::int32_t>
10270   FOLLY_ERASE ::apache::thrift::field_ref<const T&> type() const& {
10271     return {this->__fbthrift_field_type, __isset.at(12), __isset.bit(12)};
10272   }
10273 
10274   template <typename..., typename T = ::std::int32_t>
10275   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> type() const&& {
10276     return {static_cast<const T&&>(this->__fbthrift_field_type), __isset.at(12), __isset.bit(12)};
10277   }
10278 
10279   template <typename..., typename T = ::std::int32_t>
10280   FOLLY_ERASE ::apache::thrift::field_ref<T&> type() & {
10281     return {this->__fbthrift_field_type, __isset.at(12), __isset.bit(12)};
10282   }
10283 
10284   template <typename..., typename T = ::std::int32_t>
10285   FOLLY_ERASE ::apache::thrift::field_ref<T&&> type() && {
10286     return {static_cast<T&&>(this->__fbthrift_field_type), __isset.at(12), __isset.bit(12)};
10287   }
10288 
10289   template <typename..., typename T = ::std::int32_t>
10290   FOLLY_ERASE ::apache::thrift::field_ref<const T&> value_ref() const& {
10291     return {this->__fbthrift_field_value, __isset.at(13), __isset.bit(13)};
10292   }
10293 
10294   template <typename..., typename T = ::std::int32_t>
10295   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> value_ref() const&& {
10296     return {static_cast<const T&&>(this->__fbthrift_field_value), __isset.at(13), __isset.bit(13)};
10297   }
10298 
10299   template <typename..., typename T = ::std::int32_t>
10300   FOLLY_ERASE ::apache::thrift::field_ref<T&> value_ref() & {
10301     return {this->__fbthrift_field_value, __isset.at(13), __isset.bit(13)};
10302   }
10303 
10304   template <typename..., typename T = ::std::int32_t>
10305   FOLLY_ERASE ::apache::thrift::field_ref<T&&> value_ref() && {
10306     return {static_cast<T&&>(this->__fbthrift_field_value), __isset.at(13), __isset.bit(13)};
10307   }
10308 
10309   template <typename..., typename T = ::std::int32_t>
10310   FOLLY_ERASE ::apache::thrift::field_ref<const T&> value() const& {
10311     return {this->__fbthrift_field_value, __isset.at(13), __isset.bit(13)};
10312   }
10313 
10314   template <typename..., typename T = ::std::int32_t>
10315   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> value() const&& {
10316     return {static_cast<const T&&>(this->__fbthrift_field_value), __isset.at(13), __isset.bit(13)};
10317   }
10318 
10319   template <typename..., typename T = ::std::int32_t>
10320   FOLLY_ERASE ::apache::thrift::field_ref<T&> value() & {
10321     return {this->__fbthrift_field_value, __isset.at(13), __isset.bit(13)};
10322   }
10323 
10324   template <typename..., typename T = ::std::int32_t>
10325   FOLLY_ERASE ::apache::thrift::field_ref<T&&> value() && {
10326     return {static_cast<T&&>(this->__fbthrift_field_value), __isset.at(13), __isset.bit(13)};
10327   }
10328 
10329   template <typename..., typename T = ::std::int32_t>
10330   FOLLY_ERASE ::apache::thrift::field_ref<const T&> value_to_name_ref() const& {
10331     return {this->__fbthrift_field_value_to_name, __isset.at(14), __isset.bit(14)};
10332   }
10333 
10334   template <typename..., typename T = ::std::int32_t>
10335   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> value_to_name_ref() const&& {
10336     return {static_cast<const T&&>(this->__fbthrift_field_value_to_name), __isset.at(14), __isset.bit(14)};
10337   }
10338 
10339   template <typename..., typename T = ::std::int32_t>
10340   FOLLY_ERASE ::apache::thrift::field_ref<T&> value_to_name_ref() & {
10341     return {this->__fbthrift_field_value_to_name, __isset.at(14), __isset.bit(14)};
10342   }
10343 
10344   template <typename..., typename T = ::std::int32_t>
10345   FOLLY_ERASE ::apache::thrift::field_ref<T&&> value_to_name_ref() && {
10346     return {static_cast<T&&>(this->__fbthrift_field_value_to_name), __isset.at(14), __isset.bit(14)};
10347   }
10348 
10349   template <typename..., typename T = ::std::int32_t>
10350   FOLLY_ERASE ::apache::thrift::field_ref<const T&> value_to_name() const& {
10351     return {this->__fbthrift_field_value_to_name, __isset.at(14), __isset.bit(14)};
10352   }
10353 
10354   template <typename..., typename T = ::std::int32_t>
10355   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> value_to_name() const&& {
10356     return {static_cast<const T&&>(this->__fbthrift_field_value_to_name), __isset.at(14), __isset.bit(14)};
10357   }
10358 
10359   template <typename..., typename T = ::std::int32_t>
10360   FOLLY_ERASE ::apache::thrift::field_ref<T&> value_to_name() & {
10361     return {this->__fbthrift_field_value_to_name, __isset.at(14), __isset.bit(14)};
10362   }
10363 
10364   template <typename..., typename T = ::std::int32_t>
10365   FOLLY_ERASE ::apache::thrift::field_ref<T&&> value_to_name() && {
10366     return {static_cast<T&&>(this->__fbthrift_field_value_to_name), __isset.at(14), __isset.bit(14)};
10367   }
10368 
10369   template <typename..., typename T = ::std::int32_t>
10370   FOLLY_ERASE ::apache::thrift::field_ref<const T&> values_ref() const& {
10371     return {this->__fbthrift_field_values, __isset.at(15), __isset.bit(15)};
10372   }
10373 
10374   template <typename..., typename T = ::std::int32_t>
10375   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> values_ref() const&& {
10376     return {static_cast<const T&&>(this->__fbthrift_field_values), __isset.at(15), __isset.bit(15)};
10377   }
10378 
10379   template <typename..., typename T = ::std::int32_t>
10380   FOLLY_ERASE ::apache::thrift::field_ref<T&> values_ref() & {
10381     return {this->__fbthrift_field_values, __isset.at(15), __isset.bit(15)};
10382   }
10383 
10384   template <typename..., typename T = ::std::int32_t>
10385   FOLLY_ERASE ::apache::thrift::field_ref<T&&> values_ref() && {
10386     return {static_cast<T&&>(this->__fbthrift_field_values), __isset.at(15), __isset.bit(15)};
10387   }
10388 
10389   template <typename..., typename T = ::std::int32_t>
10390   FOLLY_ERASE ::apache::thrift::field_ref<const T&> values() const& {
10391     return {this->__fbthrift_field_values, __isset.at(15), __isset.bit(15)};
10392   }
10393 
10394   template <typename..., typename T = ::std::int32_t>
10395   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> values() const&& {
10396     return {static_cast<const T&&>(this->__fbthrift_field_values), __isset.at(15), __isset.bit(15)};
10397   }
10398 
10399   template <typename..., typename T = ::std::int32_t>
10400   FOLLY_ERASE ::apache::thrift::field_ref<T&> values() & {
10401     return {this->__fbthrift_field_values, __isset.at(15), __isset.bit(15)};
10402   }
10403 
10404   template <typename..., typename T = ::std::int32_t>
10405   FOLLY_ERASE ::apache::thrift::field_ref<T&&> values() && {
10406     return {static_cast<T&&>(this->__fbthrift_field_values), __isset.at(15), __isset.bit(15)};
10407   }
10408 
10409   template <typename..., typename T = ::std::int32_t>
10410   FOLLY_ERASE ::apache::thrift::field_ref<const T&> id_ref() const& {
10411     return {this->__fbthrift_field_id, __isset.at(16), __isset.bit(16)};
10412   }
10413 
10414   template <typename..., typename T = ::std::int32_t>
10415   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> id_ref() const&& {
10416     return {static_cast<const T&&>(this->__fbthrift_field_id), __isset.at(16), __isset.bit(16)};
10417   }
10418 
10419   template <typename..., typename T = ::std::int32_t>
10420   FOLLY_ERASE ::apache::thrift::field_ref<T&> id_ref() & {
10421     return {this->__fbthrift_field_id, __isset.at(16), __isset.bit(16)};
10422   }
10423 
10424   template <typename..., typename T = ::std::int32_t>
10425   FOLLY_ERASE ::apache::thrift::field_ref<T&&> id_ref() && {
10426     return {static_cast<T&&>(this->__fbthrift_field_id), __isset.at(16), __isset.bit(16)};
10427   }
10428 
10429   template <typename..., typename T = ::std::int32_t>
10430   FOLLY_ERASE ::apache::thrift::field_ref<const T&> id() const& {
10431     return {this->__fbthrift_field_id, __isset.at(16), __isset.bit(16)};
10432   }
10433 
10434   template <typename..., typename T = ::std::int32_t>
10435   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> id() const&& {
10436     return {static_cast<const T&&>(this->__fbthrift_field_id), __isset.at(16), __isset.bit(16)};
10437   }
10438 
10439   template <typename..., typename T = ::std::int32_t>
10440   FOLLY_ERASE ::apache::thrift::field_ref<T&> id() & {
10441     return {this->__fbthrift_field_id, __isset.at(16), __isset.bit(16)};
10442   }
10443 
10444   template <typename..., typename T = ::std::int32_t>
10445   FOLLY_ERASE ::apache::thrift::field_ref<T&&> id() && {
10446     return {static_cast<T&&>(this->__fbthrift_field_id), __isset.at(16), __isset.bit(16)};
10447   }
10448 
10449   template <typename..., typename T = ::std::int32_t>
10450   FOLLY_ERASE ::apache::thrift::field_ref<const T&> ids_ref() const& {
10451     return {this->__fbthrift_field_ids, __isset.at(17), __isset.bit(17)};
10452   }
10453 
10454   template <typename..., typename T = ::std::int32_t>
10455   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> ids_ref() const&& {
10456     return {static_cast<const T&&>(this->__fbthrift_field_ids), __isset.at(17), __isset.bit(17)};
10457   }
10458 
10459   template <typename..., typename T = ::std::int32_t>
10460   FOLLY_ERASE ::apache::thrift::field_ref<T&> ids_ref() & {
10461     return {this->__fbthrift_field_ids, __isset.at(17), __isset.bit(17)};
10462   }
10463 
10464   template <typename..., typename T = ::std::int32_t>
10465   FOLLY_ERASE ::apache::thrift::field_ref<T&&> ids_ref() && {
10466     return {static_cast<T&&>(this->__fbthrift_field_ids), __isset.at(17), __isset.bit(17)};
10467   }
10468 
10469   template <typename..., typename T = ::std::int32_t>
10470   FOLLY_ERASE ::apache::thrift::field_ref<const T&> ids() const& {
10471     return {this->__fbthrift_field_ids, __isset.at(17), __isset.bit(17)};
10472   }
10473 
10474   template <typename..., typename T = ::std::int32_t>
10475   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> ids() const&& {
10476     return {static_cast<const T&&>(this->__fbthrift_field_ids), __isset.at(17), __isset.bit(17)};
10477   }
10478 
10479   template <typename..., typename T = ::std::int32_t>
10480   FOLLY_ERASE ::apache::thrift::field_ref<T&> ids() & {
10481     return {this->__fbthrift_field_ids, __isset.at(17), __isset.bit(17)};
10482   }
10483 
10484   template <typename..., typename T = ::std::int32_t>
10485   FOLLY_ERASE ::apache::thrift::field_ref<T&&> ids() && {
10486     return {static_cast<T&&>(this->__fbthrift_field_ids), __isset.at(17), __isset.bit(17)};
10487   }
10488 
10489   template <typename..., typename T = ::std::int32_t>
10490   FOLLY_ERASE ::apache::thrift::field_ref<const T&> descriptor_ref() const& {
10491     return {this->__fbthrift_field_descriptor, __isset.at(18), __isset.bit(18)};
10492   }
10493 
10494   template <typename..., typename T = ::std::int32_t>
10495   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> descriptor_ref() const&& {
10496     return {static_cast<const T&&>(this->__fbthrift_field_descriptor), __isset.at(18), __isset.bit(18)};
10497   }
10498 
10499   template <typename..., typename T = ::std::int32_t>
10500   FOLLY_ERASE ::apache::thrift::field_ref<T&> descriptor_ref() & {
10501     return {this->__fbthrift_field_descriptor, __isset.at(18), __isset.bit(18)};
10502   }
10503 
10504   template <typename..., typename T = ::std::int32_t>
10505   FOLLY_ERASE ::apache::thrift::field_ref<T&&> descriptor_ref() && {
10506     return {static_cast<T&&>(this->__fbthrift_field_descriptor), __isset.at(18), __isset.bit(18)};
10507   }
10508 
10509   template <typename..., typename T = ::std::int32_t>
10510   FOLLY_ERASE ::apache::thrift::field_ref<const T&> descriptor() const& {
10511     return {this->__fbthrift_field_descriptor, __isset.at(18), __isset.bit(18)};
10512   }
10513 
10514   template <typename..., typename T = ::std::int32_t>
10515   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> descriptor() const&& {
10516     return {static_cast<const T&&>(this->__fbthrift_field_descriptor), __isset.at(18), __isset.bit(18)};
10517   }
10518 
10519   template <typename..., typename T = ::std::int32_t>
10520   FOLLY_ERASE ::apache::thrift::field_ref<T&> descriptor() & {
10521     return {this->__fbthrift_field_descriptor, __isset.at(18), __isset.bit(18)};
10522   }
10523 
10524   template <typename..., typename T = ::std::int32_t>
10525   FOLLY_ERASE ::apache::thrift::field_ref<T&&> descriptor() && {
10526     return {static_cast<T&&>(this->__fbthrift_field_descriptor), __isset.at(18), __isset.bit(18)};
10527   }
10528 
10529   template <typename..., typename T = ::std::int32_t>
10530   FOLLY_ERASE ::apache::thrift::field_ref<const T&> descriptors_ref() const& {
10531     return {this->__fbthrift_field_descriptors, __isset.at(19), __isset.bit(19)};
10532   }
10533 
10534   template <typename..., typename T = ::std::int32_t>
10535   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> descriptors_ref() const&& {
10536     return {static_cast<const T&&>(this->__fbthrift_field_descriptors), __isset.at(19), __isset.bit(19)};
10537   }
10538 
10539   template <typename..., typename T = ::std::int32_t>
10540   FOLLY_ERASE ::apache::thrift::field_ref<T&> descriptors_ref() & {
10541     return {this->__fbthrift_field_descriptors, __isset.at(19), __isset.bit(19)};
10542   }
10543 
10544   template <typename..., typename T = ::std::int32_t>
10545   FOLLY_ERASE ::apache::thrift::field_ref<T&&> descriptors_ref() && {
10546     return {static_cast<T&&>(this->__fbthrift_field_descriptors), __isset.at(19), __isset.bit(19)};
10547   }
10548 
10549   template <typename..., typename T = ::std::int32_t>
10550   FOLLY_ERASE ::apache::thrift::field_ref<const T&> descriptors() const& {
10551     return {this->__fbthrift_field_descriptors, __isset.at(19), __isset.bit(19)};
10552   }
10553 
10554   template <typename..., typename T = ::std::int32_t>
10555   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> descriptors() const&& {
10556     return {static_cast<const T&&>(this->__fbthrift_field_descriptors), __isset.at(19), __isset.bit(19)};
10557   }
10558 
10559   template <typename..., typename T = ::std::int32_t>
10560   FOLLY_ERASE ::apache::thrift::field_ref<T&> descriptors() & {
10561     return {this->__fbthrift_field_descriptors, __isset.at(19), __isset.bit(19)};
10562   }
10563 
10564   template <typename..., typename T = ::std::int32_t>
10565   FOLLY_ERASE ::apache::thrift::field_ref<T&&> descriptors() && {
10566     return {static_cast<T&&>(this->__fbthrift_field_descriptors), __isset.at(19), __isset.bit(19)};
10567   }
10568 
10569   template <typename..., typename T = ::std::int32_t>
10570   FOLLY_ERASE ::apache::thrift::field_ref<const T&> key_ref() const& {
10571     return {this->__fbthrift_field_key, __isset.at(20), __isset.bit(20)};
10572   }
10573 
10574   template <typename..., typename T = ::std::int32_t>
10575   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> key_ref() const&& {
10576     return {static_cast<const T&&>(this->__fbthrift_field_key), __isset.at(20), __isset.bit(20)};
10577   }
10578 
10579   template <typename..., typename T = ::std::int32_t>
10580   FOLLY_ERASE ::apache::thrift::field_ref<T&> key_ref() & {
10581     return {this->__fbthrift_field_key, __isset.at(20), __isset.bit(20)};
10582   }
10583 
10584   template <typename..., typename T = ::std::int32_t>
10585   FOLLY_ERASE ::apache::thrift::field_ref<T&&> key_ref() && {
10586     return {static_cast<T&&>(this->__fbthrift_field_key), __isset.at(20), __isset.bit(20)};
10587   }
10588 
10589   template <typename..., typename T = ::std::int32_t>
10590   FOLLY_ERASE ::apache::thrift::field_ref<const T&> key() const& {
10591     return {this->__fbthrift_field_key, __isset.at(20), __isset.bit(20)};
10592   }
10593 
10594   template <typename..., typename T = ::std::int32_t>
10595   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> key() const&& {
10596     return {static_cast<const T&&>(this->__fbthrift_field_key), __isset.at(20), __isset.bit(20)};
10597   }
10598 
10599   template <typename..., typename T = ::std::int32_t>
10600   FOLLY_ERASE ::apache::thrift::field_ref<T&> key() & {
10601     return {this->__fbthrift_field_key, __isset.at(20), __isset.bit(20)};
10602   }
10603 
10604   template <typename..., typename T = ::std::int32_t>
10605   FOLLY_ERASE ::apache::thrift::field_ref<T&&> key() && {
10606     return {static_cast<T&&>(this->__fbthrift_field_key), __isset.at(20), __isset.bit(20)};
10607   }
10608 
10609   template <typename..., typename T = ::std::int32_t>
10610   FOLLY_ERASE ::apache::thrift::field_ref<const T&> keys_ref() const& {
10611     return {this->__fbthrift_field_keys, __isset.at(21), __isset.bit(21)};
10612   }
10613 
10614   template <typename..., typename T = ::std::int32_t>
10615   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> keys_ref() const&& {
10616     return {static_cast<const T&&>(this->__fbthrift_field_keys), __isset.at(21), __isset.bit(21)};
10617   }
10618 
10619   template <typename..., typename T = ::std::int32_t>
10620   FOLLY_ERASE ::apache::thrift::field_ref<T&> keys_ref() & {
10621     return {this->__fbthrift_field_keys, __isset.at(21), __isset.bit(21)};
10622   }
10623 
10624   template <typename..., typename T = ::std::int32_t>
10625   FOLLY_ERASE ::apache::thrift::field_ref<T&&> keys_ref() && {
10626     return {static_cast<T&&>(this->__fbthrift_field_keys), __isset.at(21), __isset.bit(21)};
10627   }
10628 
10629   template <typename..., typename T = ::std::int32_t>
10630   FOLLY_ERASE ::apache::thrift::field_ref<const T&> keys() const& {
10631     return {this->__fbthrift_field_keys, __isset.at(21), __isset.bit(21)};
10632   }
10633 
10634   template <typename..., typename T = ::std::int32_t>
10635   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> keys() const&& {
10636     return {static_cast<const T&&>(this->__fbthrift_field_keys), __isset.at(21), __isset.bit(21)};
10637   }
10638 
10639   template <typename..., typename T = ::std::int32_t>
10640   FOLLY_ERASE ::apache::thrift::field_ref<T&> keys() & {
10641     return {this->__fbthrift_field_keys, __isset.at(21), __isset.bit(21)};
10642   }
10643 
10644   template <typename..., typename T = ::std::int32_t>
10645   FOLLY_ERASE ::apache::thrift::field_ref<T&&> keys() && {
10646     return {static_cast<T&&>(this->__fbthrift_field_keys), __isset.at(21), __isset.bit(21)};
10647   }
10648 
10649   template <typename..., typename T = ::std::int32_t>
10650   FOLLY_ERASE ::apache::thrift::field_ref<const T&> annotation_ref() const& {
10651     return {this->__fbthrift_field_annotation, __isset.at(22), __isset.bit(22)};
10652   }
10653 
10654   template <typename..., typename T = ::std::int32_t>
10655   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> annotation_ref() const&& {
10656     return {static_cast<const T&&>(this->__fbthrift_field_annotation), __isset.at(22), __isset.bit(22)};
10657   }
10658 
10659   template <typename..., typename T = ::std::int32_t>
10660   FOLLY_ERASE ::apache::thrift::field_ref<T&> annotation_ref() & {
10661     return {this->__fbthrift_field_annotation, __isset.at(22), __isset.bit(22)};
10662   }
10663 
10664   template <typename..., typename T = ::std::int32_t>
10665   FOLLY_ERASE ::apache::thrift::field_ref<T&&> annotation_ref() && {
10666     return {static_cast<T&&>(this->__fbthrift_field_annotation), __isset.at(22), __isset.bit(22)};
10667   }
10668 
10669   template <typename..., typename T = ::std::int32_t>
10670   FOLLY_ERASE ::apache::thrift::field_ref<const T&> annotation() const& {
10671     return {this->__fbthrift_field_annotation, __isset.at(22), __isset.bit(22)};
10672   }
10673 
10674   template <typename..., typename T = ::std::int32_t>
10675   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> annotation() const&& {
10676     return {static_cast<const T&&>(this->__fbthrift_field_annotation), __isset.at(22), __isset.bit(22)};
10677   }
10678 
10679   template <typename..., typename T = ::std::int32_t>
10680   FOLLY_ERASE ::apache::thrift::field_ref<T&> annotation() & {
10681     return {this->__fbthrift_field_annotation, __isset.at(22), __isset.bit(22)};
10682   }
10683 
10684   template <typename..., typename T = ::std::int32_t>
10685   FOLLY_ERASE ::apache::thrift::field_ref<T&&> annotation() && {
10686     return {static_cast<T&&>(this->__fbthrift_field_annotation), __isset.at(22), __isset.bit(22)};
10687   }
10688 
10689   template <typename..., typename T = ::std::int32_t>
10690   FOLLY_ERASE ::apache::thrift::field_ref<const T&> annotations_ref() const& {
10691     return {this->__fbthrift_field_annotations, __isset.at(23), __isset.bit(23)};
10692   }
10693 
10694   template <typename..., typename T = ::std::int32_t>
10695   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> annotations_ref() const&& {
10696     return {static_cast<const T&&>(this->__fbthrift_field_annotations), __isset.at(23), __isset.bit(23)};
10697   }
10698 
10699   template <typename..., typename T = ::std::int32_t>
10700   FOLLY_ERASE ::apache::thrift::field_ref<T&> annotations_ref() & {
10701     return {this->__fbthrift_field_annotations, __isset.at(23), __isset.bit(23)};
10702   }
10703 
10704   template <typename..., typename T = ::std::int32_t>
10705   FOLLY_ERASE ::apache::thrift::field_ref<T&&> annotations_ref() && {
10706     return {static_cast<T&&>(this->__fbthrift_field_annotations), __isset.at(23), __isset.bit(23)};
10707   }
10708 
10709   template <typename..., typename T = ::std::int32_t>
10710   FOLLY_ERASE ::apache::thrift::field_ref<const T&> annotations() const& {
10711     return {this->__fbthrift_field_annotations, __isset.at(23), __isset.bit(23)};
10712   }
10713 
10714   template <typename..., typename T = ::std::int32_t>
10715   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> annotations() const&& {
10716     return {static_cast<const T&&>(this->__fbthrift_field_annotations), __isset.at(23), __isset.bit(23)};
10717   }
10718 
10719   template <typename..., typename T = ::std::int32_t>
10720   FOLLY_ERASE ::apache::thrift::field_ref<T&> annotations() & {
10721     return {this->__fbthrift_field_annotations, __isset.at(23), __isset.bit(23)};
10722   }
10723 
10724   template <typename..., typename T = ::std::int32_t>
10725   FOLLY_ERASE ::apache::thrift::field_ref<T&&> annotations() && {
10726     return {static_cast<T&&>(this->__fbthrift_field_annotations), __isset.at(23), __isset.bit(23)};
10727   }
10728 
10729   template <typename..., typename T = ::std::int32_t>
10730   FOLLY_ERASE ::apache::thrift::field_ref<const T&> member_ref() const& {
10731     return {this->__fbthrift_field_member, __isset.at(24), __isset.bit(24)};
10732   }
10733 
10734   template <typename..., typename T = ::std::int32_t>
10735   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> member_ref() const&& {
10736     return {static_cast<const T&&>(this->__fbthrift_field_member), __isset.at(24), __isset.bit(24)};
10737   }
10738 
10739   template <typename..., typename T = ::std::int32_t>
10740   FOLLY_ERASE ::apache::thrift::field_ref<T&> member_ref() & {
10741     return {this->__fbthrift_field_member, __isset.at(24), __isset.bit(24)};
10742   }
10743 
10744   template <typename..., typename T = ::std::int32_t>
10745   FOLLY_ERASE ::apache::thrift::field_ref<T&&> member_ref() && {
10746     return {static_cast<T&&>(this->__fbthrift_field_member), __isset.at(24), __isset.bit(24)};
10747   }
10748 
10749   template <typename..., typename T = ::std::int32_t>
10750   FOLLY_ERASE ::apache::thrift::field_ref<const T&> member() const& {
10751     return {this->__fbthrift_field_member, __isset.at(24), __isset.bit(24)};
10752   }
10753 
10754   template <typename..., typename T = ::std::int32_t>
10755   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> member() const&& {
10756     return {static_cast<const T&&>(this->__fbthrift_field_member), __isset.at(24), __isset.bit(24)};
10757   }
10758 
10759   template <typename..., typename T = ::std::int32_t>
10760   FOLLY_ERASE ::apache::thrift::field_ref<T&> member() & {
10761     return {this->__fbthrift_field_member, __isset.at(24), __isset.bit(24)};
10762   }
10763 
10764   template <typename..., typename T = ::std::int32_t>
10765   FOLLY_ERASE ::apache::thrift::field_ref<T&&> member() && {
10766     return {static_cast<T&&>(this->__fbthrift_field_member), __isset.at(24), __isset.bit(24)};
10767   }
10768 
10769   template <typename..., typename T = ::std::int32_t>
10770   FOLLY_ERASE ::apache::thrift::field_ref<const T&> members_ref() const& {
10771     return {this->__fbthrift_field_members, __isset.at(25), __isset.bit(25)};
10772   }
10773 
10774   template <typename..., typename T = ::std::int32_t>
10775   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> members_ref() const&& {
10776     return {static_cast<const T&&>(this->__fbthrift_field_members), __isset.at(25), __isset.bit(25)};
10777   }
10778 
10779   template <typename..., typename T = ::std::int32_t>
10780   FOLLY_ERASE ::apache::thrift::field_ref<T&> members_ref() & {
10781     return {this->__fbthrift_field_members, __isset.at(25), __isset.bit(25)};
10782   }
10783 
10784   template <typename..., typename T = ::std::int32_t>
10785   FOLLY_ERASE ::apache::thrift::field_ref<T&&> members_ref() && {
10786     return {static_cast<T&&>(this->__fbthrift_field_members), __isset.at(25), __isset.bit(25)};
10787   }
10788 
10789   template <typename..., typename T = ::std::int32_t>
10790   FOLLY_ERASE ::apache::thrift::field_ref<const T&> members() const& {
10791     return {this->__fbthrift_field_members, __isset.at(25), __isset.bit(25)};
10792   }
10793 
10794   template <typename..., typename T = ::std::int32_t>
10795   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> members() const&& {
10796     return {static_cast<const T&&>(this->__fbthrift_field_members), __isset.at(25), __isset.bit(25)};
10797   }
10798 
10799   template <typename..., typename T = ::std::int32_t>
10800   FOLLY_ERASE ::apache::thrift::field_ref<T&> members() & {
10801     return {this->__fbthrift_field_members, __isset.at(25), __isset.bit(25)};
10802   }
10803 
10804   template <typename..., typename T = ::std::int32_t>
10805   FOLLY_ERASE ::apache::thrift::field_ref<T&&> members() && {
10806     return {static_cast<T&&>(this->__fbthrift_field_members), __isset.at(25), __isset.bit(25)};
10807   }
10808 
10809   template <typename..., typename T = ::std::int32_t>
10810   FOLLY_ERASE ::apache::thrift::field_ref<const T&> field_ref() const& {
10811     return {this->__fbthrift_field_field, __isset.at(26), __isset.bit(26)};
10812   }
10813 
10814   template <typename..., typename T = ::std::int32_t>
10815   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> field_ref() const&& {
10816     return {static_cast<const T&&>(this->__fbthrift_field_field), __isset.at(26), __isset.bit(26)};
10817   }
10818 
10819   template <typename..., typename T = ::std::int32_t>
10820   FOLLY_ERASE ::apache::thrift::field_ref<T&> field_ref() & {
10821     return {this->__fbthrift_field_field, __isset.at(26), __isset.bit(26)};
10822   }
10823 
10824   template <typename..., typename T = ::std::int32_t>
10825   FOLLY_ERASE ::apache::thrift::field_ref<T&&> field_ref() && {
10826     return {static_cast<T&&>(this->__fbthrift_field_field), __isset.at(26), __isset.bit(26)};
10827   }
10828 
10829   template <typename..., typename T = ::std::int32_t>
10830   FOLLY_ERASE ::apache::thrift::field_ref<const T&> field() const& {
10831     return {this->__fbthrift_field_field, __isset.at(26), __isset.bit(26)};
10832   }
10833 
10834   template <typename..., typename T = ::std::int32_t>
10835   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> field() const&& {
10836     return {static_cast<const T&&>(this->__fbthrift_field_field), __isset.at(26), __isset.bit(26)};
10837   }
10838 
10839   template <typename..., typename T = ::std::int32_t>
10840   FOLLY_ERASE ::apache::thrift::field_ref<T&> field() & {
10841     return {this->__fbthrift_field_field, __isset.at(26), __isset.bit(26)};
10842   }
10843 
10844   template <typename..., typename T = ::std::int32_t>
10845   FOLLY_ERASE ::apache::thrift::field_ref<T&&> field() && {
10846     return {static_cast<T&&>(this->__fbthrift_field_field), __isset.at(26), __isset.bit(26)};
10847   }
10848 
10849   template <typename..., typename T = ::std::int32_t>
10850   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fields_ref() const& {
10851     return {this->__fbthrift_field_fields, __isset.at(27), __isset.bit(27)};
10852   }
10853 
10854   template <typename..., typename T = ::std::int32_t>
10855   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fields_ref() const&& {
10856     return {static_cast<const T&&>(this->__fbthrift_field_fields), __isset.at(27), __isset.bit(27)};
10857   }
10858 
10859   template <typename..., typename T = ::std::int32_t>
10860   FOLLY_ERASE ::apache::thrift::field_ref<T&> fields_ref() & {
10861     return {this->__fbthrift_field_fields, __isset.at(27), __isset.bit(27)};
10862   }
10863 
10864   template <typename..., typename T = ::std::int32_t>
10865   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fields_ref() && {
10866     return {static_cast<T&&>(this->__fbthrift_field_fields), __isset.at(27), __isset.bit(27)};
10867   }
10868 
10869   template <typename..., typename T = ::std::int32_t>
10870   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fields() const& {
10871     return {this->__fbthrift_field_fields, __isset.at(27), __isset.bit(27)};
10872   }
10873 
10874   template <typename..., typename T = ::std::int32_t>
10875   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fields() const&& {
10876     return {static_cast<const T&&>(this->__fbthrift_field_fields), __isset.at(27), __isset.bit(27)};
10877   }
10878 
10879   template <typename..., typename T = ::std::int32_t>
10880   FOLLY_ERASE ::apache::thrift::field_ref<T&> fields() & {
10881     return {this->__fbthrift_field_fields, __isset.at(27), __isset.bit(27)};
10882   }
10883 
10884   template <typename..., typename T = ::std::int32_t>
10885   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fields() && {
10886     return {static_cast<T&&>(this->__fbthrift_field_fields), __isset.at(27), __isset.bit(27)};
10887   }
10888 
10889   ::std::int32_t get_get() const {
10890     return __fbthrift_field_get;
10891   }
10892 
10893   [[deprecated("Use `FOO.get_ref() = BAR;` instead of `FOO.set_get(BAR);`")]]
10894   ::std::int32_t& set_get(::std::int32_t get_) {
10895     get_ref() = get_;
10896     return __fbthrift_field_get;
10897   }
10898 
10899   ::std::int32_t get_getter() const {
10900     return __fbthrift_field_getter;
10901   }
10902 
10903   [[deprecated("Use `FOO.getter_ref() = BAR;` instead of `FOO.set_getter(BAR);`")]]
10904   ::std::int32_t& set_getter(::std::int32_t getter_) {
10905     getter_ref() = getter_;
10906     return __fbthrift_field_getter;
10907   }
10908 
10909   ::std::int32_t get_lists() const {
10910     return __fbthrift_field_lists;
10911   }
10912 
10913   [[deprecated("Use `FOO.lists_ref() = BAR;` instead of `FOO.set_lists(BAR);`")]]
10914   ::std::int32_t& set_lists(::std::int32_t lists_) {
10915     lists_ref() = lists_;
10916     return __fbthrift_field_lists;
10917   }
10918 
10919   ::std::int32_t get_maps() const {
10920     return __fbthrift_field_maps;
10921   }
10922 
10923   [[deprecated("Use `FOO.maps_ref() = BAR;` instead of `FOO.set_maps(BAR);`")]]
10924   ::std::int32_t& set_maps(::std::int32_t maps_) {
10925     maps_ref() = maps_;
10926     return __fbthrift_field_maps;
10927   }
10928 
10929   ::std::int32_t get_name() const {
10930     return __fbthrift_field_name;
10931   }
10932 
10933   [[deprecated("Use `FOO.name_ref() = BAR;` instead of `FOO.set_name(BAR);`")]]
10934   ::std::int32_t& set_name(::std::int32_t name_) {
10935     name_ref() = name_;
10936     return __fbthrift_field_name;
10937   }
10938 
10939   ::std::int32_t get_name_to_value() const {
10940     return __fbthrift_field_name_to_value;
10941   }
10942 
10943   [[deprecated("Use `FOO.name_to_value_ref() = BAR;` instead of `FOO.set_name_to_value(BAR);`")]]
10944   ::std::int32_t& set_name_to_value(::std::int32_t name_to_value_) {
10945     name_to_value_ref() = name_to_value_;
10946     return __fbthrift_field_name_to_value;
10947   }
10948 
10949   ::std::int32_t get_names() const {
10950     return __fbthrift_field_names;
10951   }
10952 
10953   [[deprecated("Use `FOO.names_ref() = BAR;` instead of `FOO.set_names(BAR);`")]]
10954   ::std::int32_t& set_names(::std::int32_t names_) {
10955     names_ref() = names_;
10956     return __fbthrift_field_names;
10957   }
10958 
10959   ::std::int32_t get_prefix_tree() const {
10960     return __fbthrift_field_prefix_tree;
10961   }
10962 
10963   [[deprecated("Use `FOO.prefix_tree_ref() = BAR;` instead of `FOO.set_prefix_tree(BAR);`")]]
10964   ::std::int32_t& set_prefix_tree(::std::int32_t prefix_tree_) {
10965     prefix_tree_ref() = prefix_tree_;
10966     return __fbthrift_field_prefix_tree;
10967   }
10968 
10969   ::std::int32_t get_sets() const {
10970     return __fbthrift_field_sets;
10971   }
10972 
10973   [[deprecated("Use `FOO.sets_ref() = BAR;` instead of `FOO.set_sets(BAR);`")]]
10974   ::std::int32_t& set_sets(::std::int32_t sets_) {
10975     sets_ref() = sets_;
10976     return __fbthrift_field_sets;
10977   }
10978 
10979   ::std::int32_t get_setter() const {
10980     return __fbthrift_field_setter;
10981   }
10982 
10983   [[deprecated("Use `FOO.setter_ref() = BAR;` instead of `FOO.set_setter(BAR);`")]]
10984   ::std::int32_t& set_setter(::std::int32_t setter_) {
10985     setter_ref() = setter_;
10986     return __fbthrift_field_setter;
10987   }
10988 
10989   ::std::int32_t get_str() const {
10990     return __fbthrift_field_str;
10991   }
10992 
10993   [[deprecated("Use `FOO.str_ref() = BAR;` instead of `FOO.set_str(BAR);`")]]
10994   ::std::int32_t& set_str(::std::int32_t str_) {
10995     str_ref() = str_;
10996     return __fbthrift_field_str;
10997   }
10998 
10999   ::std::int32_t get_strings() const {
11000     return __fbthrift_field_strings;
11001   }
11002 
11003   [[deprecated("Use `FOO.strings_ref() = BAR;` instead of `FOO.set_strings(BAR);`")]]
11004   ::std::int32_t& set_strings(::std::int32_t strings_) {
11005     strings_ref() = strings_;
11006     return __fbthrift_field_strings;
11007   }
11008 
11009   ::std::int32_t get_type() const {
11010     return __fbthrift_field_type;
11011   }
11012 
11013   [[deprecated("Use `FOO.type_ref() = BAR;` instead of `FOO.set_type(BAR);`")]]
11014   ::std::int32_t& set_type(::std::int32_t type_) {
11015     type_ref() = type_;
11016     return __fbthrift_field_type;
11017   }
11018 
11019   ::std::int32_t get_value() const {
11020     return __fbthrift_field_value;
11021   }
11022 
11023   [[deprecated("Use `FOO.value_ref() = BAR;` instead of `FOO.set_value(BAR);`")]]
11024   ::std::int32_t& set_value(::std::int32_t value_) {
11025     value_ref() = value_;
11026     return __fbthrift_field_value;
11027   }
11028 
11029   ::std::int32_t get_value_to_name() const {
11030     return __fbthrift_field_value_to_name;
11031   }
11032 
11033   [[deprecated("Use `FOO.value_to_name_ref() = BAR;` instead of `FOO.set_value_to_name(BAR);`")]]
11034   ::std::int32_t& set_value_to_name(::std::int32_t value_to_name_) {
11035     value_to_name_ref() = value_to_name_;
11036     return __fbthrift_field_value_to_name;
11037   }
11038 
11039   ::std::int32_t get_values() const {
11040     return __fbthrift_field_values;
11041   }
11042 
11043   [[deprecated("Use `FOO.values_ref() = BAR;` instead of `FOO.set_values(BAR);`")]]
11044   ::std::int32_t& set_values(::std::int32_t values_) {
11045     values_ref() = values_;
11046     return __fbthrift_field_values;
11047   }
11048 
11049   ::std::int32_t get_id() const {
11050     return __fbthrift_field_id;
11051   }
11052 
11053   [[deprecated("Use `FOO.id_ref() = BAR;` instead of `FOO.set_id(BAR);`")]]
11054   ::std::int32_t& set_id(::std::int32_t id_) {
11055     id_ref() = id_;
11056     return __fbthrift_field_id;
11057   }
11058 
11059   ::std::int32_t get_ids() const {
11060     return __fbthrift_field_ids;
11061   }
11062 
11063   [[deprecated("Use `FOO.ids_ref() = BAR;` instead of `FOO.set_ids(BAR);`")]]
11064   ::std::int32_t& set_ids(::std::int32_t ids_) {
11065     ids_ref() = ids_;
11066     return __fbthrift_field_ids;
11067   }
11068 
11069   ::std::int32_t get_descriptor() const {
11070     return __fbthrift_field_descriptor;
11071   }
11072 
11073   [[deprecated("Use `FOO.descriptor_ref() = BAR;` instead of `FOO.set_descriptor(BAR);`")]]
11074   ::std::int32_t& set_descriptor(::std::int32_t descriptor_) {
11075     descriptor_ref() = descriptor_;
11076     return __fbthrift_field_descriptor;
11077   }
11078 
11079   ::std::int32_t get_descriptors() const {
11080     return __fbthrift_field_descriptors;
11081   }
11082 
11083   [[deprecated("Use `FOO.descriptors_ref() = BAR;` instead of `FOO.set_descriptors(BAR);`")]]
11084   ::std::int32_t& set_descriptors(::std::int32_t descriptors_) {
11085     descriptors_ref() = descriptors_;
11086     return __fbthrift_field_descriptors;
11087   }
11088 
11089   ::std::int32_t get_key() const {
11090     return __fbthrift_field_key;
11091   }
11092 
11093   [[deprecated("Use `FOO.key_ref() = BAR;` instead of `FOO.set_key(BAR);`")]]
11094   ::std::int32_t& set_key(::std::int32_t key_) {
11095     key_ref() = key_;
11096     return __fbthrift_field_key;
11097   }
11098 
11099   ::std::int32_t get_keys() const {
11100     return __fbthrift_field_keys;
11101   }
11102 
11103   [[deprecated("Use `FOO.keys_ref() = BAR;` instead of `FOO.set_keys(BAR);`")]]
11104   ::std::int32_t& set_keys(::std::int32_t keys_) {
11105     keys_ref() = keys_;
11106     return __fbthrift_field_keys;
11107   }
11108 
11109   ::std::int32_t get_annotation() const {
11110     return __fbthrift_field_annotation;
11111   }
11112 
11113   [[deprecated("Use `FOO.annotation_ref() = BAR;` instead of `FOO.set_annotation(BAR);`")]]
11114   ::std::int32_t& set_annotation(::std::int32_t annotation_) {
11115     annotation_ref() = annotation_;
11116     return __fbthrift_field_annotation;
11117   }
11118 
11119   ::std::int32_t get_annotations() const {
11120     return __fbthrift_field_annotations;
11121   }
11122 
11123   [[deprecated("Use `FOO.annotations_ref() = BAR;` instead of `FOO.set_annotations(BAR);`")]]
11124   ::std::int32_t& set_annotations(::std::int32_t annotations_) {
11125     annotations_ref() = annotations_;
11126     return __fbthrift_field_annotations;
11127   }
11128 
11129   ::std::int32_t get_member() const {
11130     return __fbthrift_field_member;
11131   }
11132 
11133   [[deprecated("Use `FOO.member_ref() = BAR;` instead of `FOO.set_member(BAR);`")]]
11134   ::std::int32_t& set_member(::std::int32_t member_) {
11135     member_ref() = member_;
11136     return __fbthrift_field_member;
11137   }
11138 
11139   ::std::int32_t get_members() const {
11140     return __fbthrift_field_members;
11141   }
11142 
11143   [[deprecated("Use `FOO.members_ref() = BAR;` instead of `FOO.set_members(BAR);`")]]
11144   ::std::int32_t& set_members(::std::int32_t members_) {
11145     members_ref() = members_;
11146     return __fbthrift_field_members;
11147   }
11148 
11149   ::std::int32_t get_field() const {
11150     return __fbthrift_field_field;
11151   }
11152 
11153   [[deprecated("Use `FOO.field_ref() = BAR;` instead of `FOO.set_field(BAR);`")]]
11154   ::std::int32_t& set_field(::std::int32_t field_) {
11155     field_ref() = field_;
11156     return __fbthrift_field_field;
11157   }
11158 
11159   ::std::int32_t get_fields() const {
11160     return __fbthrift_field_fields;
11161   }
11162 
11163   [[deprecated("Use `FOO.fields_ref() = BAR;` instead of `FOO.set_fields(BAR);`")]]
11164   ::std::int32_t& set_fields(::std::int32_t fields_) {
11165     fields_ref() = fields_;
11166     return __fbthrift_field_fields;
11167   }
11168 
11169   template <class Protocol_>
11170   uint32_t read(Protocol_* iprot);
11171   template <class Protocol_>
11172   uint32_t serializedSize(Protocol_ const* prot_) const;
11173   template <class Protocol_>
11174   uint32_t serializedSizeZC(Protocol_ const* prot_) const;
11175   template <class Protocol_>
11176   uint32_t write(Protocol_* prot_) const;
11177 
11178  private:
11179   template <class Protocol_>
11180   void readNoXfer(Protocol_* iprot);
11181 
11182   friend class ::apache::thrift::Cpp2Ops<struct_with_special_names>;
11183   friend void swap(struct_with_special_names& a, struct_with_special_names& b);
11184 };
11185 
11186 template <class Protocol_>
11187 uint32_t struct_with_special_names::read(Protocol_* iprot) {
11188   auto _xferStart = iprot->getCursorPosition();
11189   readNoXfer(iprot);
11190   return iprot->getCursorPosition() - _xferStart;
11191 }
11192 
11193 }} // test_cpp2::cpp_reflection
11194 namespace test_cpp2 { namespace cpp_reflection {
11195 class struct_with_indirections final  {
11196  private:
11197   friend struct ::apache::thrift::detail::st::struct_private_access;
11198 
11199   //  used by a static_assert in the corresponding source
11200   static constexpr bool __fbthrift_cpp2_gen_json = false;
11201   static constexpr bool __fbthrift_cpp2_gen_nimble = false;
11202   static constexpr bool __fbthrift_cpp2_gen_has_thrift_uri = false;
11203 
11204   void __fbthrift_clear();
11205 
11206  public:
11207   using __fbthrift_cpp2_type = struct_with_indirections;
11208   static constexpr bool __fbthrift_cpp2_is_union =
11209     false;
11210 
11211 
11212  public:
11213 
11214   struct_with_indirections();
11215 
11216   // FragileConstructor for use in initialization lists only.
11217   [[deprecated("This constructor is deprecated")]]
11218   struct_with_indirections(apache::thrift::FragileConstructor, ::std::int32_t real__arg, ::test_cpp2::cpp_reflection::FakeI32 fake__arg, ::test_cpp2::cpp_reflection::HasANumber number__arg, ::test_cpp2::cpp_reflection::HasAResult result__arg, ::test_cpp2::cpp_reflection::HasAPhrase phrase__arg);
11219 
11220   struct_with_indirections(struct_with_indirections&&) noexcept;
11221 
11222   struct_with_indirections(const struct_with_indirections& src);
11223 
11224 
11225   struct_with_indirections& operator=(struct_with_indirections&&) noexcept;
11226   struct_with_indirections& operator=(const struct_with_indirections& src);
11227 
11228   ~struct_with_indirections();
11229 
11230  private:
11231   ::std::int32_t __fbthrift_field_real;
11232  private:
11233   ::test_cpp2::cpp_reflection::FakeI32 __fbthrift_field_fake;
11234  private:
11235   ::test_cpp2::cpp_reflection::HasANumber __fbthrift_field_number;
11236  private:
11237   ::test_cpp2::cpp_reflection::HasAResult __fbthrift_field_result;
11238  private:
11239   ::test_cpp2::cpp_reflection::HasAPhrase __fbthrift_field_phrase;
11240  private:
11241   apache::thrift::detail::isset_bitset<5, false> __isset;
11242 
11243  public:
11244 
11245   bool operator==(const struct_with_indirections&) const;
11246   bool operator<(const struct_with_indirections&) const;
11247 
11248   template <typename..., typename T = ::std::int32_t>
11249   FOLLY_ERASE ::apache::thrift::field_ref<const T&> real_ref() const& {
11250     return {this->__fbthrift_field_real, __isset.at(0), __isset.bit(0)};
11251   }
11252 
11253   template <typename..., typename T = ::std::int32_t>
11254   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> real_ref() const&& {
11255     return {static_cast<const T&&>(this->__fbthrift_field_real), __isset.at(0), __isset.bit(0)};
11256   }
11257 
11258   template <typename..., typename T = ::std::int32_t>
11259   FOLLY_ERASE ::apache::thrift::field_ref<T&> real_ref() & {
11260     return {this->__fbthrift_field_real, __isset.at(0), __isset.bit(0)};
11261   }
11262 
11263   template <typename..., typename T = ::std::int32_t>
11264   FOLLY_ERASE ::apache::thrift::field_ref<T&&> real_ref() && {
11265     return {static_cast<T&&>(this->__fbthrift_field_real), __isset.at(0), __isset.bit(0)};
11266   }
11267 
11268   template <typename..., typename T = ::std::int32_t>
11269   FOLLY_ERASE ::apache::thrift::field_ref<const T&> real() const& {
11270     return {this->__fbthrift_field_real, __isset.at(0), __isset.bit(0)};
11271   }
11272 
11273   template <typename..., typename T = ::std::int32_t>
11274   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> real() const&& {
11275     return {static_cast<const T&&>(this->__fbthrift_field_real), __isset.at(0), __isset.bit(0)};
11276   }
11277 
11278   template <typename..., typename T = ::std::int32_t>
11279   FOLLY_ERASE ::apache::thrift::field_ref<T&> real() & {
11280     return {this->__fbthrift_field_real, __isset.at(0), __isset.bit(0)};
11281   }
11282 
11283   template <typename..., typename T = ::std::int32_t>
11284   FOLLY_ERASE ::apache::thrift::field_ref<T&&> real() && {
11285     return {static_cast<T&&>(this->__fbthrift_field_real), __isset.at(0), __isset.bit(0)};
11286   }
11287 
11288   template <typename..., typename T = ::test_cpp2::cpp_reflection::FakeI32>
11289   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fake_ref() const& {
11290     return {this->__fbthrift_field_fake, __isset.at(1), __isset.bit(1)};
11291   }
11292 
11293   template <typename..., typename T = ::test_cpp2::cpp_reflection::FakeI32>
11294   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fake_ref() const&& {
11295     return {static_cast<const T&&>(this->__fbthrift_field_fake), __isset.at(1), __isset.bit(1)};
11296   }
11297 
11298   template <typename..., typename T = ::test_cpp2::cpp_reflection::FakeI32>
11299   FOLLY_ERASE ::apache::thrift::field_ref<T&> fake_ref() & {
11300     return {this->__fbthrift_field_fake, __isset.at(1), __isset.bit(1)};
11301   }
11302 
11303   template <typename..., typename T = ::test_cpp2::cpp_reflection::FakeI32>
11304   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fake_ref() && {
11305     return {static_cast<T&&>(this->__fbthrift_field_fake), __isset.at(1), __isset.bit(1)};
11306   }
11307 
11308   template <typename..., typename T = ::test_cpp2::cpp_reflection::FakeI32>
11309   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fake() const& {
11310     return {this->__fbthrift_field_fake, __isset.at(1), __isset.bit(1)};
11311   }
11312 
11313   template <typename..., typename T = ::test_cpp2::cpp_reflection::FakeI32>
11314   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fake() const&& {
11315     return {static_cast<const T&&>(this->__fbthrift_field_fake), __isset.at(1), __isset.bit(1)};
11316   }
11317 
11318   template <typename..., typename T = ::test_cpp2::cpp_reflection::FakeI32>
11319   FOLLY_ERASE ::apache::thrift::field_ref<T&> fake() & {
11320     return {this->__fbthrift_field_fake, __isset.at(1), __isset.bit(1)};
11321   }
11322 
11323   template <typename..., typename T = ::test_cpp2::cpp_reflection::FakeI32>
11324   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fake() && {
11325     return {static_cast<T&&>(this->__fbthrift_field_fake), __isset.at(1), __isset.bit(1)};
11326   }
11327 
11328   template <typename..., typename T = ::test_cpp2::cpp_reflection::HasANumber>
11329   FOLLY_ERASE ::apache::thrift::field_ref<const T&> number_ref() const& {
11330     return {this->__fbthrift_field_number, __isset.at(2), __isset.bit(2)};
11331   }
11332 
11333   template <typename..., typename T = ::test_cpp2::cpp_reflection::HasANumber>
11334   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> number_ref() const&& {
11335     return {static_cast<const T&&>(this->__fbthrift_field_number), __isset.at(2), __isset.bit(2)};
11336   }
11337 
11338   template <typename..., typename T = ::test_cpp2::cpp_reflection::HasANumber>
11339   FOLLY_ERASE ::apache::thrift::field_ref<T&> number_ref() & {
11340     return {this->__fbthrift_field_number, __isset.at(2), __isset.bit(2)};
11341   }
11342 
11343   template <typename..., typename T = ::test_cpp2::cpp_reflection::HasANumber>
11344   FOLLY_ERASE ::apache::thrift::field_ref<T&&> number_ref() && {
11345     return {static_cast<T&&>(this->__fbthrift_field_number), __isset.at(2), __isset.bit(2)};
11346   }
11347 
11348   template <typename..., typename T = ::test_cpp2::cpp_reflection::HasANumber>
11349   FOLLY_ERASE ::apache::thrift::field_ref<const T&> number() const& {
11350     return {this->__fbthrift_field_number, __isset.at(2), __isset.bit(2)};
11351   }
11352 
11353   template <typename..., typename T = ::test_cpp2::cpp_reflection::HasANumber>
11354   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> number() const&& {
11355     return {static_cast<const T&&>(this->__fbthrift_field_number), __isset.at(2), __isset.bit(2)};
11356   }
11357 
11358   template <typename..., typename T = ::test_cpp2::cpp_reflection::HasANumber>
11359   FOLLY_ERASE ::apache::thrift::field_ref<T&> number() & {
11360     return {this->__fbthrift_field_number, __isset.at(2), __isset.bit(2)};
11361   }
11362 
11363   template <typename..., typename T = ::test_cpp2::cpp_reflection::HasANumber>
11364   FOLLY_ERASE ::apache::thrift::field_ref<T&&> number() && {
11365     return {static_cast<T&&>(this->__fbthrift_field_number), __isset.at(2), __isset.bit(2)};
11366   }
11367 
11368   template <typename..., typename T = ::test_cpp2::cpp_reflection::HasAResult>
11369   FOLLY_ERASE ::apache::thrift::field_ref<const T&> result_ref() const& {
11370     return {this->__fbthrift_field_result, __isset.at(3), __isset.bit(3)};
11371   }
11372 
11373   template <typename..., typename T = ::test_cpp2::cpp_reflection::HasAResult>
11374   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> result_ref() const&& {
11375     return {static_cast<const T&&>(this->__fbthrift_field_result), __isset.at(3), __isset.bit(3)};
11376   }
11377 
11378   template <typename..., typename T = ::test_cpp2::cpp_reflection::HasAResult>
11379   FOLLY_ERASE ::apache::thrift::field_ref<T&> result_ref() & {
11380     return {this->__fbthrift_field_result, __isset.at(3), __isset.bit(3)};
11381   }
11382 
11383   template <typename..., typename T = ::test_cpp2::cpp_reflection::HasAResult>
11384   FOLLY_ERASE ::apache::thrift::field_ref<T&&> result_ref() && {
11385     return {static_cast<T&&>(this->__fbthrift_field_result), __isset.at(3), __isset.bit(3)};
11386   }
11387 
11388   template <typename..., typename T = ::test_cpp2::cpp_reflection::HasAResult>
11389   FOLLY_ERASE ::apache::thrift::field_ref<const T&> result() const& {
11390     return {this->__fbthrift_field_result, __isset.at(3), __isset.bit(3)};
11391   }
11392 
11393   template <typename..., typename T = ::test_cpp2::cpp_reflection::HasAResult>
11394   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> result() const&& {
11395     return {static_cast<const T&&>(this->__fbthrift_field_result), __isset.at(3), __isset.bit(3)};
11396   }
11397 
11398   template <typename..., typename T = ::test_cpp2::cpp_reflection::HasAResult>
11399   FOLLY_ERASE ::apache::thrift::field_ref<T&> result() & {
11400     return {this->__fbthrift_field_result, __isset.at(3), __isset.bit(3)};
11401   }
11402 
11403   template <typename..., typename T = ::test_cpp2::cpp_reflection::HasAResult>
11404   FOLLY_ERASE ::apache::thrift::field_ref<T&&> result() && {
11405     return {static_cast<T&&>(this->__fbthrift_field_result), __isset.at(3), __isset.bit(3)};
11406   }
11407 
11408   template <typename..., typename T = ::test_cpp2::cpp_reflection::HasAPhrase>
11409   FOLLY_ERASE ::apache::thrift::field_ref<const T&> phrase_ref() const& {
11410     return {this->__fbthrift_field_phrase, __isset.at(4), __isset.bit(4)};
11411   }
11412 
11413   template <typename..., typename T = ::test_cpp2::cpp_reflection::HasAPhrase>
11414   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> phrase_ref() const&& {
11415     return {static_cast<const T&&>(this->__fbthrift_field_phrase), __isset.at(4), __isset.bit(4)};
11416   }
11417 
11418   template <typename..., typename T = ::test_cpp2::cpp_reflection::HasAPhrase>
11419   FOLLY_ERASE ::apache::thrift::field_ref<T&> phrase_ref() & {
11420     return {this->__fbthrift_field_phrase, __isset.at(4), __isset.bit(4)};
11421   }
11422 
11423   template <typename..., typename T = ::test_cpp2::cpp_reflection::HasAPhrase>
11424   FOLLY_ERASE ::apache::thrift::field_ref<T&&> phrase_ref() && {
11425     return {static_cast<T&&>(this->__fbthrift_field_phrase), __isset.at(4), __isset.bit(4)};
11426   }
11427 
11428   template <typename..., typename T = ::test_cpp2::cpp_reflection::HasAPhrase>
11429   FOLLY_ERASE ::apache::thrift::field_ref<const T&> phrase() const& {
11430     return {this->__fbthrift_field_phrase, __isset.at(4), __isset.bit(4)};
11431   }
11432 
11433   template <typename..., typename T = ::test_cpp2::cpp_reflection::HasAPhrase>
11434   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> phrase() const&& {
11435     return {static_cast<const T&&>(this->__fbthrift_field_phrase), __isset.at(4), __isset.bit(4)};
11436   }
11437 
11438   template <typename..., typename T = ::test_cpp2::cpp_reflection::HasAPhrase>
11439   FOLLY_ERASE ::apache::thrift::field_ref<T&> phrase() & {
11440     return {this->__fbthrift_field_phrase, __isset.at(4), __isset.bit(4)};
11441   }
11442 
11443   template <typename..., typename T = ::test_cpp2::cpp_reflection::HasAPhrase>
11444   FOLLY_ERASE ::apache::thrift::field_ref<T&&> phrase() && {
11445     return {static_cast<T&&>(this->__fbthrift_field_phrase), __isset.at(4), __isset.bit(4)};
11446   }
11447 
11448   ::std::int32_t get_real() const {
11449     return __fbthrift_field_real;
11450   }
11451 
11452   [[deprecated("Use `FOO.real_ref() = BAR;` instead of `FOO.set_real(BAR);`")]]
11453   ::std::int32_t& set_real(::std::int32_t real_) {
11454     real_ref() = real_;
11455     return __fbthrift_field_real;
11456   }
11457 
11458   ::test_cpp2::cpp_reflection::FakeI32 get_fake() const {
11459     return __fbthrift_field_fake;
11460   }
11461 
11462   [[deprecated("Use `FOO.fake_ref() = BAR;` instead of `FOO.set_fake(BAR);`")]]
11463   ::test_cpp2::cpp_reflection::FakeI32& set_fake(::test_cpp2::cpp_reflection::FakeI32 fake_) {
11464     fake_ref() = fake_;
11465     return __fbthrift_field_fake;
11466   }
11467 
11468   ::test_cpp2::cpp_reflection::HasANumber get_number() const {
11469     return __fbthrift_field_number;
11470   }
11471 
11472   [[deprecated("Use `FOO.number_ref() = BAR;` instead of `FOO.set_number(BAR);`")]]
11473   ::test_cpp2::cpp_reflection::HasANumber& set_number(::test_cpp2::cpp_reflection::HasANumber number_) {
11474     number_ref() = number_;
11475     return __fbthrift_field_number;
11476   }
11477 
11478   ::test_cpp2::cpp_reflection::HasAResult get_result() const {
11479     return __fbthrift_field_result;
11480   }
11481 
11482   [[deprecated("Use `FOO.result_ref() = BAR;` instead of `FOO.set_result(BAR);`")]]
11483   ::test_cpp2::cpp_reflection::HasAResult& set_result(::test_cpp2::cpp_reflection::HasAResult result_) {
11484     result_ref() = result_;
11485     return __fbthrift_field_result;
11486   }
11487 
11488   const ::test_cpp2::cpp_reflection::HasAPhrase& get_phrase() const& {
11489     return __fbthrift_field_phrase;
11490   }
11491 
11492   ::test_cpp2::cpp_reflection::HasAPhrase get_phrase() && {
11493     return std::move(__fbthrift_field_phrase);
11494   }
11495 
11496   template <typename T_struct_with_indirections_phrase_struct_setter = ::test_cpp2::cpp_reflection::HasAPhrase>
11497   [[deprecated("Use `FOO.phrase_ref() = BAR;` instead of `FOO.set_phrase(BAR);`")]]
11498   ::test_cpp2::cpp_reflection::HasAPhrase& set_phrase(T_struct_with_indirections_phrase_struct_setter&& phrase_) {
11499     phrase_ref() = std::forward<T_struct_with_indirections_phrase_struct_setter>(phrase_);
11500     return __fbthrift_field_phrase;
11501   }
11502 
11503   template <class Protocol_>
11504   uint32_t read(Protocol_* iprot);
11505   template <class Protocol_>
11506   uint32_t serializedSize(Protocol_ const* prot_) const;
11507   template <class Protocol_>
11508   uint32_t serializedSizeZC(Protocol_ const* prot_) const;
11509   template <class Protocol_>
11510   uint32_t write(Protocol_* prot_) const;
11511 
11512  private:
11513   template <class Protocol_>
11514   void readNoXfer(Protocol_* iprot);
11515 
11516   friend class ::apache::thrift::Cpp2Ops<struct_with_indirections>;
11517   friend void swap(struct_with_indirections& a, struct_with_indirections& b);
11518 };
11519 
11520 template <class Protocol_>
11521 uint32_t struct_with_indirections::read(Protocol_* iprot) {
11522   auto _xferStart = iprot->getCursorPosition();
11523   readNoXfer(iprot);
11524   return iprot->getCursorPosition() - _xferStart;
11525 }
11526 
11527 }} // test_cpp2::cpp_reflection
11528 
11529 namespace apache { namespace thrift {
11530 
11531 template <> struct TEnumDataStorage<::test_cpp2::cpp_reflection::union1::Type>;
11532 
11533 template <> struct TEnumTraits<::test_cpp2::cpp_reflection::union1::Type> {
11534   using type = ::test_cpp2::cpp_reflection::union1::Type;
11535 
11536   static constexpr std::size_t const size = 4;
11537   static folly::Range<type const*> const values;
11538   static folly::Range<folly::StringPiece const*> const names;
11539 
11540   static char const* findName(type value);
11541   static bool findValue(char const* name, type* out);
11542 
11543 };
11544 
11545 template <> struct TEnumDataStorage<::test_cpp2::cpp_reflection::union2::Type>;
11546 
11547 template <> struct TEnumTraits<::test_cpp2::cpp_reflection::union2::Type> {
11548   using type = ::test_cpp2::cpp_reflection::union2::Type;
11549 
11550   static constexpr std::size_t const size = 4;
11551   static folly::Range<type const*> const values;
11552   static folly::Range<folly::StringPiece const*> const names;
11553 
11554   static char const* findName(type value);
11555   static bool findValue(char const* name, type* out);
11556 
11557 };
11558 
11559 template <> struct TEnumDataStorage<::test_cpp2::cpp_reflection::union3::Type>;
11560 
11561 template <> struct TEnumTraits<::test_cpp2::cpp_reflection::union3::Type> {
11562   using type = ::test_cpp2::cpp_reflection::union3::Type;
11563 
11564   static constexpr std::size_t const size = 4;
11565   static folly::Range<type const*> const values;
11566   static folly::Range<folly::StringPiece const*> const names;
11567 
11568   static char const* findName(type value);
11569   static bool findValue(char const* name, type* out);
11570 
11571 };
11572 
11573 template <> struct TEnumDataStorage<::test_cpp2::cpp_reflection::unionA::Type>;
11574 
11575 template <> struct TEnumTraits<::test_cpp2::cpp_reflection::unionA::Type> {
11576   using type = ::test_cpp2::cpp_reflection::unionA::Type;
11577 
11578   static constexpr std::size_t const size = 5;
11579   static folly::Range<type const*> const values;
11580   static folly::Range<folly::StringPiece const*> const names;
11581 
11582   static char const* findName(type value);
11583   static bool findValue(char const* name, type* out);
11584 
11585 };
11586 
11587 template <> struct TEnumDataStorage<::test_cpp2::cpp_reflection::union_with_special_names::Type>;
11588 
11589 template <> struct TEnumTraits<::test_cpp2::cpp_reflection::union_with_special_names::Type> {
11590   using type = ::test_cpp2::cpp_reflection::union_with_special_names::Type;
11591 
11592   static constexpr std::size_t const size = 28;
11593   static folly::Range<type const*> const values;
11594   static folly::Range<folly::StringPiece const*> const names;
11595 
11596   static char const* findName(type value);
11597   static bool findValue(char const* name, type* out);
11598 
11599 };
11600 }} // apache::thrift
11601