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/mcpp2-compare/gen-cpp2/includes_types.h"
13 #include <folly/small_vector.h>
14 
15 namespace apache {
16 namespace thrift {
17 namespace tag {
18 struct boolField;
19 struct boolField;
20 struct MyBoolField;
21 struct MyIntField;
22 struct MyStringField;
23 struct MyStringField2;
24 struct MyBinaryField;
25 struct MyBinaryField2;
26 struct MyBinaryField3;
27 struct MyBinaryListField4;
28 struct MyMapEnumAndInt;
29 struct MyCustomField;
30 struct MyOptCustomField;
31 struct intValue;
32 struct stringValue;
33 struct intValue;
34 struct opt_intValue;
35 struct stringValue;
36 struct opt_stringValue;
37 struct intValue2;
38 struct intValue3;
39 struct doubelValue;
40 struct boolValue;
41 struct union_list;
42 struct union_set;
43 struct union_map;
44 struct opt_union_map;
45 struct enum_field;
46 struct enum_container;
47 struct a_struct;
48 struct a_set_struct;
49 struct a_union;
50 struct opt_a_union;
51 struct a_union_list;
52 struct a_union_typedef;
53 struct a_union_typedef_list;
54 struct MyBinaryField;
55 struct MyBinaryField2;
56 struct MyBinaryListField4;
57 struct ref_field;
58 struct ref_field2;
59 struct excp_field;
60 struct MyCustomField;
61 struct code;
62 struct req_code;
63 struct message2;
64 struct req_message;
65 struct exception_list;
66 struct exception_set;
67 struct exception_map;
68 struct req_exception_map;
69 struct enum_field;
70 struct enum_container;
71 struct a_struct;
72 struct a_set_struct;
73 struct a_union_list;
74 struct union_typedef;
75 struct a_union_typedef_list;
76 struct MyCustomField;
77 struct MyOptCustomField;
78 struct code;
79 struct req_code;
80 struct message;
81 struct fieldA;
82 struct req_fieldA;
83 struct opt_fieldA;
84 struct fieldB;
85 struct req_fieldB;
86 struct opt_fieldB;
87 struct fieldC;
88 struct req_fieldC;
89 struct opt_fieldC;
90 struct fieldD;
91 struct fieldE;
92 struct req_fieldE;
93 struct opt_fieldE;
94 struct fieldF;
95 struct fieldG;
96 struct fieldH;
97 struct fieldI;
98 struct fieldJ;
99 struct fieldK;
100 struct fieldL;
101 struct fieldM;
102 struct fieldN;
103 struct fieldO;
104 struct fieldP;
105 struct fieldQ;
106 struct fieldR;
107 struct req_fieldR;
108 struct opt_fieldR;
109 struct fieldS;
110 struct fieldT;
111 struct fieldU;
112 struct fieldV;
113 struct req_fieldV;
114 struct opt_fieldV;
115 struct fieldW;
116 struct fieldX;
117 struct req_fieldX;
118 struct opt_fieldX;
119 struct fieldY;
120 struct fieldZ;
121 struct fieldAA;
122 struct fieldAB;
123 struct fieldAC;
124 struct fieldAD;
125 struct fieldAE;
126 struct fieldSD;
127 struct MyIncludedInt;
128 struct MyIncludedStruct;
129 struct ARefField;
130 struct ARequiredField;
131 struct no_annotation;
132 struct cpp_unique_ref;
133 struct cpp2_unique_ref;
134 struct container_with_ref;
135 struct req_cpp_unique_ref;
136 struct req_cpp2_unique_ref;
137 struct req_container_with_ref;
138 struct opt_cpp_unique_ref;
139 struct opt_cpp2_unique_ref;
140 struct opt_container_with_ref;
141 struct ref_type_unique;
142 struct ref_type_shared;
143 struct ref_type_const;
144 struct req_ref_type_shared;
145 struct req_ref_type_const;
146 struct req_ref_type_unique;
147 struct opt_ref_type_const;
148 struct opt_ref_type_unique;
149 struct opt_ref_type_shared;
150 struct base_type;
151 struct list_type;
152 struct set_type;
153 struct map_type;
154 struct map_struct_type;
155 struct iobuf_type;
156 struct iobuf_ptr;
157 struct list_i32_template;
158 struct list_string_template;
159 struct set_template;
160 struct map_template;
161 struct typedef_list_template;
162 struct typedef_deque_template;
163 struct typedef_set_template;
164 struct typedef_map_template;
165 struct indirection_a;
166 struct indirection_b;
167 struct indirection_c;
168 struct iobuf_type_val;
169 struct iobuf_ptr_val;
170 struct struct_struct;
171 struct map_of_iobufs;
172 struct map_of_iobuf_ptrs;
173 struct floatField;
174 struct doubleField;
175 struct floatSide;
176 struct doubleSide;
177 struct intField;
178 } // namespace tag
179 namespace detail {
180 #ifndef APACHE_THRIFT_ACCESSOR_boolField
181 #define APACHE_THRIFT_ACCESSOR_boolField
182 APACHE_THRIFT_DEFINE_ACCESSOR(boolField);
183 #endif
184 #ifndef APACHE_THRIFT_ACCESSOR_boolField
185 #define APACHE_THRIFT_ACCESSOR_boolField
186 APACHE_THRIFT_DEFINE_ACCESSOR(boolField);
187 #endif
188 #ifndef APACHE_THRIFT_ACCESSOR_MyBoolField
189 #define APACHE_THRIFT_ACCESSOR_MyBoolField
190 APACHE_THRIFT_DEFINE_ACCESSOR(MyBoolField);
191 #endif
192 #ifndef APACHE_THRIFT_ACCESSOR_MyIntField
193 #define APACHE_THRIFT_ACCESSOR_MyIntField
194 APACHE_THRIFT_DEFINE_ACCESSOR(MyIntField);
195 #endif
196 #ifndef APACHE_THRIFT_ACCESSOR_MyStringField
197 #define APACHE_THRIFT_ACCESSOR_MyStringField
198 APACHE_THRIFT_DEFINE_ACCESSOR(MyStringField);
199 #endif
200 #ifndef APACHE_THRIFT_ACCESSOR_MyStringField2
201 #define APACHE_THRIFT_ACCESSOR_MyStringField2
202 APACHE_THRIFT_DEFINE_ACCESSOR(MyStringField2);
203 #endif
204 #ifndef APACHE_THRIFT_ACCESSOR_MyBinaryField
205 #define APACHE_THRIFT_ACCESSOR_MyBinaryField
206 APACHE_THRIFT_DEFINE_ACCESSOR(MyBinaryField);
207 #endif
208 #ifndef APACHE_THRIFT_ACCESSOR_MyBinaryField2
209 #define APACHE_THRIFT_ACCESSOR_MyBinaryField2
210 APACHE_THRIFT_DEFINE_ACCESSOR(MyBinaryField2);
211 #endif
212 #ifndef APACHE_THRIFT_ACCESSOR_MyBinaryField3
213 #define APACHE_THRIFT_ACCESSOR_MyBinaryField3
214 APACHE_THRIFT_DEFINE_ACCESSOR(MyBinaryField3);
215 #endif
216 #ifndef APACHE_THRIFT_ACCESSOR_MyBinaryListField4
217 #define APACHE_THRIFT_ACCESSOR_MyBinaryListField4
218 APACHE_THRIFT_DEFINE_ACCESSOR(MyBinaryListField4);
219 #endif
220 #ifndef APACHE_THRIFT_ACCESSOR_MyMapEnumAndInt
221 #define APACHE_THRIFT_ACCESSOR_MyMapEnumAndInt
222 APACHE_THRIFT_DEFINE_ACCESSOR(MyMapEnumAndInt);
223 #endif
224 #ifndef APACHE_THRIFT_ACCESSOR_MyCustomField
225 #define APACHE_THRIFT_ACCESSOR_MyCustomField
226 APACHE_THRIFT_DEFINE_ACCESSOR(MyCustomField);
227 #endif
228 #ifndef APACHE_THRIFT_ACCESSOR_MyOptCustomField
229 #define APACHE_THRIFT_ACCESSOR_MyOptCustomField
230 APACHE_THRIFT_DEFINE_ACCESSOR(MyOptCustomField);
231 #endif
232 #ifndef APACHE_THRIFT_ACCESSOR_intValue
233 #define APACHE_THRIFT_ACCESSOR_intValue
234 APACHE_THRIFT_DEFINE_ACCESSOR(intValue);
235 #endif
236 #ifndef APACHE_THRIFT_ACCESSOR_stringValue
237 #define APACHE_THRIFT_ACCESSOR_stringValue
238 APACHE_THRIFT_DEFINE_ACCESSOR(stringValue);
239 #endif
240 #ifndef APACHE_THRIFT_ACCESSOR_intValue
241 #define APACHE_THRIFT_ACCESSOR_intValue
242 APACHE_THRIFT_DEFINE_ACCESSOR(intValue);
243 #endif
244 #ifndef APACHE_THRIFT_ACCESSOR_opt_intValue
245 #define APACHE_THRIFT_ACCESSOR_opt_intValue
246 APACHE_THRIFT_DEFINE_ACCESSOR(opt_intValue);
247 #endif
248 #ifndef APACHE_THRIFT_ACCESSOR_stringValue
249 #define APACHE_THRIFT_ACCESSOR_stringValue
250 APACHE_THRIFT_DEFINE_ACCESSOR(stringValue);
251 #endif
252 #ifndef APACHE_THRIFT_ACCESSOR_opt_stringValue
253 #define APACHE_THRIFT_ACCESSOR_opt_stringValue
254 APACHE_THRIFT_DEFINE_ACCESSOR(opt_stringValue);
255 #endif
256 #ifndef APACHE_THRIFT_ACCESSOR_intValue2
257 #define APACHE_THRIFT_ACCESSOR_intValue2
258 APACHE_THRIFT_DEFINE_ACCESSOR(intValue2);
259 #endif
260 #ifndef APACHE_THRIFT_ACCESSOR_intValue3
261 #define APACHE_THRIFT_ACCESSOR_intValue3
262 APACHE_THRIFT_DEFINE_ACCESSOR(intValue3);
263 #endif
264 #ifndef APACHE_THRIFT_ACCESSOR_doubelValue
265 #define APACHE_THRIFT_ACCESSOR_doubelValue
266 APACHE_THRIFT_DEFINE_ACCESSOR(doubelValue);
267 #endif
268 #ifndef APACHE_THRIFT_ACCESSOR_boolValue
269 #define APACHE_THRIFT_ACCESSOR_boolValue
270 APACHE_THRIFT_DEFINE_ACCESSOR(boolValue);
271 #endif
272 #ifndef APACHE_THRIFT_ACCESSOR_union_list
273 #define APACHE_THRIFT_ACCESSOR_union_list
274 APACHE_THRIFT_DEFINE_ACCESSOR(union_list);
275 #endif
276 #ifndef APACHE_THRIFT_ACCESSOR_union_set
277 #define APACHE_THRIFT_ACCESSOR_union_set
278 APACHE_THRIFT_DEFINE_ACCESSOR(union_set);
279 #endif
280 #ifndef APACHE_THRIFT_ACCESSOR_union_map
281 #define APACHE_THRIFT_ACCESSOR_union_map
282 APACHE_THRIFT_DEFINE_ACCESSOR(union_map);
283 #endif
284 #ifndef APACHE_THRIFT_ACCESSOR_opt_union_map
285 #define APACHE_THRIFT_ACCESSOR_opt_union_map
286 APACHE_THRIFT_DEFINE_ACCESSOR(opt_union_map);
287 #endif
288 #ifndef APACHE_THRIFT_ACCESSOR_enum_field
289 #define APACHE_THRIFT_ACCESSOR_enum_field
290 APACHE_THRIFT_DEFINE_ACCESSOR(enum_field);
291 #endif
292 #ifndef APACHE_THRIFT_ACCESSOR_enum_container
293 #define APACHE_THRIFT_ACCESSOR_enum_container
294 APACHE_THRIFT_DEFINE_ACCESSOR(enum_container);
295 #endif
296 #ifndef APACHE_THRIFT_ACCESSOR_a_struct
297 #define APACHE_THRIFT_ACCESSOR_a_struct
298 APACHE_THRIFT_DEFINE_ACCESSOR(a_struct);
299 #endif
300 #ifndef APACHE_THRIFT_ACCESSOR_a_set_struct
301 #define APACHE_THRIFT_ACCESSOR_a_set_struct
302 APACHE_THRIFT_DEFINE_ACCESSOR(a_set_struct);
303 #endif
304 #ifndef APACHE_THRIFT_ACCESSOR_a_union
305 #define APACHE_THRIFT_ACCESSOR_a_union
306 APACHE_THRIFT_DEFINE_ACCESSOR(a_union);
307 #endif
308 #ifndef APACHE_THRIFT_ACCESSOR_opt_a_union
309 #define APACHE_THRIFT_ACCESSOR_opt_a_union
310 APACHE_THRIFT_DEFINE_ACCESSOR(opt_a_union);
311 #endif
312 #ifndef APACHE_THRIFT_ACCESSOR_a_union_list
313 #define APACHE_THRIFT_ACCESSOR_a_union_list
314 APACHE_THRIFT_DEFINE_ACCESSOR(a_union_list);
315 #endif
316 #ifndef APACHE_THRIFT_ACCESSOR_a_union_typedef
317 #define APACHE_THRIFT_ACCESSOR_a_union_typedef
318 APACHE_THRIFT_DEFINE_ACCESSOR(a_union_typedef);
319 #endif
320 #ifndef APACHE_THRIFT_ACCESSOR_a_union_typedef_list
321 #define APACHE_THRIFT_ACCESSOR_a_union_typedef_list
322 APACHE_THRIFT_DEFINE_ACCESSOR(a_union_typedef_list);
323 #endif
324 #ifndef APACHE_THRIFT_ACCESSOR_MyBinaryField
325 #define APACHE_THRIFT_ACCESSOR_MyBinaryField
326 APACHE_THRIFT_DEFINE_ACCESSOR(MyBinaryField);
327 #endif
328 #ifndef APACHE_THRIFT_ACCESSOR_MyBinaryField2
329 #define APACHE_THRIFT_ACCESSOR_MyBinaryField2
330 APACHE_THRIFT_DEFINE_ACCESSOR(MyBinaryField2);
331 #endif
332 #ifndef APACHE_THRIFT_ACCESSOR_MyBinaryListField4
333 #define APACHE_THRIFT_ACCESSOR_MyBinaryListField4
334 APACHE_THRIFT_DEFINE_ACCESSOR(MyBinaryListField4);
335 #endif
336 #ifndef APACHE_THRIFT_ACCESSOR_ref_field
337 #define APACHE_THRIFT_ACCESSOR_ref_field
338 APACHE_THRIFT_DEFINE_ACCESSOR(ref_field);
339 #endif
340 #ifndef APACHE_THRIFT_ACCESSOR_ref_field2
341 #define APACHE_THRIFT_ACCESSOR_ref_field2
342 APACHE_THRIFT_DEFINE_ACCESSOR(ref_field2);
343 #endif
344 #ifndef APACHE_THRIFT_ACCESSOR_excp_field
345 #define APACHE_THRIFT_ACCESSOR_excp_field
346 APACHE_THRIFT_DEFINE_ACCESSOR(excp_field);
347 #endif
348 #ifndef APACHE_THRIFT_ACCESSOR_MyCustomField
349 #define APACHE_THRIFT_ACCESSOR_MyCustomField
350 APACHE_THRIFT_DEFINE_ACCESSOR(MyCustomField);
351 #endif
352 #ifndef APACHE_THRIFT_ACCESSOR_code
353 #define APACHE_THRIFT_ACCESSOR_code
354 APACHE_THRIFT_DEFINE_ACCESSOR(code);
355 #endif
356 #ifndef APACHE_THRIFT_ACCESSOR_req_code
357 #define APACHE_THRIFT_ACCESSOR_req_code
358 APACHE_THRIFT_DEFINE_ACCESSOR(req_code);
359 #endif
360 #ifndef APACHE_THRIFT_ACCESSOR_message2
361 #define APACHE_THRIFT_ACCESSOR_message2
362 APACHE_THRIFT_DEFINE_ACCESSOR(message2);
363 #endif
364 #ifndef APACHE_THRIFT_ACCESSOR_req_message
365 #define APACHE_THRIFT_ACCESSOR_req_message
366 APACHE_THRIFT_DEFINE_ACCESSOR(req_message);
367 #endif
368 #ifndef APACHE_THRIFT_ACCESSOR_exception_list
369 #define APACHE_THRIFT_ACCESSOR_exception_list
370 APACHE_THRIFT_DEFINE_ACCESSOR(exception_list);
371 #endif
372 #ifndef APACHE_THRIFT_ACCESSOR_exception_set
373 #define APACHE_THRIFT_ACCESSOR_exception_set
374 APACHE_THRIFT_DEFINE_ACCESSOR(exception_set);
375 #endif
376 #ifndef APACHE_THRIFT_ACCESSOR_exception_map
377 #define APACHE_THRIFT_ACCESSOR_exception_map
378 APACHE_THRIFT_DEFINE_ACCESSOR(exception_map);
379 #endif
380 #ifndef APACHE_THRIFT_ACCESSOR_req_exception_map
381 #define APACHE_THRIFT_ACCESSOR_req_exception_map
382 APACHE_THRIFT_DEFINE_ACCESSOR(req_exception_map);
383 #endif
384 #ifndef APACHE_THRIFT_ACCESSOR_enum_field
385 #define APACHE_THRIFT_ACCESSOR_enum_field
386 APACHE_THRIFT_DEFINE_ACCESSOR(enum_field);
387 #endif
388 #ifndef APACHE_THRIFT_ACCESSOR_enum_container
389 #define APACHE_THRIFT_ACCESSOR_enum_container
390 APACHE_THRIFT_DEFINE_ACCESSOR(enum_container);
391 #endif
392 #ifndef APACHE_THRIFT_ACCESSOR_a_struct
393 #define APACHE_THRIFT_ACCESSOR_a_struct
394 APACHE_THRIFT_DEFINE_ACCESSOR(a_struct);
395 #endif
396 #ifndef APACHE_THRIFT_ACCESSOR_a_set_struct
397 #define APACHE_THRIFT_ACCESSOR_a_set_struct
398 APACHE_THRIFT_DEFINE_ACCESSOR(a_set_struct);
399 #endif
400 #ifndef APACHE_THRIFT_ACCESSOR_a_union_list
401 #define APACHE_THRIFT_ACCESSOR_a_union_list
402 APACHE_THRIFT_DEFINE_ACCESSOR(a_union_list);
403 #endif
404 #ifndef APACHE_THRIFT_ACCESSOR_union_typedef
405 #define APACHE_THRIFT_ACCESSOR_union_typedef
406 APACHE_THRIFT_DEFINE_ACCESSOR(union_typedef);
407 #endif
408 #ifndef APACHE_THRIFT_ACCESSOR_a_union_typedef_list
409 #define APACHE_THRIFT_ACCESSOR_a_union_typedef_list
410 APACHE_THRIFT_DEFINE_ACCESSOR(a_union_typedef_list);
411 #endif
412 #ifndef APACHE_THRIFT_ACCESSOR_MyCustomField
413 #define APACHE_THRIFT_ACCESSOR_MyCustomField
414 APACHE_THRIFT_DEFINE_ACCESSOR(MyCustomField);
415 #endif
416 #ifndef APACHE_THRIFT_ACCESSOR_MyOptCustomField
417 #define APACHE_THRIFT_ACCESSOR_MyOptCustomField
418 APACHE_THRIFT_DEFINE_ACCESSOR(MyOptCustomField);
419 #endif
420 #ifndef APACHE_THRIFT_ACCESSOR_code
421 #define APACHE_THRIFT_ACCESSOR_code
422 APACHE_THRIFT_DEFINE_ACCESSOR(code);
423 #endif
424 #ifndef APACHE_THRIFT_ACCESSOR_req_code
425 #define APACHE_THRIFT_ACCESSOR_req_code
426 APACHE_THRIFT_DEFINE_ACCESSOR(req_code);
427 #endif
428 #ifndef APACHE_THRIFT_ACCESSOR_message
429 #define APACHE_THRIFT_ACCESSOR_message
430 APACHE_THRIFT_DEFINE_ACCESSOR(message);
431 #endif
432 #ifndef APACHE_THRIFT_ACCESSOR_fieldA
433 #define APACHE_THRIFT_ACCESSOR_fieldA
434 APACHE_THRIFT_DEFINE_ACCESSOR(fieldA);
435 #endif
436 #ifndef APACHE_THRIFT_ACCESSOR_req_fieldA
437 #define APACHE_THRIFT_ACCESSOR_req_fieldA
438 APACHE_THRIFT_DEFINE_ACCESSOR(req_fieldA);
439 #endif
440 #ifndef APACHE_THRIFT_ACCESSOR_opt_fieldA
441 #define APACHE_THRIFT_ACCESSOR_opt_fieldA
442 APACHE_THRIFT_DEFINE_ACCESSOR(opt_fieldA);
443 #endif
444 #ifndef APACHE_THRIFT_ACCESSOR_fieldB
445 #define APACHE_THRIFT_ACCESSOR_fieldB
446 APACHE_THRIFT_DEFINE_ACCESSOR(fieldB);
447 #endif
448 #ifndef APACHE_THRIFT_ACCESSOR_req_fieldB
449 #define APACHE_THRIFT_ACCESSOR_req_fieldB
450 APACHE_THRIFT_DEFINE_ACCESSOR(req_fieldB);
451 #endif
452 #ifndef APACHE_THRIFT_ACCESSOR_opt_fieldB
453 #define APACHE_THRIFT_ACCESSOR_opt_fieldB
454 APACHE_THRIFT_DEFINE_ACCESSOR(opt_fieldB);
455 #endif
456 #ifndef APACHE_THRIFT_ACCESSOR_fieldC
457 #define APACHE_THRIFT_ACCESSOR_fieldC
458 APACHE_THRIFT_DEFINE_ACCESSOR(fieldC);
459 #endif
460 #ifndef APACHE_THRIFT_ACCESSOR_req_fieldC
461 #define APACHE_THRIFT_ACCESSOR_req_fieldC
462 APACHE_THRIFT_DEFINE_ACCESSOR(req_fieldC);
463 #endif
464 #ifndef APACHE_THRIFT_ACCESSOR_opt_fieldC
465 #define APACHE_THRIFT_ACCESSOR_opt_fieldC
466 APACHE_THRIFT_DEFINE_ACCESSOR(opt_fieldC);
467 #endif
468 #ifndef APACHE_THRIFT_ACCESSOR_fieldD
469 #define APACHE_THRIFT_ACCESSOR_fieldD
470 APACHE_THRIFT_DEFINE_ACCESSOR(fieldD);
471 #endif
472 #ifndef APACHE_THRIFT_ACCESSOR_fieldE
473 #define APACHE_THRIFT_ACCESSOR_fieldE
474 APACHE_THRIFT_DEFINE_ACCESSOR(fieldE);
475 #endif
476 #ifndef APACHE_THRIFT_ACCESSOR_req_fieldE
477 #define APACHE_THRIFT_ACCESSOR_req_fieldE
478 APACHE_THRIFT_DEFINE_ACCESSOR(req_fieldE);
479 #endif
480 #ifndef APACHE_THRIFT_ACCESSOR_opt_fieldE
481 #define APACHE_THRIFT_ACCESSOR_opt_fieldE
482 APACHE_THRIFT_DEFINE_ACCESSOR(opt_fieldE);
483 #endif
484 #ifndef APACHE_THRIFT_ACCESSOR_fieldF
485 #define APACHE_THRIFT_ACCESSOR_fieldF
486 APACHE_THRIFT_DEFINE_ACCESSOR(fieldF);
487 #endif
488 #ifndef APACHE_THRIFT_ACCESSOR_fieldG
489 #define APACHE_THRIFT_ACCESSOR_fieldG
490 APACHE_THRIFT_DEFINE_ACCESSOR(fieldG);
491 #endif
492 #ifndef APACHE_THRIFT_ACCESSOR_fieldH
493 #define APACHE_THRIFT_ACCESSOR_fieldH
494 APACHE_THRIFT_DEFINE_ACCESSOR(fieldH);
495 #endif
496 #ifndef APACHE_THRIFT_ACCESSOR_fieldI
497 #define APACHE_THRIFT_ACCESSOR_fieldI
498 APACHE_THRIFT_DEFINE_ACCESSOR(fieldI);
499 #endif
500 #ifndef APACHE_THRIFT_ACCESSOR_fieldJ
501 #define APACHE_THRIFT_ACCESSOR_fieldJ
502 APACHE_THRIFT_DEFINE_ACCESSOR(fieldJ);
503 #endif
504 #ifndef APACHE_THRIFT_ACCESSOR_fieldK
505 #define APACHE_THRIFT_ACCESSOR_fieldK
506 APACHE_THRIFT_DEFINE_ACCESSOR(fieldK);
507 #endif
508 #ifndef APACHE_THRIFT_ACCESSOR_fieldL
509 #define APACHE_THRIFT_ACCESSOR_fieldL
510 APACHE_THRIFT_DEFINE_ACCESSOR(fieldL);
511 #endif
512 #ifndef APACHE_THRIFT_ACCESSOR_fieldM
513 #define APACHE_THRIFT_ACCESSOR_fieldM
514 APACHE_THRIFT_DEFINE_ACCESSOR(fieldM);
515 #endif
516 #ifndef APACHE_THRIFT_ACCESSOR_fieldN
517 #define APACHE_THRIFT_ACCESSOR_fieldN
518 APACHE_THRIFT_DEFINE_ACCESSOR(fieldN);
519 #endif
520 #ifndef APACHE_THRIFT_ACCESSOR_fieldO
521 #define APACHE_THRIFT_ACCESSOR_fieldO
522 APACHE_THRIFT_DEFINE_ACCESSOR(fieldO);
523 #endif
524 #ifndef APACHE_THRIFT_ACCESSOR_fieldP
525 #define APACHE_THRIFT_ACCESSOR_fieldP
526 APACHE_THRIFT_DEFINE_ACCESSOR(fieldP);
527 #endif
528 #ifndef APACHE_THRIFT_ACCESSOR_fieldQ
529 #define APACHE_THRIFT_ACCESSOR_fieldQ
530 APACHE_THRIFT_DEFINE_ACCESSOR(fieldQ);
531 #endif
532 #ifndef APACHE_THRIFT_ACCESSOR_fieldR
533 #define APACHE_THRIFT_ACCESSOR_fieldR
534 APACHE_THRIFT_DEFINE_ACCESSOR(fieldR);
535 #endif
536 #ifndef APACHE_THRIFT_ACCESSOR_req_fieldR
537 #define APACHE_THRIFT_ACCESSOR_req_fieldR
538 APACHE_THRIFT_DEFINE_ACCESSOR(req_fieldR);
539 #endif
540 #ifndef APACHE_THRIFT_ACCESSOR_opt_fieldR
541 #define APACHE_THRIFT_ACCESSOR_opt_fieldR
542 APACHE_THRIFT_DEFINE_ACCESSOR(opt_fieldR);
543 #endif
544 #ifndef APACHE_THRIFT_ACCESSOR_fieldS
545 #define APACHE_THRIFT_ACCESSOR_fieldS
546 APACHE_THRIFT_DEFINE_ACCESSOR(fieldS);
547 #endif
548 #ifndef APACHE_THRIFT_ACCESSOR_fieldT
549 #define APACHE_THRIFT_ACCESSOR_fieldT
550 APACHE_THRIFT_DEFINE_ACCESSOR(fieldT);
551 #endif
552 #ifndef APACHE_THRIFT_ACCESSOR_fieldU
553 #define APACHE_THRIFT_ACCESSOR_fieldU
554 APACHE_THRIFT_DEFINE_ACCESSOR(fieldU);
555 #endif
556 #ifndef APACHE_THRIFT_ACCESSOR_fieldV
557 #define APACHE_THRIFT_ACCESSOR_fieldV
558 APACHE_THRIFT_DEFINE_ACCESSOR(fieldV);
559 #endif
560 #ifndef APACHE_THRIFT_ACCESSOR_req_fieldV
561 #define APACHE_THRIFT_ACCESSOR_req_fieldV
562 APACHE_THRIFT_DEFINE_ACCESSOR(req_fieldV);
563 #endif
564 #ifndef APACHE_THRIFT_ACCESSOR_opt_fieldV
565 #define APACHE_THRIFT_ACCESSOR_opt_fieldV
566 APACHE_THRIFT_DEFINE_ACCESSOR(opt_fieldV);
567 #endif
568 #ifndef APACHE_THRIFT_ACCESSOR_fieldW
569 #define APACHE_THRIFT_ACCESSOR_fieldW
570 APACHE_THRIFT_DEFINE_ACCESSOR(fieldW);
571 #endif
572 #ifndef APACHE_THRIFT_ACCESSOR_fieldX
573 #define APACHE_THRIFT_ACCESSOR_fieldX
574 APACHE_THRIFT_DEFINE_ACCESSOR(fieldX);
575 #endif
576 #ifndef APACHE_THRIFT_ACCESSOR_req_fieldX
577 #define APACHE_THRIFT_ACCESSOR_req_fieldX
578 APACHE_THRIFT_DEFINE_ACCESSOR(req_fieldX);
579 #endif
580 #ifndef APACHE_THRIFT_ACCESSOR_opt_fieldX
581 #define APACHE_THRIFT_ACCESSOR_opt_fieldX
582 APACHE_THRIFT_DEFINE_ACCESSOR(opt_fieldX);
583 #endif
584 #ifndef APACHE_THRIFT_ACCESSOR_fieldY
585 #define APACHE_THRIFT_ACCESSOR_fieldY
586 APACHE_THRIFT_DEFINE_ACCESSOR(fieldY);
587 #endif
588 #ifndef APACHE_THRIFT_ACCESSOR_fieldZ
589 #define APACHE_THRIFT_ACCESSOR_fieldZ
590 APACHE_THRIFT_DEFINE_ACCESSOR(fieldZ);
591 #endif
592 #ifndef APACHE_THRIFT_ACCESSOR_fieldAA
593 #define APACHE_THRIFT_ACCESSOR_fieldAA
594 APACHE_THRIFT_DEFINE_ACCESSOR(fieldAA);
595 #endif
596 #ifndef APACHE_THRIFT_ACCESSOR_fieldAB
597 #define APACHE_THRIFT_ACCESSOR_fieldAB
598 APACHE_THRIFT_DEFINE_ACCESSOR(fieldAB);
599 #endif
600 #ifndef APACHE_THRIFT_ACCESSOR_fieldAC
601 #define APACHE_THRIFT_ACCESSOR_fieldAC
602 APACHE_THRIFT_DEFINE_ACCESSOR(fieldAC);
603 #endif
604 #ifndef APACHE_THRIFT_ACCESSOR_fieldAD
605 #define APACHE_THRIFT_ACCESSOR_fieldAD
606 APACHE_THRIFT_DEFINE_ACCESSOR(fieldAD);
607 #endif
608 #ifndef APACHE_THRIFT_ACCESSOR_fieldAE
609 #define APACHE_THRIFT_ACCESSOR_fieldAE
610 APACHE_THRIFT_DEFINE_ACCESSOR(fieldAE);
611 #endif
612 #ifndef APACHE_THRIFT_ACCESSOR_fieldSD
613 #define APACHE_THRIFT_ACCESSOR_fieldSD
614 APACHE_THRIFT_DEFINE_ACCESSOR(fieldSD);
615 #endif
616 #ifndef APACHE_THRIFT_ACCESSOR_MyIncludedInt
617 #define APACHE_THRIFT_ACCESSOR_MyIncludedInt
618 APACHE_THRIFT_DEFINE_ACCESSOR(MyIncludedInt);
619 #endif
620 #ifndef APACHE_THRIFT_ACCESSOR_MyIncludedStruct
621 #define APACHE_THRIFT_ACCESSOR_MyIncludedStruct
622 APACHE_THRIFT_DEFINE_ACCESSOR(MyIncludedStruct);
623 #endif
624 #ifndef APACHE_THRIFT_ACCESSOR_ARefField
625 #define APACHE_THRIFT_ACCESSOR_ARefField
626 APACHE_THRIFT_DEFINE_ACCESSOR(ARefField);
627 #endif
628 #ifndef APACHE_THRIFT_ACCESSOR_ARequiredField
629 #define APACHE_THRIFT_ACCESSOR_ARequiredField
630 APACHE_THRIFT_DEFINE_ACCESSOR(ARequiredField);
631 #endif
632 #ifndef APACHE_THRIFT_ACCESSOR_no_annotation
633 #define APACHE_THRIFT_ACCESSOR_no_annotation
634 APACHE_THRIFT_DEFINE_ACCESSOR(no_annotation);
635 #endif
636 #ifndef APACHE_THRIFT_ACCESSOR_cpp_unique_ref
637 #define APACHE_THRIFT_ACCESSOR_cpp_unique_ref
638 APACHE_THRIFT_DEFINE_ACCESSOR(cpp_unique_ref);
639 #endif
640 #ifndef APACHE_THRIFT_ACCESSOR_cpp2_unique_ref
641 #define APACHE_THRIFT_ACCESSOR_cpp2_unique_ref
642 APACHE_THRIFT_DEFINE_ACCESSOR(cpp2_unique_ref);
643 #endif
644 #ifndef APACHE_THRIFT_ACCESSOR_container_with_ref
645 #define APACHE_THRIFT_ACCESSOR_container_with_ref
646 APACHE_THRIFT_DEFINE_ACCESSOR(container_with_ref);
647 #endif
648 #ifndef APACHE_THRIFT_ACCESSOR_req_cpp_unique_ref
649 #define APACHE_THRIFT_ACCESSOR_req_cpp_unique_ref
650 APACHE_THRIFT_DEFINE_ACCESSOR(req_cpp_unique_ref);
651 #endif
652 #ifndef APACHE_THRIFT_ACCESSOR_req_cpp2_unique_ref
653 #define APACHE_THRIFT_ACCESSOR_req_cpp2_unique_ref
654 APACHE_THRIFT_DEFINE_ACCESSOR(req_cpp2_unique_ref);
655 #endif
656 #ifndef APACHE_THRIFT_ACCESSOR_req_container_with_ref
657 #define APACHE_THRIFT_ACCESSOR_req_container_with_ref
658 APACHE_THRIFT_DEFINE_ACCESSOR(req_container_with_ref);
659 #endif
660 #ifndef APACHE_THRIFT_ACCESSOR_opt_cpp_unique_ref
661 #define APACHE_THRIFT_ACCESSOR_opt_cpp_unique_ref
662 APACHE_THRIFT_DEFINE_ACCESSOR(opt_cpp_unique_ref);
663 #endif
664 #ifndef APACHE_THRIFT_ACCESSOR_opt_cpp2_unique_ref
665 #define APACHE_THRIFT_ACCESSOR_opt_cpp2_unique_ref
666 APACHE_THRIFT_DEFINE_ACCESSOR(opt_cpp2_unique_ref);
667 #endif
668 #ifndef APACHE_THRIFT_ACCESSOR_opt_container_with_ref
669 #define APACHE_THRIFT_ACCESSOR_opt_container_with_ref
670 APACHE_THRIFT_DEFINE_ACCESSOR(opt_container_with_ref);
671 #endif
672 #ifndef APACHE_THRIFT_ACCESSOR_ref_type_unique
673 #define APACHE_THRIFT_ACCESSOR_ref_type_unique
674 APACHE_THRIFT_DEFINE_ACCESSOR(ref_type_unique);
675 #endif
676 #ifndef APACHE_THRIFT_ACCESSOR_ref_type_shared
677 #define APACHE_THRIFT_ACCESSOR_ref_type_shared
678 APACHE_THRIFT_DEFINE_ACCESSOR(ref_type_shared);
679 #endif
680 #ifndef APACHE_THRIFT_ACCESSOR_ref_type_const
681 #define APACHE_THRIFT_ACCESSOR_ref_type_const
682 APACHE_THRIFT_DEFINE_ACCESSOR(ref_type_const);
683 #endif
684 #ifndef APACHE_THRIFT_ACCESSOR_req_ref_type_shared
685 #define APACHE_THRIFT_ACCESSOR_req_ref_type_shared
686 APACHE_THRIFT_DEFINE_ACCESSOR(req_ref_type_shared);
687 #endif
688 #ifndef APACHE_THRIFT_ACCESSOR_req_ref_type_const
689 #define APACHE_THRIFT_ACCESSOR_req_ref_type_const
690 APACHE_THRIFT_DEFINE_ACCESSOR(req_ref_type_const);
691 #endif
692 #ifndef APACHE_THRIFT_ACCESSOR_req_ref_type_unique
693 #define APACHE_THRIFT_ACCESSOR_req_ref_type_unique
694 APACHE_THRIFT_DEFINE_ACCESSOR(req_ref_type_unique);
695 #endif
696 #ifndef APACHE_THRIFT_ACCESSOR_opt_ref_type_const
697 #define APACHE_THRIFT_ACCESSOR_opt_ref_type_const
698 APACHE_THRIFT_DEFINE_ACCESSOR(opt_ref_type_const);
699 #endif
700 #ifndef APACHE_THRIFT_ACCESSOR_opt_ref_type_unique
701 #define APACHE_THRIFT_ACCESSOR_opt_ref_type_unique
702 APACHE_THRIFT_DEFINE_ACCESSOR(opt_ref_type_unique);
703 #endif
704 #ifndef APACHE_THRIFT_ACCESSOR_opt_ref_type_shared
705 #define APACHE_THRIFT_ACCESSOR_opt_ref_type_shared
706 APACHE_THRIFT_DEFINE_ACCESSOR(opt_ref_type_shared);
707 #endif
708 #ifndef APACHE_THRIFT_ACCESSOR_base_type
709 #define APACHE_THRIFT_ACCESSOR_base_type
710 APACHE_THRIFT_DEFINE_ACCESSOR(base_type);
711 #endif
712 #ifndef APACHE_THRIFT_ACCESSOR_list_type
713 #define APACHE_THRIFT_ACCESSOR_list_type
714 APACHE_THRIFT_DEFINE_ACCESSOR(list_type);
715 #endif
716 #ifndef APACHE_THRIFT_ACCESSOR_set_type
717 #define APACHE_THRIFT_ACCESSOR_set_type
718 APACHE_THRIFT_DEFINE_ACCESSOR(set_type);
719 #endif
720 #ifndef APACHE_THRIFT_ACCESSOR_map_type
721 #define APACHE_THRIFT_ACCESSOR_map_type
722 APACHE_THRIFT_DEFINE_ACCESSOR(map_type);
723 #endif
724 #ifndef APACHE_THRIFT_ACCESSOR_map_struct_type
725 #define APACHE_THRIFT_ACCESSOR_map_struct_type
726 APACHE_THRIFT_DEFINE_ACCESSOR(map_struct_type);
727 #endif
728 #ifndef APACHE_THRIFT_ACCESSOR_iobuf_type
729 #define APACHE_THRIFT_ACCESSOR_iobuf_type
730 APACHE_THRIFT_DEFINE_ACCESSOR(iobuf_type);
731 #endif
732 #ifndef APACHE_THRIFT_ACCESSOR_iobuf_ptr
733 #define APACHE_THRIFT_ACCESSOR_iobuf_ptr
734 APACHE_THRIFT_DEFINE_ACCESSOR(iobuf_ptr);
735 #endif
736 #ifndef APACHE_THRIFT_ACCESSOR_list_i32_template
737 #define APACHE_THRIFT_ACCESSOR_list_i32_template
738 APACHE_THRIFT_DEFINE_ACCESSOR(list_i32_template);
739 #endif
740 #ifndef APACHE_THRIFT_ACCESSOR_list_string_template
741 #define APACHE_THRIFT_ACCESSOR_list_string_template
742 APACHE_THRIFT_DEFINE_ACCESSOR(list_string_template);
743 #endif
744 #ifndef APACHE_THRIFT_ACCESSOR_set_template
745 #define APACHE_THRIFT_ACCESSOR_set_template
746 APACHE_THRIFT_DEFINE_ACCESSOR(set_template);
747 #endif
748 #ifndef APACHE_THRIFT_ACCESSOR_map_template
749 #define APACHE_THRIFT_ACCESSOR_map_template
750 APACHE_THRIFT_DEFINE_ACCESSOR(map_template);
751 #endif
752 #ifndef APACHE_THRIFT_ACCESSOR_typedef_list_template
753 #define APACHE_THRIFT_ACCESSOR_typedef_list_template
754 APACHE_THRIFT_DEFINE_ACCESSOR(typedef_list_template);
755 #endif
756 #ifndef APACHE_THRIFT_ACCESSOR_typedef_deque_template
757 #define APACHE_THRIFT_ACCESSOR_typedef_deque_template
758 APACHE_THRIFT_DEFINE_ACCESSOR(typedef_deque_template);
759 #endif
760 #ifndef APACHE_THRIFT_ACCESSOR_typedef_set_template
761 #define APACHE_THRIFT_ACCESSOR_typedef_set_template
762 APACHE_THRIFT_DEFINE_ACCESSOR(typedef_set_template);
763 #endif
764 #ifndef APACHE_THRIFT_ACCESSOR_typedef_map_template
765 #define APACHE_THRIFT_ACCESSOR_typedef_map_template
766 APACHE_THRIFT_DEFINE_ACCESSOR(typedef_map_template);
767 #endif
768 #ifndef APACHE_THRIFT_ACCESSOR_indirection_a
769 #define APACHE_THRIFT_ACCESSOR_indirection_a
770 APACHE_THRIFT_DEFINE_ACCESSOR(indirection_a);
771 #endif
772 #ifndef APACHE_THRIFT_ACCESSOR_indirection_b
773 #define APACHE_THRIFT_ACCESSOR_indirection_b
774 APACHE_THRIFT_DEFINE_ACCESSOR(indirection_b);
775 #endif
776 #ifndef APACHE_THRIFT_ACCESSOR_indirection_c
777 #define APACHE_THRIFT_ACCESSOR_indirection_c
778 APACHE_THRIFT_DEFINE_ACCESSOR(indirection_c);
779 #endif
780 #ifndef APACHE_THRIFT_ACCESSOR_iobuf_type_val
781 #define APACHE_THRIFT_ACCESSOR_iobuf_type_val
782 APACHE_THRIFT_DEFINE_ACCESSOR(iobuf_type_val);
783 #endif
784 #ifndef APACHE_THRIFT_ACCESSOR_iobuf_ptr_val
785 #define APACHE_THRIFT_ACCESSOR_iobuf_ptr_val
786 APACHE_THRIFT_DEFINE_ACCESSOR(iobuf_ptr_val);
787 #endif
788 #ifndef APACHE_THRIFT_ACCESSOR_struct_struct
789 #define APACHE_THRIFT_ACCESSOR_struct_struct
790 APACHE_THRIFT_DEFINE_ACCESSOR(struct_struct);
791 #endif
792 #ifndef APACHE_THRIFT_ACCESSOR_map_of_iobufs
793 #define APACHE_THRIFT_ACCESSOR_map_of_iobufs
794 APACHE_THRIFT_DEFINE_ACCESSOR(map_of_iobufs);
795 #endif
796 #ifndef APACHE_THRIFT_ACCESSOR_map_of_iobuf_ptrs
797 #define APACHE_THRIFT_ACCESSOR_map_of_iobuf_ptrs
798 APACHE_THRIFT_DEFINE_ACCESSOR(map_of_iobuf_ptrs);
799 #endif
800 #ifndef APACHE_THRIFT_ACCESSOR_floatField
801 #define APACHE_THRIFT_ACCESSOR_floatField
802 APACHE_THRIFT_DEFINE_ACCESSOR(floatField);
803 #endif
804 #ifndef APACHE_THRIFT_ACCESSOR_doubleField
805 #define APACHE_THRIFT_ACCESSOR_doubleField
806 APACHE_THRIFT_DEFINE_ACCESSOR(doubleField);
807 #endif
808 #ifndef APACHE_THRIFT_ACCESSOR_floatSide
809 #define APACHE_THRIFT_ACCESSOR_floatSide
810 APACHE_THRIFT_DEFINE_ACCESSOR(floatSide);
811 #endif
812 #ifndef APACHE_THRIFT_ACCESSOR_doubleSide
813 #define APACHE_THRIFT_ACCESSOR_doubleSide
814 APACHE_THRIFT_DEFINE_ACCESSOR(doubleSide);
815 #endif
816 #ifndef APACHE_THRIFT_ACCESSOR_intField
817 #define APACHE_THRIFT_ACCESSOR_intField
818 APACHE_THRIFT_DEFINE_ACCESSOR(intField);
819 #endif
820 } // namespace detail
821 } // namespace thrift
822 } // namespace apache
823 
824 // BEGIN declare_enums
825 namespace some { namespace valid { namespace ns {
826 
827 enum class MyEnumA {
828   fieldA = 1,
829   fieldB = 2,
830   fieldC = 4,
831 };
832 
833 
834 
835 
836 enum class AnnotatedEnum : std::uint32_t {
837   FIELDA = 2,
838   FIELDB = 4,
839   FIELDC = 9,
840 };
841 
842 
843 inline constexpr AnnotatedEnum operator&(AnnotatedEnum a, AnnotatedEnum b) {
844   using E = AnnotatedEnum;
845   using U = std::underlying_type_t<E>;
846   return static_cast<E>(static_cast<U>(a) & static_cast<U>(b));
847 }
848 inline constexpr AnnotatedEnum& operator&=(AnnotatedEnum& a, AnnotatedEnum b) {
849   return a = a & b;
850 }
851 
852 inline constexpr AnnotatedEnum operator|(AnnotatedEnum a, AnnotatedEnum b) {
853   using E = AnnotatedEnum;
854   using U = std::underlying_type_t<E>;
855   return static_cast<E>(static_cast<U>(a) | static_cast<U>(b));
856 }
857 inline constexpr AnnotatedEnum& operator|=(AnnotatedEnum& a, AnnotatedEnum b) {
858   return a = a | b;
859 }
860 
861 inline constexpr AnnotatedEnum operator^(AnnotatedEnum a, AnnotatedEnum b) {
862   using E = AnnotatedEnum;
863   using U = std::underlying_type_t<E>;
864   return static_cast<E>(static_cast<U>(a) ^ static_cast<U>(b));
865 }
866 inline constexpr AnnotatedEnum& operator^=(AnnotatedEnum& a, AnnotatedEnum b) {
867   return a = a ^ b;
868 }
869 
870 inline constexpr AnnotatedEnum operator~(AnnotatedEnum a) {
871   using E = AnnotatedEnum;
872   using U = std::underlying_type_t<E>;
873   return static_cast<E>(~static_cast<U>(a));
874 }
875 
876 enum class AnnotatedEnum2 : short {
877   FIELDA = 2,
878   FIELDB = 4,
879   FIELDC = 9,
880 };
881 
882 
883 inline constexpr AnnotatedEnum2 operator&(AnnotatedEnum2 a, AnnotatedEnum2 b) {
884   using E = AnnotatedEnum2;
885   using U = std::underlying_type_t<E>;
886   return static_cast<E>(static_cast<U>(a) & static_cast<U>(b));
887 }
888 inline constexpr AnnotatedEnum2& operator&=(AnnotatedEnum2& a, AnnotatedEnum2 b) {
889   return a = a & b;
890 }
891 
892 inline constexpr AnnotatedEnum2 operator|(AnnotatedEnum2 a, AnnotatedEnum2 b) {
893   using E = AnnotatedEnum2;
894   using U = std::underlying_type_t<E>;
895   return static_cast<E>(static_cast<U>(a) | static_cast<U>(b));
896 }
897 inline constexpr AnnotatedEnum2& operator|=(AnnotatedEnum2& a, AnnotatedEnum2 b) {
898   return a = a | b;
899 }
900 
901 inline constexpr AnnotatedEnum2 operator^(AnnotatedEnum2 a, AnnotatedEnum2 b) {
902   using E = AnnotatedEnum2;
903   using U = std::underlying_type_t<E>;
904   return static_cast<E>(static_cast<U>(a) ^ static_cast<U>(b));
905 }
906 inline constexpr AnnotatedEnum2& operator^=(AnnotatedEnum2& a, AnnotatedEnum2 b) {
907   return a = a ^ b;
908 }
909 
910 inline constexpr AnnotatedEnum2 operator~(AnnotatedEnum2 a) {
911   using E = AnnotatedEnum2;
912   using U = std::underlying_type_t<E>;
913   return static_cast<E>(~static_cast<U>(a));
914 }
915 
916 enum class MyEnumB {
917   AField = 0,
918 };
919 
920 
921 
922 
923 }}} // some::valid::ns
924 
925 namespace std {
926 template<> struct hash<::some::valid::ns::MyEnumA> :
927   ::apache::thrift::detail::enum_hash<::some::valid::ns::MyEnumA> {};
928 template<> struct hash<::some::valid::ns::AnnotatedEnum> :
929   ::apache::thrift::detail::enum_hash<::some::valid::ns::AnnotatedEnum> {};
930 template<> struct hash<::some::valid::ns::AnnotatedEnum2> :
931   ::apache::thrift::detail::enum_hash<::some::valid::ns::AnnotatedEnum2> {};
932 template<> struct hash<::some::valid::ns::MyEnumB> :
933   ::apache::thrift::detail::enum_hash<::some::valid::ns::MyEnumB> {};
934 } // std
935 
936 namespace apache { namespace thrift {
937 
938 
939 template <> struct TEnumDataStorage<::some::valid::ns::MyEnumA>;
940 
941 template <> struct TEnumTraits<::some::valid::ns::MyEnumA> {
942   using type = ::some::valid::ns::MyEnumA;
943 
944   static constexpr std::size_t const size = 3;
945   static folly::Range<type const*> const values;
946   static folly::Range<folly::StringPiece const*> const names;
947 
948   static char const* findName(type value);
949   static bool findValue(char const* name, type* out);
950 
951   static constexpr type min() { return type::fieldA; }
952   static constexpr type max() { return type::fieldC; }
953 };
954 
955 
956 template <> struct TEnumDataStorage<::some::valid::ns::AnnotatedEnum>;
957 
958 template <> struct TEnumTraits<::some::valid::ns::AnnotatedEnum> {
959   using type = ::some::valid::ns::AnnotatedEnum;
960 
961   static constexpr std::size_t const size = 3;
962   static folly::Range<type const*> const values;
963   static folly::Range<folly::StringPiece const*> const names;
964 
965   static char const* findName(type value);
966   static bool findValue(char const* name, type* out);
967 
968   static constexpr type min() { return type::FIELDA; }
969   static constexpr type max() { return type::FIELDC; }
970 };
971 
972 
973 template <> struct TEnumDataStorage<::some::valid::ns::AnnotatedEnum2>;
974 
975 template <> struct TEnumTraits<::some::valid::ns::AnnotatedEnum2> {
976   using type = ::some::valid::ns::AnnotatedEnum2;
977 
978   static constexpr std::size_t const size = 3;
979   static folly::Range<type const*> const values;
980   static folly::Range<folly::StringPiece const*> const names;
981 
982   static char const* findName(type value);
983   static bool findValue(char const* name, type* out);
984 
985   static constexpr type min() { return type::FIELDA; }
986   static constexpr type max() { return type::FIELDC; }
987 };
988 
989 
990 template <> struct TEnumDataStorage<::some::valid::ns::MyEnumB>;
991 
992 template <> struct TEnumTraits<::some::valid::ns::MyEnumB> {
993   using type = ::some::valid::ns::MyEnumB;
994 
995   static constexpr std::size_t const size = 1;
996   static folly::Range<type const*> const values;
997   static folly::Range<folly::StringPiece const*> const names;
998 
999   static char const* findName(type value);
1000   static bool findValue(char const* name, type* out);
1001 
1002   static constexpr type min() { return type::AField; }
1003   static constexpr type max() { return type::AField; }
1004 };
1005 
1006 
1007 }} // apache::thrift
1008 
1009 namespace some { namespace valid { namespace ns {
1010 
1011 using _MyEnumA_EnumMapFactory = apache::thrift::detail::TEnumMapFactory<MyEnumA>;
1012 [[deprecated("use apache::thrift::util::enumNameSafe, apache::thrift::util::enumName, or apache::thrift::TEnumTraits")]]
1013 extern const _MyEnumA_EnumMapFactory::ValuesToNamesMapType _MyEnumA_VALUES_TO_NAMES;
1014 [[deprecated("use apache::thrift::TEnumTraits")]]
1015 extern const _MyEnumA_EnumMapFactory::NamesToValuesMapType _MyEnumA_NAMES_TO_VALUES;
1016 
1017 using _AnnotatedEnum_EnumMapFactory = apache::thrift::detail::TEnumMapFactory<AnnotatedEnum>;
1018 [[deprecated("use apache::thrift::util::enumNameSafe, apache::thrift::util::enumName, or apache::thrift::TEnumTraits")]]
1019 extern const _AnnotatedEnum_EnumMapFactory::ValuesToNamesMapType _AnnotatedEnum_VALUES_TO_NAMES;
1020 [[deprecated("use apache::thrift::TEnumTraits")]]
1021 extern const _AnnotatedEnum_EnumMapFactory::NamesToValuesMapType _AnnotatedEnum_NAMES_TO_VALUES;
1022 
1023 using _AnnotatedEnum2_EnumMapFactory = apache::thrift::detail::TEnumMapFactory<AnnotatedEnum2>;
1024 [[deprecated("use apache::thrift::util::enumNameSafe, apache::thrift::util::enumName, or apache::thrift::TEnumTraits")]]
1025 extern const _AnnotatedEnum2_EnumMapFactory::ValuesToNamesMapType _AnnotatedEnum2_VALUES_TO_NAMES;
1026 [[deprecated("use apache::thrift::TEnumTraits")]]
1027 extern const _AnnotatedEnum2_EnumMapFactory::NamesToValuesMapType _AnnotatedEnum2_NAMES_TO_VALUES;
1028 
1029 using _MyEnumB_EnumMapFactory = apache::thrift::detail::TEnumMapFactory<MyEnumB>;
1030 [[deprecated("use apache::thrift::util::enumNameSafe, apache::thrift::util::enumName, or apache::thrift::TEnumTraits")]]
1031 extern const _MyEnumB_EnumMapFactory::ValuesToNamesMapType _MyEnumB_VALUES_TO_NAMES;
1032 [[deprecated("use apache::thrift::TEnumTraits")]]
1033 extern const _MyEnumB_EnumMapFactory::NamesToValuesMapType _MyEnumB_NAMES_TO_VALUES;
1034 
1035 }}} // some::valid::ns
1036 
1037 // END declare_enums
1038 // BEGIN forward_declare
1039 namespace some { namespace valid { namespace ns {
1040 class Empty;
1041 class ASimpleStruct;
1042 class ASimpleStructNoexcept;
1043 class MyStruct;
1044 class SimpleUnion;
1045 class ComplexUnion;
1046 class AnException;
1047 class AnotherException;
1048 class containerStruct;
1049 class MyIncludedStruct;
1050 class AnnotatedStruct;
1051 class ComplexContainerStruct;
1052 class FloatStruct;
1053 class FloatUnion;
1054 class AllRequiredNoExceptMoveCtrStruct;
1055 }}} // some::valid::ns
1056 // END forward_declare
1057 // BEGIN typedefs
1058 namespace some { namespace valid { namespace ns {
1059 typedef ::a::different::ns::AStruct AStruct;
1060 typedef ::apache::thrift::adapt_detail::adapted_t<CustomProtocolAdapter, ::folly::IOBuf> CustomProtocolType;
1061 typedef ::std::int32_t simpleTypeDef;
1062 typedef ::std::map<::std::int16_t, ::std::string> containerTypeDef;
1063 typedef ::std::vector<::std::map<::std::int16_t, ::std::string>> complexContainerTypeDef;
1064 typedef ::std::set<::some::valid::ns::SimpleUnion> unionTypeDef;
1065 typedef ::std::vector<::some::valid::ns::MyStruct> structTypeDef;
1066 typedef ::std::vector<::std::map<::some::valid::ns::Empty, ::some::valid::ns::MyStruct>> complexStructTypeDef;
1067 typedef ::std::vector<::some::valid::ns::complexStructTypeDef> mostComplexTypeDef;
1068 typedef Foo IndirectionA;
1069 typedef Baz IndirectionC;
1070 typedef Bar IndirectionB;
1071 typedef FooBar IndirectionD;
1072 typedef ::std::map<::some::valid::ns::MyEnumA, ::std::string> HashedTypedef;
1073 typedef CppFakeI32 CppFakeI32;
1074 typedef folly::small_vector<int64_t, 8 /* maxInline */> FollySmallVectorI64;
1075 typedef folly::sorted_vector_set<std::string> SortedVectorSetString;
1076 typedef FakeMap FakeMap;
1077 typedef std::unordered_map<std::string, containerStruct> UnorderedMapStruct;
1078 typedef std::list<::std::int32_t> std_list;
1079 typedef std::deque<::std::string> std_deque;
1080 typedef folly::sorted_vector_set<::std::string> folly_set;
1081 typedef folly::sorted_vector_map<::std::int64_t, ::std::string> folly_map;
1082 typedef folly::IOBuf IOBuf;
1083 typedef std::unique_ptr<folly::IOBuf> IOBufPtr;
1084 
1085 }}} // some::valid::ns
1086 // END typedefs
1087 // BEGIN hash_and_equal_to
1088 namespace std {
1089 
1090 template<> struct hash<typename ::some::valid::ns::MyIncludedStruct> {
1091   size_t operator()(const ::some::valid::ns::MyIncludedStruct&) const;
1092 };
1093 template<> struct equal_to<typename ::some::valid::ns::MyIncludedStruct> {
1094   bool operator()(const ::some::valid::ns::MyIncludedStruct&,const ::some::valid::ns::MyIncludedStruct&) const;
1095 };
1096 
1097 template<> struct hash<typename ::some::valid::ns::AnnotatedStruct> {
1098   size_t operator()(const ::some::valid::ns::AnnotatedStruct&) const;
1099 };
1100 template<> struct equal_to<typename ::some::valid::ns::AnnotatedStruct> {
1101   bool operator()(const ::some::valid::ns::AnnotatedStruct&,const ::some::valid::ns::AnnotatedStruct&) const;
1102 };
1103 } // std
1104 // END hash_and_equal_to
1105 namespace some { namespace valid { namespace ns {
1106 using ::apache::thrift::detail::operator!=;
1107 using ::apache::thrift::detail::operator>;
1108 using ::apache::thrift::detail::operator<=;
1109 using ::apache::thrift::detail::operator>=;
1110 }}} // some::valid::ns
1111 namespace some { namespace valid { namespace ns {
1112 class Empty final  {
1113  private:
1114   friend struct ::apache::thrift::detail::st::struct_private_access;
1115 
1116   //  used by a static_assert in the corresponding source
1117   static constexpr bool __fbthrift_cpp2_gen_json = true;
1118   static constexpr bool __fbthrift_cpp2_gen_nimble = false;
1119   static constexpr bool __fbthrift_cpp2_gen_has_thrift_uri = false;
1120 
1121   void __fbthrift_clear();
1122 
1123  public:
1124   using __fbthrift_cpp2_type = Empty;
1125   static constexpr bool __fbthrift_cpp2_is_union =
1126     false;
1127 
1128 
1129  public:
1130 
1131   Empty() {
1132   }
1133   // FragileConstructor for use in initialization lists only.
1134   [[deprecated("This constructor is deprecated")]]
1135   Empty(apache::thrift::FragileConstructor);
1136 
1137   Empty(Empty&&) = default;
1138 
1139   Empty(const Empty&) = default;
1140 
1141 
1142   Empty& operator=(Empty&&) = default;
1143 
1144   Empty& operator=(const Empty&) = default;
1145 
1146  public:
1147 
1148   bool operator==(const Empty&) const;
1149   bool operator<(const Empty&) const;
1150 
1151   template <class Protocol_>
1152   uint32_t read(Protocol_* iprot);
1153   template <class Protocol_>
1154   uint32_t serializedSize(Protocol_ const* prot_) const;
1155   template <class Protocol_>
1156   uint32_t serializedSizeZC(Protocol_ const* prot_) const;
1157   template <class Protocol_>
1158   uint32_t write(Protocol_* prot_) const;
1159 
1160  private:
1161   template <class Protocol_>
1162   void readNoXfer(Protocol_* iprot);
1163 
1164   friend class ::apache::thrift::Cpp2Ops<Empty>;
1165   friend void swap(Empty& a, Empty& b);
1166 };
1167 
1168 template <class Protocol_>
1169 uint32_t Empty::read(Protocol_* iprot) {
1170   auto _xferStart = iprot->getCursorPosition();
1171   readNoXfer(iprot);
1172   return iprot->getCursorPosition() - _xferStart;
1173 }
1174 
1175 }}} // some::valid::ns
1176 namespace some { namespace valid { namespace ns {
1177 class ASimpleStruct final  {
1178  private:
1179   friend struct ::apache::thrift::detail::st::struct_private_access;
1180 
1181   //  used by a static_assert in the corresponding source
1182   static constexpr bool __fbthrift_cpp2_gen_json = true;
1183   static constexpr bool __fbthrift_cpp2_gen_nimble = false;
1184   static constexpr bool __fbthrift_cpp2_gen_has_thrift_uri = false;
1185 
1186   void __fbthrift_clear();
1187 
1188  public:
1189   using __fbthrift_cpp2_type = ASimpleStruct;
1190   static constexpr bool __fbthrift_cpp2_is_union =
1191     false;
1192 
1193 
1194  public:
1195 
1196   ASimpleStruct() :
1197       __fbthrift_field_boolField() {
1198   }
1199   // FragileConstructor for use in initialization lists only.
1200   [[deprecated("This constructor is deprecated")]]
1201   ASimpleStruct(apache::thrift::FragileConstructor, ::std::int64_t boolField__arg);
1202 
1203   ASimpleStruct(ASimpleStruct&&) = default;
1204 
1205   ASimpleStruct(const ASimpleStruct&) = default;
1206 
1207 
1208   ASimpleStruct& operator=(ASimpleStruct&&) = default;
1209 
1210   ASimpleStruct& operator=(const ASimpleStruct&) = default;
1211  private:
1212   ::std::int64_t __fbthrift_field_boolField;
1213  private:
1214   apache::thrift::detail::isset_bitset<1, false> __isset;
1215 
1216  public:
1217 
1218   bool operator==(const ASimpleStruct&) const;
1219   bool operator<(const ASimpleStruct&) const;
1220 
1221   template <typename..., typename T = ::std::int64_t>
1222   FOLLY_ERASE ::apache::thrift::field_ref<const T&> boolField_ref() const& {
1223     return {this->__fbthrift_field_boolField, __isset.at(0), __isset.bit(0)};
1224   }
1225 
1226   template <typename..., typename T = ::std::int64_t>
1227   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> boolField_ref() const&& {
1228     return {static_cast<const T&&>(this->__fbthrift_field_boolField), __isset.at(0), __isset.bit(0)};
1229   }
1230 
1231   template <typename..., typename T = ::std::int64_t>
1232   FOLLY_ERASE ::apache::thrift::field_ref<T&> boolField_ref() & {
1233     return {this->__fbthrift_field_boolField, __isset.at(0), __isset.bit(0)};
1234   }
1235 
1236   template <typename..., typename T = ::std::int64_t>
1237   FOLLY_ERASE ::apache::thrift::field_ref<T&&> boolField_ref() && {
1238     return {static_cast<T&&>(this->__fbthrift_field_boolField), __isset.at(0), __isset.bit(0)};
1239   }
1240 
1241   template <typename..., typename T = ::std::int64_t>
1242   FOLLY_ERASE ::apache::thrift::field_ref<const T&> boolField() const& {
1243     return {this->__fbthrift_field_boolField, __isset.at(0), __isset.bit(0)};
1244   }
1245 
1246   template <typename..., typename T = ::std::int64_t>
1247   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> boolField() const&& {
1248     return {static_cast<const T&&>(this->__fbthrift_field_boolField), __isset.at(0), __isset.bit(0)};
1249   }
1250 
1251   template <typename..., typename T = ::std::int64_t>
1252   FOLLY_ERASE ::apache::thrift::field_ref<T&> boolField() & {
1253     return {this->__fbthrift_field_boolField, __isset.at(0), __isset.bit(0)};
1254   }
1255 
1256   template <typename..., typename T = ::std::int64_t>
1257   FOLLY_ERASE ::apache::thrift::field_ref<T&&> boolField() && {
1258     return {static_cast<T&&>(this->__fbthrift_field_boolField), __isset.at(0), __isset.bit(0)};
1259   }
1260 
1261   ::std::int64_t get_boolField() const {
1262     return __fbthrift_field_boolField;
1263   }
1264 
1265   [[deprecated("Use `FOO.boolField_ref() = BAR;` instead of `FOO.set_boolField(BAR);`")]]
1266   ::std::int64_t& set_boolField(::std::int64_t boolField_) {
1267     boolField_ref() = boolField_;
1268     return __fbthrift_field_boolField;
1269   }
1270 
1271   template <class Protocol_>
1272   uint32_t read(Protocol_* iprot);
1273   template <class Protocol_>
1274   uint32_t serializedSize(Protocol_ const* prot_) const;
1275   template <class Protocol_>
1276   uint32_t serializedSizeZC(Protocol_ const* prot_) const;
1277   template <class Protocol_>
1278   uint32_t write(Protocol_* prot_) const;
1279 
1280  private:
1281   template <class Protocol_>
1282   void readNoXfer(Protocol_* iprot);
1283 
1284   friend class ::apache::thrift::Cpp2Ops<ASimpleStruct>;
1285   friend void swap(ASimpleStruct& a, ASimpleStruct& b);
1286 };
1287 
1288 template <class Protocol_>
1289 uint32_t ASimpleStruct::read(Protocol_* iprot) {
1290   auto _xferStart = iprot->getCursorPosition();
1291   readNoXfer(iprot);
1292   return iprot->getCursorPosition() - _xferStart;
1293 }
1294 
1295 }}} // some::valid::ns
1296 namespace some { namespace valid { namespace ns {
1297 class ASimpleStructNoexcept final  {
1298  private:
1299   friend struct ::apache::thrift::detail::st::struct_private_access;
1300 
1301   //  used by a static_assert in the corresponding source
1302   static constexpr bool __fbthrift_cpp2_gen_json = true;
1303   static constexpr bool __fbthrift_cpp2_gen_nimble = false;
1304   static constexpr bool __fbthrift_cpp2_gen_has_thrift_uri = false;
1305 
1306   void __fbthrift_clear();
1307 
1308  public:
1309   using __fbthrift_cpp2_type = ASimpleStructNoexcept;
1310   static constexpr bool __fbthrift_cpp2_is_union =
1311     false;
1312 
1313 
1314  public:
1315 
1316   ASimpleStructNoexcept() :
1317       __fbthrift_field_boolField() {
1318   }
1319   // FragileConstructor for use in initialization lists only.
1320   [[deprecated("This constructor is deprecated")]]
1321   ASimpleStructNoexcept(apache::thrift::FragileConstructor, ::std::int64_t boolField__arg);
1322 
1323   ASimpleStructNoexcept(ASimpleStructNoexcept&&) = default;
1324 
1325   ASimpleStructNoexcept(const ASimpleStructNoexcept&) = default;
1326 
1327 
1328   ASimpleStructNoexcept& operator=(ASimpleStructNoexcept&&) = default;
1329 
1330   ASimpleStructNoexcept& operator=(const ASimpleStructNoexcept&) = default;
1331  private:
1332   ::std::int64_t __fbthrift_field_boolField;
1333  private:
1334   apache::thrift::detail::isset_bitset<1, false> __isset;
1335 
1336  public:
1337 
1338   bool operator==(const ASimpleStructNoexcept&) const;
1339   bool operator<(const ASimpleStructNoexcept&) const;
1340 
1341   template <typename..., typename T = ::std::int64_t>
1342   FOLLY_ERASE ::apache::thrift::field_ref<const T&> boolField_ref() const& {
1343     return {this->__fbthrift_field_boolField, __isset.at(0), __isset.bit(0)};
1344   }
1345 
1346   template <typename..., typename T = ::std::int64_t>
1347   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> boolField_ref() const&& {
1348     return {static_cast<const T&&>(this->__fbthrift_field_boolField), __isset.at(0), __isset.bit(0)};
1349   }
1350 
1351   template <typename..., typename T = ::std::int64_t>
1352   FOLLY_ERASE ::apache::thrift::field_ref<T&> boolField_ref() & {
1353     return {this->__fbthrift_field_boolField, __isset.at(0), __isset.bit(0)};
1354   }
1355 
1356   template <typename..., typename T = ::std::int64_t>
1357   FOLLY_ERASE ::apache::thrift::field_ref<T&&> boolField_ref() && {
1358     return {static_cast<T&&>(this->__fbthrift_field_boolField), __isset.at(0), __isset.bit(0)};
1359   }
1360 
1361   template <typename..., typename T = ::std::int64_t>
1362   FOLLY_ERASE ::apache::thrift::field_ref<const T&> boolField() const& {
1363     return {this->__fbthrift_field_boolField, __isset.at(0), __isset.bit(0)};
1364   }
1365 
1366   template <typename..., typename T = ::std::int64_t>
1367   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> boolField() const&& {
1368     return {static_cast<const T&&>(this->__fbthrift_field_boolField), __isset.at(0), __isset.bit(0)};
1369   }
1370 
1371   template <typename..., typename T = ::std::int64_t>
1372   FOLLY_ERASE ::apache::thrift::field_ref<T&> boolField() & {
1373     return {this->__fbthrift_field_boolField, __isset.at(0), __isset.bit(0)};
1374   }
1375 
1376   template <typename..., typename T = ::std::int64_t>
1377   FOLLY_ERASE ::apache::thrift::field_ref<T&&> boolField() && {
1378     return {static_cast<T&&>(this->__fbthrift_field_boolField), __isset.at(0), __isset.bit(0)};
1379   }
1380 
1381   ::std::int64_t get_boolField() const {
1382     return __fbthrift_field_boolField;
1383   }
1384 
1385   [[deprecated("Use `FOO.boolField_ref() = BAR;` instead of `FOO.set_boolField(BAR);`")]]
1386   ::std::int64_t& set_boolField(::std::int64_t boolField_) {
1387     boolField_ref() = boolField_;
1388     return __fbthrift_field_boolField;
1389   }
1390 
1391   template <class Protocol_>
1392   uint32_t read(Protocol_* iprot);
1393   template <class Protocol_>
1394   uint32_t serializedSize(Protocol_ const* prot_) const;
1395   template <class Protocol_>
1396   uint32_t serializedSizeZC(Protocol_ const* prot_) const;
1397   template <class Protocol_>
1398   uint32_t write(Protocol_* prot_) const;
1399 
1400  private:
1401   template <class Protocol_>
1402   void readNoXfer(Protocol_* iprot);
1403 
1404   friend class ::apache::thrift::Cpp2Ops<ASimpleStructNoexcept>;
1405   friend void swap(ASimpleStructNoexcept& a, ASimpleStructNoexcept& b);
1406 };
1407 
1408 template <class Protocol_>
1409 uint32_t ASimpleStructNoexcept::read(Protocol_* iprot) {
1410   auto _xferStart = iprot->getCursorPosition();
1411   readNoXfer(iprot);
1412   return iprot->getCursorPosition() - _xferStart;
1413 }
1414 
1415 }}} // some::valid::ns
1416 namespace some { namespace valid { namespace ns {
1417 class MyStruct final  {
1418  private:
1419   friend struct ::apache::thrift::detail::st::struct_private_access;
1420 
1421   //  used by a static_assert in the corresponding source
1422   static constexpr bool __fbthrift_cpp2_gen_json = true;
1423   static constexpr bool __fbthrift_cpp2_gen_nimble = false;
1424   static constexpr bool __fbthrift_cpp2_gen_has_thrift_uri = false;
1425 
1426   void __fbthrift_clear();
1427 
1428  public:
1429   using __fbthrift_cpp2_type = MyStruct;
1430   static constexpr bool __fbthrift_cpp2_is_union =
1431     false;
1432 
1433 
1434  public:
1435 
1436   MyStruct();
1437 
1438   // FragileConstructor for use in initialization lists only.
1439   [[deprecated("This constructor is deprecated")]]
1440   MyStruct(apache::thrift::FragileConstructor, bool MyBoolField__arg, ::std::int64_t MyIntField__arg, ::std::string MyStringField__arg, ::std::string MyStringField2__arg, ::std::string MyBinaryField__arg, ::std::string MyBinaryField2__arg, ::std::string MyBinaryField3__arg, ::std::vector<::std::string> MyBinaryListField4__arg, ::std::map<::some::valid::ns::MyEnumA, ::std::string> MyMapEnumAndInt__arg, ::some::valid::ns::CustomProtocolType MyCustomField__arg, ::some::valid::ns::CustomProtocolType MyOptCustomField__arg);
1441 
1442   MyStruct(MyStruct&&) noexcept;
1443   MyStruct(const MyStruct& src);
1444 
1445 
1446   MyStruct& operator=(MyStruct&&) noexcept;
1447   MyStruct& operator=(const MyStruct& src);
1448 
1449   ~MyStruct();
1450 
1451  private:
1452   bool __fbthrift_field_MyBoolField;
1453  private:
1454   ::std::int64_t __fbthrift_field_MyIntField;
1455  private:
1456   ::std::string __fbthrift_field_MyStringField;
1457  private:
1458   ::std::string __fbthrift_field_MyStringField2;
1459  private:
1460   ::std::string __fbthrift_field_MyBinaryField;
1461  private:
1462   ::std::string __fbthrift_field_MyBinaryField2;
1463  public:
1464   ::std::string MyBinaryField3;
1465  private:
1466   ::std::vector<::std::string> __fbthrift_field_MyBinaryListField4;
1467  private:
1468   ::std::map<::some::valid::ns::MyEnumA, ::std::string> __fbthrift_field_MyMapEnumAndInt;
1469  private:
1470   ::some::valid::ns::CustomProtocolType __fbthrift_field_MyCustomField;
1471  private:
1472   ::some::valid::ns::CustomProtocolType __fbthrift_field_MyOptCustomField;
1473  private:
1474   apache::thrift::detail::isset_bitset<10, false> __isset;
1475 
1476  public:
1477 
1478   bool operator==(const MyStruct&) const;
1479   bool operator<(const MyStruct&) const;
1480 
1481   template <typename..., typename T = bool>
1482   FOLLY_ERASE ::apache::thrift::field_ref<const T&> MyBoolField_ref() const& {
1483     return {this->__fbthrift_field_MyBoolField, __isset.at(0), __isset.bit(0)};
1484   }
1485 
1486   template <typename..., typename T = bool>
1487   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> MyBoolField_ref() const&& {
1488     return {static_cast<const T&&>(this->__fbthrift_field_MyBoolField), __isset.at(0), __isset.bit(0)};
1489   }
1490 
1491   template <typename..., typename T = bool>
1492   FOLLY_ERASE ::apache::thrift::field_ref<T&> MyBoolField_ref() & {
1493     return {this->__fbthrift_field_MyBoolField, __isset.at(0), __isset.bit(0)};
1494   }
1495 
1496   template <typename..., typename T = bool>
1497   FOLLY_ERASE ::apache::thrift::field_ref<T&&> MyBoolField_ref() && {
1498     return {static_cast<T&&>(this->__fbthrift_field_MyBoolField), __isset.at(0), __isset.bit(0)};
1499   }
1500 
1501   template <typename..., typename T = bool>
1502   FOLLY_ERASE ::apache::thrift::field_ref<const T&> MyBoolField() const& {
1503     return {this->__fbthrift_field_MyBoolField, __isset.at(0), __isset.bit(0)};
1504   }
1505 
1506   template <typename..., typename T = bool>
1507   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> MyBoolField() const&& {
1508     return {static_cast<const T&&>(this->__fbthrift_field_MyBoolField), __isset.at(0), __isset.bit(0)};
1509   }
1510 
1511   template <typename..., typename T = bool>
1512   FOLLY_ERASE ::apache::thrift::field_ref<T&> MyBoolField() & {
1513     return {this->__fbthrift_field_MyBoolField, __isset.at(0), __isset.bit(0)};
1514   }
1515 
1516   template <typename..., typename T = bool>
1517   FOLLY_ERASE ::apache::thrift::field_ref<T&&> MyBoolField() && {
1518     return {static_cast<T&&>(this->__fbthrift_field_MyBoolField), __isset.at(0), __isset.bit(0)};
1519   }
1520 
1521   template <typename..., typename T = ::std::int64_t>
1522   FOLLY_ERASE ::apache::thrift::field_ref<const T&> MyIntField_ref() const& {
1523     return {this->__fbthrift_field_MyIntField, __isset.at(1), __isset.bit(1)};
1524   }
1525 
1526   template <typename..., typename T = ::std::int64_t>
1527   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> MyIntField_ref() const&& {
1528     return {static_cast<const T&&>(this->__fbthrift_field_MyIntField), __isset.at(1), __isset.bit(1)};
1529   }
1530 
1531   template <typename..., typename T = ::std::int64_t>
1532   FOLLY_ERASE ::apache::thrift::field_ref<T&> MyIntField_ref() & {
1533     return {this->__fbthrift_field_MyIntField, __isset.at(1), __isset.bit(1)};
1534   }
1535 
1536   template <typename..., typename T = ::std::int64_t>
1537   FOLLY_ERASE ::apache::thrift::field_ref<T&&> MyIntField_ref() && {
1538     return {static_cast<T&&>(this->__fbthrift_field_MyIntField), __isset.at(1), __isset.bit(1)};
1539   }
1540 
1541   template <typename..., typename T = ::std::int64_t>
1542   FOLLY_ERASE ::apache::thrift::field_ref<const T&> MyIntField() const& {
1543     return {this->__fbthrift_field_MyIntField, __isset.at(1), __isset.bit(1)};
1544   }
1545 
1546   template <typename..., typename T = ::std::int64_t>
1547   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> MyIntField() const&& {
1548     return {static_cast<const T&&>(this->__fbthrift_field_MyIntField), __isset.at(1), __isset.bit(1)};
1549   }
1550 
1551   template <typename..., typename T = ::std::int64_t>
1552   FOLLY_ERASE ::apache::thrift::field_ref<T&> MyIntField() & {
1553     return {this->__fbthrift_field_MyIntField, __isset.at(1), __isset.bit(1)};
1554   }
1555 
1556   template <typename..., typename T = ::std::int64_t>
1557   FOLLY_ERASE ::apache::thrift::field_ref<T&&> MyIntField() && {
1558     return {static_cast<T&&>(this->__fbthrift_field_MyIntField), __isset.at(1), __isset.bit(1)};
1559   }
1560 
1561   template <typename..., typename T = ::std::string>
1562   FOLLY_ERASE ::apache::thrift::field_ref<const T&> MyStringField_ref() const& {
1563     return {this->__fbthrift_field_MyStringField, __isset.at(2), __isset.bit(2)};
1564   }
1565 
1566   template <typename..., typename T = ::std::string>
1567   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> MyStringField_ref() const&& {
1568     return {static_cast<const T&&>(this->__fbthrift_field_MyStringField), __isset.at(2), __isset.bit(2)};
1569   }
1570 
1571   template <typename..., typename T = ::std::string>
1572   FOLLY_ERASE ::apache::thrift::field_ref<T&> MyStringField_ref() & {
1573     return {this->__fbthrift_field_MyStringField, __isset.at(2), __isset.bit(2)};
1574   }
1575 
1576   template <typename..., typename T = ::std::string>
1577   FOLLY_ERASE ::apache::thrift::field_ref<T&&> MyStringField_ref() && {
1578     return {static_cast<T&&>(this->__fbthrift_field_MyStringField), __isset.at(2), __isset.bit(2)};
1579   }
1580 
1581   template <typename..., typename T = ::std::string>
1582   FOLLY_ERASE ::apache::thrift::field_ref<const T&> MyStringField() const& {
1583     return {this->__fbthrift_field_MyStringField, __isset.at(2), __isset.bit(2)};
1584   }
1585 
1586   template <typename..., typename T = ::std::string>
1587   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> MyStringField() const&& {
1588     return {static_cast<const T&&>(this->__fbthrift_field_MyStringField), __isset.at(2), __isset.bit(2)};
1589   }
1590 
1591   template <typename..., typename T = ::std::string>
1592   FOLLY_ERASE ::apache::thrift::field_ref<T&> MyStringField() & {
1593     return {this->__fbthrift_field_MyStringField, __isset.at(2), __isset.bit(2)};
1594   }
1595 
1596   template <typename..., typename T = ::std::string>
1597   FOLLY_ERASE ::apache::thrift::field_ref<T&&> MyStringField() && {
1598     return {static_cast<T&&>(this->__fbthrift_field_MyStringField), __isset.at(2), __isset.bit(2)};
1599   }
1600 
1601   template <typename..., typename T = ::std::string>
1602   FOLLY_ERASE ::apache::thrift::field_ref<const T&> MyStringField2_ref() const& {
1603     return {this->__fbthrift_field_MyStringField2, __isset.at(3), __isset.bit(3)};
1604   }
1605 
1606   template <typename..., typename T = ::std::string>
1607   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> MyStringField2_ref() const&& {
1608     return {static_cast<const T&&>(this->__fbthrift_field_MyStringField2), __isset.at(3), __isset.bit(3)};
1609   }
1610 
1611   template <typename..., typename T = ::std::string>
1612   FOLLY_ERASE ::apache::thrift::field_ref<T&> MyStringField2_ref() & {
1613     return {this->__fbthrift_field_MyStringField2, __isset.at(3), __isset.bit(3)};
1614   }
1615 
1616   template <typename..., typename T = ::std::string>
1617   FOLLY_ERASE ::apache::thrift::field_ref<T&&> MyStringField2_ref() && {
1618     return {static_cast<T&&>(this->__fbthrift_field_MyStringField2), __isset.at(3), __isset.bit(3)};
1619   }
1620 
1621   template <typename..., typename T = ::std::string>
1622   FOLLY_ERASE ::apache::thrift::field_ref<const T&> MyStringField2() const& {
1623     return {this->__fbthrift_field_MyStringField2, __isset.at(3), __isset.bit(3)};
1624   }
1625 
1626   template <typename..., typename T = ::std::string>
1627   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> MyStringField2() const&& {
1628     return {static_cast<const T&&>(this->__fbthrift_field_MyStringField2), __isset.at(3), __isset.bit(3)};
1629   }
1630 
1631   template <typename..., typename T = ::std::string>
1632   FOLLY_ERASE ::apache::thrift::field_ref<T&> MyStringField2() & {
1633     return {this->__fbthrift_field_MyStringField2, __isset.at(3), __isset.bit(3)};
1634   }
1635 
1636   template <typename..., typename T = ::std::string>
1637   FOLLY_ERASE ::apache::thrift::field_ref<T&&> MyStringField2() && {
1638     return {static_cast<T&&>(this->__fbthrift_field_MyStringField2), __isset.at(3), __isset.bit(3)};
1639   }
1640 
1641   template <typename..., typename T = ::std::string>
1642   FOLLY_ERASE ::apache::thrift::field_ref<const T&> MyBinaryField_ref() const& {
1643     return {this->__fbthrift_field_MyBinaryField, __isset.at(4), __isset.bit(4)};
1644   }
1645 
1646   template <typename..., typename T = ::std::string>
1647   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> MyBinaryField_ref() const&& {
1648     return {static_cast<const T&&>(this->__fbthrift_field_MyBinaryField), __isset.at(4), __isset.bit(4)};
1649   }
1650 
1651   template <typename..., typename T = ::std::string>
1652   FOLLY_ERASE ::apache::thrift::field_ref<T&> MyBinaryField_ref() & {
1653     return {this->__fbthrift_field_MyBinaryField, __isset.at(4), __isset.bit(4)};
1654   }
1655 
1656   template <typename..., typename T = ::std::string>
1657   FOLLY_ERASE ::apache::thrift::field_ref<T&&> MyBinaryField_ref() && {
1658     return {static_cast<T&&>(this->__fbthrift_field_MyBinaryField), __isset.at(4), __isset.bit(4)};
1659   }
1660 
1661   template <typename..., typename T = ::std::string>
1662   FOLLY_ERASE ::apache::thrift::field_ref<const T&> MyBinaryField() const& {
1663     return {this->__fbthrift_field_MyBinaryField, __isset.at(4), __isset.bit(4)};
1664   }
1665 
1666   template <typename..., typename T = ::std::string>
1667   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> MyBinaryField() const&& {
1668     return {static_cast<const T&&>(this->__fbthrift_field_MyBinaryField), __isset.at(4), __isset.bit(4)};
1669   }
1670 
1671   template <typename..., typename T = ::std::string>
1672   FOLLY_ERASE ::apache::thrift::field_ref<T&> MyBinaryField() & {
1673     return {this->__fbthrift_field_MyBinaryField, __isset.at(4), __isset.bit(4)};
1674   }
1675 
1676   template <typename..., typename T = ::std::string>
1677   FOLLY_ERASE ::apache::thrift::field_ref<T&&> MyBinaryField() && {
1678     return {static_cast<T&&>(this->__fbthrift_field_MyBinaryField), __isset.at(4), __isset.bit(4)};
1679   }
1680 
1681   template <typename..., typename T = ::std::string>
1682   FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> MyBinaryField2_ref() const& {
1683     return {this->__fbthrift_field_MyBinaryField2, __isset.at(5), __isset.bit(5)};
1684   }
1685 
1686   template <typename..., typename T = ::std::string>
1687   FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> MyBinaryField2_ref() const&& {
1688     return {static_cast<const T&&>(this->__fbthrift_field_MyBinaryField2), __isset.at(5), __isset.bit(5)};
1689   }
1690 
1691   template <typename..., typename T = ::std::string>
1692   FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> MyBinaryField2_ref() & {
1693     return {this->__fbthrift_field_MyBinaryField2, __isset.at(5), __isset.bit(5)};
1694   }
1695 
1696   template <typename..., typename T = ::std::string>
1697   FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> MyBinaryField2_ref() && {
1698     return {static_cast<T&&>(this->__fbthrift_field_MyBinaryField2), __isset.at(5), __isset.bit(5)};
1699   }
1700 
1701   template <typename..., typename T = ::std::string>
1702   FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> MyBinaryField2() const& {
1703     return {this->__fbthrift_field_MyBinaryField2, __isset.at(5), __isset.bit(5)};
1704   }
1705 
1706   template <typename..., typename T = ::std::string>
1707   FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> MyBinaryField2() const&& {
1708     return {static_cast<const T&&>(this->__fbthrift_field_MyBinaryField2), __isset.at(5), __isset.bit(5)};
1709   }
1710 
1711   template <typename..., typename T = ::std::string>
1712   FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> MyBinaryField2() & {
1713     return {this->__fbthrift_field_MyBinaryField2, __isset.at(5), __isset.bit(5)};
1714   }
1715 
1716   template <typename..., typename T = ::std::string>
1717   FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> MyBinaryField2() && {
1718     return {static_cast<T&&>(this->__fbthrift_field_MyBinaryField2), __isset.at(5), __isset.bit(5)};
1719   }
1720 
1721   template <typename..., typename T = ::std::string>
1722   FOLLY_ERASE ::apache::thrift::required_field_ref<const T&> MyBinaryField3_ref() const& {
1723     return ::apache::thrift::required_field_ref<const T&>{this->MyBinaryField3};
1724   }
1725 
1726   template <typename..., typename T = ::std::string>
1727   FOLLY_ERASE ::apache::thrift::required_field_ref<const T&&> MyBinaryField3_ref() const&& {
1728     return ::apache::thrift::required_field_ref<const T&&>{static_cast<const T&&>(this->MyBinaryField3)};
1729   }
1730 
1731   template <typename..., typename T = ::std::string>
1732   FOLLY_ERASE ::apache::thrift::required_field_ref<T&> MyBinaryField3_ref() & {
1733     return ::apache::thrift::required_field_ref<T&>{this->MyBinaryField3};
1734   }
1735 
1736   template <typename..., typename T = ::std::string>
1737   FOLLY_ERASE ::apache::thrift::required_field_ref<T&&> MyBinaryField3_ref() && {
1738     return ::apache::thrift::required_field_ref<T&&>{static_cast<T&&>(this->MyBinaryField3)};
1739   }
1740 
1741   template <typename..., typename T = ::std::vector<::std::string>>
1742   FOLLY_ERASE ::apache::thrift::field_ref<const T&> MyBinaryListField4_ref() const& {
1743     return {this->__fbthrift_field_MyBinaryListField4, __isset.at(6), __isset.bit(6)};
1744   }
1745 
1746   template <typename..., typename T = ::std::vector<::std::string>>
1747   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> MyBinaryListField4_ref() const&& {
1748     return {static_cast<const T&&>(this->__fbthrift_field_MyBinaryListField4), __isset.at(6), __isset.bit(6)};
1749   }
1750 
1751   template <typename..., typename T = ::std::vector<::std::string>>
1752   FOLLY_ERASE ::apache::thrift::field_ref<T&> MyBinaryListField4_ref() & {
1753     return {this->__fbthrift_field_MyBinaryListField4, __isset.at(6), __isset.bit(6)};
1754   }
1755 
1756   template <typename..., typename T = ::std::vector<::std::string>>
1757   FOLLY_ERASE ::apache::thrift::field_ref<T&&> MyBinaryListField4_ref() && {
1758     return {static_cast<T&&>(this->__fbthrift_field_MyBinaryListField4), __isset.at(6), __isset.bit(6)};
1759   }
1760 
1761   template <typename..., typename T = ::std::vector<::std::string>>
1762   FOLLY_ERASE ::apache::thrift::field_ref<const T&> MyBinaryListField4() const& {
1763     return {this->__fbthrift_field_MyBinaryListField4, __isset.at(6), __isset.bit(6)};
1764   }
1765 
1766   template <typename..., typename T = ::std::vector<::std::string>>
1767   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> MyBinaryListField4() const&& {
1768     return {static_cast<const T&&>(this->__fbthrift_field_MyBinaryListField4), __isset.at(6), __isset.bit(6)};
1769   }
1770 
1771   template <typename..., typename T = ::std::vector<::std::string>>
1772   FOLLY_ERASE ::apache::thrift::field_ref<T&> MyBinaryListField4() & {
1773     return {this->__fbthrift_field_MyBinaryListField4, __isset.at(6), __isset.bit(6)};
1774   }
1775 
1776   template <typename..., typename T = ::std::vector<::std::string>>
1777   FOLLY_ERASE ::apache::thrift::field_ref<T&&> MyBinaryListField4() && {
1778     return {static_cast<T&&>(this->__fbthrift_field_MyBinaryListField4), __isset.at(6), __isset.bit(6)};
1779   }
1780 
1781   template <typename..., typename T = ::std::map<::some::valid::ns::MyEnumA, ::std::string>>
1782   FOLLY_ERASE ::apache::thrift::field_ref<const T&> MyMapEnumAndInt_ref() const& {
1783     return {this->__fbthrift_field_MyMapEnumAndInt, __isset.at(7), __isset.bit(7)};
1784   }
1785 
1786   template <typename..., typename T = ::std::map<::some::valid::ns::MyEnumA, ::std::string>>
1787   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> MyMapEnumAndInt_ref() const&& {
1788     return {static_cast<const T&&>(this->__fbthrift_field_MyMapEnumAndInt), __isset.at(7), __isset.bit(7)};
1789   }
1790 
1791   template <typename..., typename T = ::std::map<::some::valid::ns::MyEnumA, ::std::string>>
1792   FOLLY_ERASE ::apache::thrift::field_ref<T&> MyMapEnumAndInt_ref() & {
1793     return {this->__fbthrift_field_MyMapEnumAndInt, __isset.at(7), __isset.bit(7)};
1794   }
1795 
1796   template <typename..., typename T = ::std::map<::some::valid::ns::MyEnumA, ::std::string>>
1797   FOLLY_ERASE ::apache::thrift::field_ref<T&&> MyMapEnumAndInt_ref() && {
1798     return {static_cast<T&&>(this->__fbthrift_field_MyMapEnumAndInt), __isset.at(7), __isset.bit(7)};
1799   }
1800 
1801   template <typename..., typename T = ::std::map<::some::valid::ns::MyEnumA, ::std::string>>
1802   FOLLY_ERASE ::apache::thrift::field_ref<const T&> MyMapEnumAndInt() const& {
1803     return {this->__fbthrift_field_MyMapEnumAndInt, __isset.at(7), __isset.bit(7)};
1804   }
1805 
1806   template <typename..., typename T = ::std::map<::some::valid::ns::MyEnumA, ::std::string>>
1807   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> MyMapEnumAndInt() const&& {
1808     return {static_cast<const T&&>(this->__fbthrift_field_MyMapEnumAndInt), __isset.at(7), __isset.bit(7)};
1809   }
1810 
1811   template <typename..., typename T = ::std::map<::some::valid::ns::MyEnumA, ::std::string>>
1812   FOLLY_ERASE ::apache::thrift::field_ref<T&> MyMapEnumAndInt() & {
1813     return {this->__fbthrift_field_MyMapEnumAndInt, __isset.at(7), __isset.bit(7)};
1814   }
1815 
1816   template <typename..., typename T = ::std::map<::some::valid::ns::MyEnumA, ::std::string>>
1817   FOLLY_ERASE ::apache::thrift::field_ref<T&&> MyMapEnumAndInt() && {
1818     return {static_cast<T&&>(this->__fbthrift_field_MyMapEnumAndInt), __isset.at(7), __isset.bit(7)};
1819   }
1820 
1821   template <typename..., typename T = ::some::valid::ns::CustomProtocolType>
1822   FOLLY_ERASE ::apache::thrift::field_ref<const T&> MyCustomField_ref() const& {
1823     return {this->__fbthrift_field_MyCustomField, __isset.at(8), __isset.bit(8)};
1824   }
1825 
1826   template <typename..., typename T = ::some::valid::ns::CustomProtocolType>
1827   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> MyCustomField_ref() const&& {
1828     return {static_cast<const T&&>(this->__fbthrift_field_MyCustomField), __isset.at(8), __isset.bit(8)};
1829   }
1830 
1831   template <typename..., typename T = ::some::valid::ns::CustomProtocolType>
1832   FOLLY_ERASE ::apache::thrift::field_ref<T&> MyCustomField_ref() & {
1833     return {this->__fbthrift_field_MyCustomField, __isset.at(8), __isset.bit(8)};
1834   }
1835 
1836   template <typename..., typename T = ::some::valid::ns::CustomProtocolType>
1837   FOLLY_ERASE ::apache::thrift::field_ref<T&&> MyCustomField_ref() && {
1838     return {static_cast<T&&>(this->__fbthrift_field_MyCustomField), __isset.at(8), __isset.bit(8)};
1839   }
1840 
1841   template <typename..., typename T = ::some::valid::ns::CustomProtocolType>
1842   FOLLY_ERASE ::apache::thrift::field_ref<const T&> MyCustomField() const& {
1843     return {this->__fbthrift_field_MyCustomField, __isset.at(8), __isset.bit(8)};
1844   }
1845 
1846   template <typename..., typename T = ::some::valid::ns::CustomProtocolType>
1847   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> MyCustomField() const&& {
1848     return {static_cast<const T&&>(this->__fbthrift_field_MyCustomField), __isset.at(8), __isset.bit(8)};
1849   }
1850 
1851   template <typename..., typename T = ::some::valid::ns::CustomProtocolType>
1852   FOLLY_ERASE ::apache::thrift::field_ref<T&> MyCustomField() & {
1853     return {this->__fbthrift_field_MyCustomField, __isset.at(8), __isset.bit(8)};
1854   }
1855 
1856   template <typename..., typename T = ::some::valid::ns::CustomProtocolType>
1857   FOLLY_ERASE ::apache::thrift::field_ref<T&&> MyCustomField() && {
1858     return {static_cast<T&&>(this->__fbthrift_field_MyCustomField), __isset.at(8), __isset.bit(8)};
1859   }
1860 
1861   template <typename..., typename T = ::some::valid::ns::CustomProtocolType>
1862   FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> MyOptCustomField_ref() const& {
1863     return {this->__fbthrift_field_MyOptCustomField, __isset.at(9), __isset.bit(9)};
1864   }
1865 
1866   template <typename..., typename T = ::some::valid::ns::CustomProtocolType>
1867   FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> MyOptCustomField_ref() const&& {
1868     return {static_cast<const T&&>(this->__fbthrift_field_MyOptCustomField), __isset.at(9), __isset.bit(9)};
1869   }
1870 
1871   template <typename..., typename T = ::some::valid::ns::CustomProtocolType>
1872   FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> MyOptCustomField_ref() & {
1873     return {this->__fbthrift_field_MyOptCustomField, __isset.at(9), __isset.bit(9)};
1874   }
1875 
1876   template <typename..., typename T = ::some::valid::ns::CustomProtocolType>
1877   FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> MyOptCustomField_ref() && {
1878     return {static_cast<T&&>(this->__fbthrift_field_MyOptCustomField), __isset.at(9), __isset.bit(9)};
1879   }
1880 
1881   template <typename..., typename T = ::some::valid::ns::CustomProtocolType>
1882   FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> MyOptCustomField() const& {
1883     return {this->__fbthrift_field_MyOptCustomField, __isset.at(9), __isset.bit(9)};
1884   }
1885 
1886   template <typename..., typename T = ::some::valid::ns::CustomProtocolType>
1887   FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> MyOptCustomField() const&& {
1888     return {static_cast<const T&&>(this->__fbthrift_field_MyOptCustomField), __isset.at(9), __isset.bit(9)};
1889   }
1890 
1891   template <typename..., typename T = ::some::valid::ns::CustomProtocolType>
1892   FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> MyOptCustomField() & {
1893     return {this->__fbthrift_field_MyOptCustomField, __isset.at(9), __isset.bit(9)};
1894   }
1895 
1896   template <typename..., typename T = ::some::valid::ns::CustomProtocolType>
1897   FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> MyOptCustomField() && {
1898     return {static_cast<T&&>(this->__fbthrift_field_MyOptCustomField), __isset.at(9), __isset.bit(9)};
1899   }
1900 
1901   bool get_MyBoolField() const {
1902     return __fbthrift_field_MyBoolField;
1903   }
1904 
1905   [[deprecated("Use `FOO.MyBoolField_ref() = BAR;` instead of `FOO.set_MyBoolField(BAR);`")]]
1906   bool& set_MyBoolField(bool MyBoolField_) {
1907     MyBoolField_ref() = MyBoolField_;
1908     return __fbthrift_field_MyBoolField;
1909   }
1910 
1911   ::std::int64_t get_MyIntField() const {
1912     return __fbthrift_field_MyIntField;
1913   }
1914 
1915   [[deprecated("Use `FOO.MyIntField_ref() = BAR;` instead of `FOO.set_MyIntField(BAR);`")]]
1916   ::std::int64_t& set_MyIntField(::std::int64_t MyIntField_) {
1917     MyIntField_ref() = MyIntField_;
1918     return __fbthrift_field_MyIntField;
1919   }
1920 
1921   const ::std::string& get_MyStringField() const& {
1922     return __fbthrift_field_MyStringField;
1923   }
1924 
1925   ::std::string get_MyStringField() && {
1926     return std::move(__fbthrift_field_MyStringField);
1927   }
1928 
1929   template <typename T_MyStruct_MyStringField_struct_setter = ::std::string>
1930   [[deprecated("Use `FOO.MyStringField_ref() = BAR;` instead of `FOO.set_MyStringField(BAR);`")]]
1931   ::std::string& set_MyStringField(T_MyStruct_MyStringField_struct_setter&& MyStringField_) {
1932     MyStringField_ref() = std::forward<T_MyStruct_MyStringField_struct_setter>(MyStringField_);
1933     return __fbthrift_field_MyStringField;
1934   }
1935 
1936   const ::std::string& get_MyStringField2() const& {
1937     return __fbthrift_field_MyStringField2;
1938   }
1939 
1940   ::std::string get_MyStringField2() && {
1941     return std::move(__fbthrift_field_MyStringField2);
1942   }
1943 
1944   template <typename T_MyStruct_MyStringField2_struct_setter = ::std::string>
1945   [[deprecated("Use `FOO.MyStringField2_ref() = BAR;` instead of `FOO.set_MyStringField2(BAR);`")]]
1946   ::std::string& set_MyStringField2(T_MyStruct_MyStringField2_struct_setter&& MyStringField2_) {
1947     MyStringField2_ref() = std::forward<T_MyStruct_MyStringField2_struct_setter>(MyStringField2_);
1948     return __fbthrift_field_MyStringField2;
1949   }
1950 
1951   const ::std::string& get_MyBinaryField() const& {
1952     return __fbthrift_field_MyBinaryField;
1953   }
1954 
1955   ::std::string get_MyBinaryField() && {
1956     return std::move(__fbthrift_field_MyBinaryField);
1957   }
1958 
1959   template <typename T_MyStruct_MyBinaryField_struct_setter = ::std::string>
1960   [[deprecated("Use `FOO.MyBinaryField_ref() = BAR;` instead of `FOO.set_MyBinaryField(BAR);`")]]
1961   ::std::string& set_MyBinaryField(T_MyStruct_MyBinaryField_struct_setter&& MyBinaryField_) {
1962     MyBinaryField_ref() = std::forward<T_MyStruct_MyBinaryField_struct_setter>(MyBinaryField_);
1963     return __fbthrift_field_MyBinaryField;
1964   }
1965 
1966   const ::std::string* get_MyBinaryField2() const& {
1967     return MyBinaryField2_ref() ? std::addressof(__fbthrift_field_MyBinaryField2) : nullptr;
1968   }
1969 
1970   ::std::string* get_MyBinaryField2() & {
1971     return MyBinaryField2_ref() ? std::addressof(__fbthrift_field_MyBinaryField2) : nullptr;
1972   }
1973   ::std::string* get_MyBinaryField2() && = delete;
1974 
1975   template <typename T_MyStruct_MyBinaryField2_struct_setter = ::std::string>
1976   [[deprecated("Use `FOO.MyBinaryField2_ref() = BAR;` instead of `FOO.set_MyBinaryField2(BAR);`")]]
1977   ::std::string& set_MyBinaryField2(T_MyStruct_MyBinaryField2_struct_setter&& MyBinaryField2_) {
1978     MyBinaryField2_ref() = std::forward<T_MyStruct_MyBinaryField2_struct_setter>(MyBinaryField2_);
1979     return __fbthrift_field_MyBinaryField2;
1980   }
1981 
1982   const ::std::string& get_MyBinaryField3() const& {
1983     return MyBinaryField3;
1984   }
1985 
1986   ::std::string get_MyBinaryField3() && {
1987     return std::move(MyBinaryField3);
1988   }
1989 
1990   template <typename T_MyStruct_MyBinaryField3_struct_setter = ::std::string>
1991   [[deprecated("Use `FOO.MyBinaryField3_ref() = BAR;` instead of `FOO.set_MyBinaryField3(BAR);`")]]
1992   ::std::string& set_MyBinaryField3(T_MyStruct_MyBinaryField3_struct_setter&& MyBinaryField3_) {
1993     MyBinaryField3_ref() = std::forward<T_MyStruct_MyBinaryField3_struct_setter>(MyBinaryField3_);
1994     return MyBinaryField3;
1995   }
1996   const ::std::vector<::std::string>& get_MyBinaryListField4() const&;
1997   ::std::vector<::std::string> get_MyBinaryListField4() &&;
1998 
1999   template <typename T_MyStruct_MyBinaryListField4_struct_setter = ::std::vector<::std::string>>
2000   [[deprecated("Use `FOO.MyBinaryListField4_ref() = BAR;` instead of `FOO.set_MyBinaryListField4(BAR);`")]]
2001   ::std::vector<::std::string>& set_MyBinaryListField4(T_MyStruct_MyBinaryListField4_struct_setter&& MyBinaryListField4_) {
2002     MyBinaryListField4_ref() = std::forward<T_MyStruct_MyBinaryListField4_struct_setter>(MyBinaryListField4_);
2003     return __fbthrift_field_MyBinaryListField4;
2004   }
2005   const ::std::map<::some::valid::ns::MyEnumA, ::std::string>& get_MyMapEnumAndInt() const&;
2006   ::std::map<::some::valid::ns::MyEnumA, ::std::string> get_MyMapEnumAndInt() &&;
2007 
2008   template <typename T_MyStruct_MyMapEnumAndInt_struct_setter = ::std::map<::some::valid::ns::MyEnumA, ::std::string>>
2009   [[deprecated("Use `FOO.MyMapEnumAndInt_ref() = BAR;` instead of `FOO.set_MyMapEnumAndInt(BAR);`")]]
2010   ::std::map<::some::valid::ns::MyEnumA, ::std::string>& set_MyMapEnumAndInt(T_MyStruct_MyMapEnumAndInt_struct_setter&& MyMapEnumAndInt_) {
2011     MyMapEnumAndInt_ref() = std::forward<T_MyStruct_MyMapEnumAndInt_struct_setter>(MyMapEnumAndInt_);
2012     return __fbthrift_field_MyMapEnumAndInt;
2013   }
2014 
2015   template <class Protocol_>
2016   uint32_t read(Protocol_* iprot);
2017   template <class Protocol_>
2018   uint32_t serializedSize(Protocol_ const* prot_) const;
2019   template <class Protocol_>
2020   uint32_t serializedSizeZC(Protocol_ const* prot_) const;
2021   template <class Protocol_>
2022   uint32_t write(Protocol_* prot_) const;
2023 
2024  private:
2025   template <class Protocol_>
2026   void readNoXfer(Protocol_* iprot);
2027 
2028   friend class ::apache::thrift::Cpp2Ops<MyStruct>;
2029   friend void swap(MyStruct& a, MyStruct& b);
2030 };
2031 
2032 template <class Protocol_>
2033 uint32_t MyStruct::read(Protocol_* iprot) {
2034   auto _xferStart = iprot->getCursorPosition();
2035   readNoXfer(iprot);
2036   return iprot->getCursorPosition() - _xferStart;
2037 }
2038 
2039 }}} // some::valid::ns
2040 namespace some { namespace valid { namespace ns {
2041 class SimpleUnion  {
2042  private:
2043   friend struct ::apache::thrift::detail::st::struct_private_access;
2044 
2045   //  used by a static_assert in the corresponding source
2046   static constexpr bool __fbthrift_cpp2_gen_json = true;
2047   static constexpr bool __fbthrift_cpp2_gen_nimble = false;
2048   static constexpr bool __fbthrift_cpp2_gen_has_thrift_uri = false;
2049 
2050   void __fbthrift_clear();
2051 
2052  public:
2053   using __fbthrift_cpp2_type = SimpleUnion;
2054   static constexpr bool __fbthrift_cpp2_is_union =
2055     true;
2056 
2057 
2058  public:
2059   enum Type : int {
2060     __EMPTY__ = 0,
2061     intValue = 7,
2062     stringValue = 2,
2063   } ;
2064 
2065   SimpleUnion()
2066       : type_(Type::__EMPTY__) {}
2067 
2068   SimpleUnion(SimpleUnion&& rhs) noexcept
2069       : type_(Type::__EMPTY__) {
2070     if (this == &rhs) { return; }
2071     if (rhs.type_ == Type::__EMPTY__) { return; }
2072     switch (rhs.type_) {
2073       case Type::intValue:
2074       {
2075         set_intValue(std::move(rhs.value_.intValue));
2076         break;
2077       }
2078       case Type::stringValue:
2079       {
2080         set_stringValue(std::move(rhs.value_.stringValue));
2081         break;
2082       }
2083       default:
2084       {
2085         assert(false);
2086         break;
2087       }
2088     }
2089     apache::thrift::clear(rhs);
2090   }
2091 
2092   SimpleUnion(const SimpleUnion& rhs)
2093       : type_(Type::__EMPTY__) {
2094     if (this == &rhs) { return; }
2095     if (rhs.type_ == Type::__EMPTY__) { return; }
2096     switch (rhs.type_) {
2097       case Type::intValue:
2098       {
2099         set_intValue(rhs.value_.intValue);
2100         break;
2101       }
2102       case Type::stringValue:
2103       {
2104         set_stringValue(rhs.value_.stringValue);
2105         break;
2106       }
2107       default:
2108       {
2109         assert(false);
2110         break;
2111       }
2112     }
2113   }
2114 
2115   SimpleUnion& operator=(SimpleUnion&& rhs) noexcept {
2116     if (this == &rhs) { return *this; }
2117     __fbthrift_clear();
2118     if (rhs.type_ == Type::__EMPTY__) { return *this; }
2119     switch (rhs.type_) {
2120       case Type::intValue:
2121       {
2122         set_intValue(std::move(rhs.value_.intValue));
2123         break;
2124       }
2125       case Type::stringValue:
2126       {
2127         set_stringValue(std::move(rhs.value_.stringValue));
2128         break;
2129       }
2130       default:
2131       {
2132         assert(false);
2133         break;
2134       }
2135     }
2136     apache::thrift::clear(rhs);
2137     return *this;
2138   }
2139 
2140   SimpleUnion& operator=(const SimpleUnion& rhs) {
2141     if (this == &rhs) { return *this; }
2142     __fbthrift_clear();
2143     if (rhs.type_ == Type::__EMPTY__) { return *this; }
2144     switch (rhs.type_) {
2145       case Type::intValue:
2146       {
2147         set_intValue(rhs.value_.intValue);
2148         break;
2149       }
2150       case Type::stringValue:
2151       {
2152         set_stringValue(rhs.value_.stringValue);
2153         break;
2154       }
2155       default:
2156       {
2157         assert(false);
2158         break;
2159       }
2160     }
2161     return *this;
2162   }
2163 
2164   virtual ~SimpleUnion() {
2165     apache::thrift::clear(*this);
2166   }
2167 
2168   union storage_type {
2169     ::std::int64_t intValue;
2170     ::std::string stringValue;
2171 
2172     storage_type() {}
2173     ~storage_type() {}
2174   } ;
2175 
2176   bool operator==(const SimpleUnion&) const;
2177   bool operator<(const SimpleUnion&) const;
2178 
2179   ::std::int64_t& set_intValue(::std::int64_t t = ::std::int64_t()) {
2180     __fbthrift_clear();
2181     type_ = Type::intValue;
2182     ::new (std::addressof(value_.intValue)) ::std::int64_t(t);
2183     return value_.intValue;
2184   }
2185 
2186   ::std::string& set_stringValue(::std::string const &t) {
2187     __fbthrift_clear();
2188     type_ = Type::stringValue;
2189     ::new (std::addressof(value_.stringValue)) ::std::string(t);
2190     return value_.stringValue;
2191   }
2192 
2193   ::std::string& set_stringValue(::std::string&& t) {
2194     __fbthrift_clear();
2195     type_ = Type::stringValue;
2196     ::new (std::addressof(value_.stringValue)) ::std::string(std::move(t));
2197     return value_.stringValue;
2198   }
2199 
2200   template<typename... T, typename = ::apache::thrift::safe_overload_t<::std::string, T...>> ::std::string& set_stringValue(T&&... t) {
2201     __fbthrift_clear();
2202     type_ = Type::stringValue;
2203     ::new (std::addressof(value_.stringValue)) ::std::string(std::forward<T>(t)...);
2204     return value_.stringValue;
2205   }
2206 
2207   ::std::int64_t const& get_intValue() const {
2208     if (type_ != Type::intValue) {
2209       ::apache::thrift::detail::throw_on_bad_field_access();
2210     }
2211     return value_.intValue;
2212   }
2213 
2214   ::std::string const& get_stringValue() const {
2215     if (type_ != Type::stringValue) {
2216       ::apache::thrift::detail::throw_on_bad_field_access();
2217     }
2218     return value_.stringValue;
2219   }
2220 
2221   ::std::int64_t& mutable_intValue() {
2222     assert(type_ == Type::intValue);
2223     return value_.intValue;
2224   }
2225 
2226   ::std::string& mutable_stringValue() {
2227     assert(type_ == Type::stringValue);
2228     return value_.stringValue;
2229   }
2230 
2231   ::std::int64_t move_intValue() {
2232     assert(type_ == Type::intValue);
2233     return std::move(value_.intValue);
2234   }
2235 
2236   ::std::string move_stringValue() {
2237     assert(type_ == Type::stringValue);
2238     return std::move(value_.stringValue);
2239   }
2240 
2241   template <typename..., typename T = ::std::int64_t>
2242   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> intValue_ref() const& {
2243     return {value_.intValue, type_, intValue, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
2244   }
2245 
2246   template <typename..., typename T = ::std::int64_t>
2247   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> intValue_ref() const&& {
2248     return {std::move(value_.intValue), type_, intValue, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
2249   }
2250 
2251   template <typename..., typename T = ::std::int64_t>
2252   FOLLY_ERASE ::apache::thrift::union_field_ref<T&> intValue_ref() & {
2253     return {value_.intValue, type_, intValue, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
2254   }
2255 
2256   template <typename..., typename T = ::std::int64_t>
2257   FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> intValue_ref() && {
2258     return {std::move(value_.intValue), type_, intValue, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
2259   }
2260   template <typename..., typename T = ::std::string>
2261   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> stringValue_ref() const& {
2262     return {value_.stringValue, type_, stringValue, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
2263   }
2264 
2265   template <typename..., typename T = ::std::string>
2266   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> stringValue_ref() const&& {
2267     return {std::move(value_.stringValue), type_, stringValue, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
2268   }
2269 
2270   template <typename..., typename T = ::std::string>
2271   FOLLY_ERASE ::apache::thrift::union_field_ref<T&> stringValue_ref() & {
2272     return {value_.stringValue, type_, stringValue, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
2273   }
2274 
2275   template <typename..., typename T = ::std::string>
2276   FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> stringValue_ref() && {
2277     return {std::move(value_.stringValue), type_, stringValue, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
2278   }
2279   Type getType() const { return static_cast<Type>(type_); }
2280 
2281   template <class Protocol_>
2282   uint32_t read(Protocol_* iprot);
2283   template <class Protocol_>
2284   uint32_t serializedSize(Protocol_ const* prot_) const;
2285   template <class Protocol_>
2286   uint32_t serializedSizeZC(Protocol_ const* prot_) const;
2287   template <class Protocol_>
2288   uint32_t write(Protocol_* prot_) const;
2289  protected:
2290   template <class T>
2291   void destruct(T &val) {
2292     (&val)->~T();
2293   }
2294 
2295   storage_type value_;
2296   std::underlying_type_t<Type> type_;
2297 
2298  private:
2299   template <class Protocol_>
2300   void readNoXfer(Protocol_* iprot);
2301 
2302   friend class ::apache::thrift::Cpp2Ops<SimpleUnion>;
2303   friend void swap(SimpleUnion& a, SimpleUnion& b);
2304 };
2305 
2306 template <class Protocol_>
2307 uint32_t SimpleUnion::read(Protocol_* iprot) {
2308   auto _xferStart = iprot->getCursorPosition();
2309   readNoXfer(iprot);
2310   return iprot->getCursorPosition() - _xferStart;
2311 }
2312 
2313 }}} // some::valid::ns
2314 namespace some { namespace valid { namespace ns {
2315 class ComplexUnion final  {
2316  private:
2317   friend struct ::apache::thrift::detail::st::struct_private_access;
2318 
2319   //  used by a static_assert in the corresponding source
2320   static constexpr bool __fbthrift_cpp2_gen_json = true;
2321   static constexpr bool __fbthrift_cpp2_gen_nimble = false;
2322   static constexpr bool __fbthrift_cpp2_gen_has_thrift_uri = false;
2323 
2324   void __fbthrift_clear();
2325 
2326  public:
2327   using __fbthrift_cpp2_type = ComplexUnion;
2328   static constexpr bool __fbthrift_cpp2_is_union =
2329     true;
2330 
2331 
2332  public:
2333   enum Type : int {
2334     __EMPTY__ = 0,
2335     intValue = 1,
2336     opt_intValue = 201,
2337     stringValue = 3,
2338     opt_stringValue = 203,
2339     intValue2 = 4,
2340     intValue3 = 6,
2341     doubelValue = 7,
2342     boolValue = 8,
2343     union_list = 9,
2344     union_set = 10,
2345     union_map = 11,
2346     opt_union_map = 211,
2347     enum_field = 12,
2348     enum_container = 13,
2349     a_struct = 14,
2350     a_set_struct = 15,
2351     a_union = 16,
2352     opt_a_union = 216,
2353     a_union_list = 17,
2354     a_union_typedef = 18,
2355     a_union_typedef_list = 19,
2356     MyBinaryField = 20,
2357     MyBinaryField2 = 21,
2358     MyBinaryListField4 = 23,
2359     ref_field = 24,
2360     ref_field2 = 25,
2361     excp_field = 26,
2362     MyCustomField = 27,
2363   } ;
2364 
2365   ComplexUnion()
2366       : type_(Type::__EMPTY__) {}
2367 
2368   ComplexUnion(ComplexUnion&& rhs) noexcept
2369       : type_(Type::__EMPTY__) {
2370     if (this == &rhs) { return; }
2371     if (rhs.type_ == Type::__EMPTY__) { return; }
2372     switch (rhs.type_) {
2373       case Type::intValue:
2374       {
2375         set_intValue(std::move(rhs.value_.intValue));
2376         break;
2377       }
2378       case Type::opt_intValue:
2379       {
2380         set_opt_intValue(std::move(rhs.value_.opt_intValue));
2381         break;
2382       }
2383       case Type::stringValue:
2384       {
2385         set_stringValue(std::move(rhs.value_.stringValue));
2386         break;
2387       }
2388       case Type::opt_stringValue:
2389       {
2390         set_opt_stringValue(std::move(rhs.value_.opt_stringValue));
2391         break;
2392       }
2393       case Type::intValue2:
2394       {
2395         set_intValue2(std::move(rhs.value_.intValue2));
2396         break;
2397       }
2398       case Type::intValue3:
2399       {
2400         set_intValue3(std::move(rhs.value_.intValue3));
2401         break;
2402       }
2403       case Type::doubelValue:
2404       {
2405         set_doubelValue(std::move(rhs.value_.doubelValue));
2406         break;
2407       }
2408       case Type::boolValue:
2409       {
2410         set_boolValue(std::move(rhs.value_.boolValue));
2411         break;
2412       }
2413       case Type::union_list:
2414       {
2415         set_union_list(std::move(rhs.value_.union_list));
2416         break;
2417       }
2418       case Type::union_set:
2419       {
2420         set_union_set(std::move(rhs.value_.union_set));
2421         break;
2422       }
2423       case Type::union_map:
2424       {
2425         set_union_map(std::move(rhs.value_.union_map));
2426         break;
2427       }
2428       case Type::opt_union_map:
2429       {
2430         set_opt_union_map(std::move(rhs.value_.opt_union_map));
2431         break;
2432       }
2433       case Type::enum_field:
2434       {
2435         set_enum_field(std::move(rhs.value_.enum_field));
2436         break;
2437       }
2438       case Type::enum_container:
2439       {
2440         set_enum_container(std::move(rhs.value_.enum_container));
2441         break;
2442       }
2443       case Type::a_struct:
2444       {
2445         set_a_struct(std::move(rhs.value_.a_struct));
2446         break;
2447       }
2448       case Type::a_set_struct:
2449       {
2450         set_a_set_struct(std::move(rhs.value_.a_set_struct));
2451         break;
2452       }
2453       case Type::a_union:
2454       {
2455         set_a_union(std::move(rhs.value_.a_union));
2456         break;
2457       }
2458       case Type::opt_a_union:
2459       {
2460         set_opt_a_union(std::move(rhs.value_.opt_a_union));
2461         break;
2462       }
2463       case Type::a_union_list:
2464       {
2465         set_a_union_list(std::move(rhs.value_.a_union_list));
2466         break;
2467       }
2468       case Type::a_union_typedef:
2469       {
2470         set_a_union_typedef(std::move(rhs.value_.a_union_typedef));
2471         break;
2472       }
2473       case Type::a_union_typedef_list:
2474       {
2475         set_a_union_typedef_list(std::move(rhs.value_.a_union_typedef_list));
2476         break;
2477       }
2478       case Type::MyBinaryField:
2479       {
2480         set_MyBinaryField(std::move(rhs.value_.MyBinaryField));
2481         break;
2482       }
2483       case Type::MyBinaryField2:
2484       {
2485         set_MyBinaryField2(std::move(rhs.value_.MyBinaryField2));
2486         break;
2487       }
2488       case Type::MyBinaryListField4:
2489       {
2490         set_MyBinaryListField4(std::move(rhs.value_.MyBinaryListField4));
2491         break;
2492       }
2493       case Type::ref_field:
2494       {
2495         set_ref_field(std::move(*rhs.value_.ref_field));
2496         break;
2497       }
2498       case Type::ref_field2:
2499       {
2500         set_ref_field2(std::move(*rhs.value_.ref_field2));
2501         break;
2502       }
2503       case Type::excp_field:
2504       {
2505         set_excp_field(std::move(rhs.value_.excp_field));
2506         break;
2507       }
2508       case Type::MyCustomField:
2509       {
2510         set_MyCustomField(std::move(rhs.value_.MyCustomField));
2511         break;
2512       }
2513       default:
2514       {
2515         assert(false);
2516         break;
2517       }
2518     }
2519     apache::thrift::clear(rhs);
2520   }
2521 
2522   ComplexUnion(const ComplexUnion& rhs)
2523       : type_(Type::__EMPTY__) {
2524     if (this == &rhs) { return; }
2525     if (rhs.type_ == Type::__EMPTY__) { return; }
2526     switch (rhs.type_) {
2527       case Type::intValue:
2528       {
2529         set_intValue(rhs.value_.intValue);
2530         break;
2531       }
2532       case Type::opt_intValue:
2533       {
2534         set_opt_intValue(rhs.value_.opt_intValue);
2535         break;
2536       }
2537       case Type::stringValue:
2538       {
2539         set_stringValue(rhs.value_.stringValue);
2540         break;
2541       }
2542       case Type::opt_stringValue:
2543       {
2544         set_opt_stringValue(rhs.value_.opt_stringValue);
2545         break;
2546       }
2547       case Type::intValue2:
2548       {
2549         set_intValue2(rhs.value_.intValue2);
2550         break;
2551       }
2552       case Type::intValue3:
2553       {
2554         set_intValue3(rhs.value_.intValue3);
2555         break;
2556       }
2557       case Type::doubelValue:
2558       {
2559         set_doubelValue(rhs.value_.doubelValue);
2560         break;
2561       }
2562       case Type::boolValue:
2563       {
2564         set_boolValue(rhs.value_.boolValue);
2565         break;
2566       }
2567       case Type::union_list:
2568       {
2569         set_union_list(rhs.value_.union_list);
2570         break;
2571       }
2572       case Type::union_set:
2573       {
2574         set_union_set(rhs.value_.union_set);
2575         break;
2576       }
2577       case Type::union_map:
2578       {
2579         set_union_map(rhs.value_.union_map);
2580         break;
2581       }
2582       case Type::opt_union_map:
2583       {
2584         set_opt_union_map(rhs.value_.opt_union_map);
2585         break;
2586       }
2587       case Type::enum_field:
2588       {
2589         set_enum_field(rhs.value_.enum_field);
2590         break;
2591       }
2592       case Type::enum_container:
2593       {
2594         set_enum_container(rhs.value_.enum_container);
2595         break;
2596       }
2597       case Type::a_struct:
2598       {
2599         set_a_struct(rhs.value_.a_struct);
2600         break;
2601       }
2602       case Type::a_set_struct:
2603       {
2604         set_a_set_struct(rhs.value_.a_set_struct);
2605         break;
2606       }
2607       case Type::a_union:
2608       {
2609         set_a_union(rhs.value_.a_union);
2610         break;
2611       }
2612       case Type::opt_a_union:
2613       {
2614         set_opt_a_union(rhs.value_.opt_a_union);
2615         break;
2616       }
2617       case Type::a_union_list:
2618       {
2619         set_a_union_list(rhs.value_.a_union_list);
2620         break;
2621       }
2622       case Type::a_union_typedef:
2623       {
2624         set_a_union_typedef(rhs.value_.a_union_typedef);
2625         break;
2626       }
2627       case Type::a_union_typedef_list:
2628       {
2629         set_a_union_typedef_list(rhs.value_.a_union_typedef_list);
2630         break;
2631       }
2632       case Type::MyBinaryField:
2633       {
2634         set_MyBinaryField(rhs.value_.MyBinaryField);
2635         break;
2636       }
2637       case Type::MyBinaryField2:
2638       {
2639         set_MyBinaryField2(rhs.value_.MyBinaryField2);
2640         break;
2641       }
2642       case Type::MyBinaryListField4:
2643       {
2644         set_MyBinaryListField4(rhs.value_.MyBinaryListField4);
2645         break;
2646       }
2647       case Type::ref_field:
2648       {
2649         set_ref_field(*rhs.value_.ref_field);
2650         break;
2651       }
2652       case Type::ref_field2:
2653       {
2654         set_ref_field2(*rhs.value_.ref_field2);
2655         break;
2656       }
2657       case Type::excp_field:
2658       {
2659         set_excp_field(rhs.value_.excp_field);
2660         break;
2661       }
2662       case Type::MyCustomField:
2663       {
2664         set_MyCustomField(rhs.value_.MyCustomField);
2665         break;
2666       }
2667       default:
2668       {
2669         assert(false);
2670         break;
2671       }
2672     }
2673   }
2674 
2675   ComplexUnion& operator=(ComplexUnion&& rhs) noexcept {
2676     if (this == &rhs) { return *this; }
2677     __fbthrift_clear();
2678     if (rhs.type_ == Type::__EMPTY__) { return *this; }
2679     switch (rhs.type_) {
2680       case Type::intValue:
2681       {
2682         set_intValue(std::move(rhs.value_.intValue));
2683         break;
2684       }
2685       case Type::opt_intValue:
2686       {
2687         set_opt_intValue(std::move(rhs.value_.opt_intValue));
2688         break;
2689       }
2690       case Type::stringValue:
2691       {
2692         set_stringValue(std::move(rhs.value_.stringValue));
2693         break;
2694       }
2695       case Type::opt_stringValue:
2696       {
2697         set_opt_stringValue(std::move(rhs.value_.opt_stringValue));
2698         break;
2699       }
2700       case Type::intValue2:
2701       {
2702         set_intValue2(std::move(rhs.value_.intValue2));
2703         break;
2704       }
2705       case Type::intValue3:
2706       {
2707         set_intValue3(std::move(rhs.value_.intValue3));
2708         break;
2709       }
2710       case Type::doubelValue:
2711       {
2712         set_doubelValue(std::move(rhs.value_.doubelValue));
2713         break;
2714       }
2715       case Type::boolValue:
2716       {
2717         set_boolValue(std::move(rhs.value_.boolValue));
2718         break;
2719       }
2720       case Type::union_list:
2721       {
2722         set_union_list(std::move(rhs.value_.union_list));
2723         break;
2724       }
2725       case Type::union_set:
2726       {
2727         set_union_set(std::move(rhs.value_.union_set));
2728         break;
2729       }
2730       case Type::union_map:
2731       {
2732         set_union_map(std::move(rhs.value_.union_map));
2733         break;
2734       }
2735       case Type::opt_union_map:
2736       {
2737         set_opt_union_map(std::move(rhs.value_.opt_union_map));
2738         break;
2739       }
2740       case Type::enum_field:
2741       {
2742         set_enum_field(std::move(rhs.value_.enum_field));
2743         break;
2744       }
2745       case Type::enum_container:
2746       {
2747         set_enum_container(std::move(rhs.value_.enum_container));
2748         break;
2749       }
2750       case Type::a_struct:
2751       {
2752         set_a_struct(std::move(rhs.value_.a_struct));
2753         break;
2754       }
2755       case Type::a_set_struct:
2756       {
2757         set_a_set_struct(std::move(rhs.value_.a_set_struct));
2758         break;
2759       }
2760       case Type::a_union:
2761       {
2762         set_a_union(std::move(rhs.value_.a_union));
2763         break;
2764       }
2765       case Type::opt_a_union:
2766       {
2767         set_opt_a_union(std::move(rhs.value_.opt_a_union));
2768         break;
2769       }
2770       case Type::a_union_list:
2771       {
2772         set_a_union_list(std::move(rhs.value_.a_union_list));
2773         break;
2774       }
2775       case Type::a_union_typedef:
2776       {
2777         set_a_union_typedef(std::move(rhs.value_.a_union_typedef));
2778         break;
2779       }
2780       case Type::a_union_typedef_list:
2781       {
2782         set_a_union_typedef_list(std::move(rhs.value_.a_union_typedef_list));
2783         break;
2784       }
2785       case Type::MyBinaryField:
2786       {
2787         set_MyBinaryField(std::move(rhs.value_.MyBinaryField));
2788         break;
2789       }
2790       case Type::MyBinaryField2:
2791       {
2792         set_MyBinaryField2(std::move(rhs.value_.MyBinaryField2));
2793         break;
2794       }
2795       case Type::MyBinaryListField4:
2796       {
2797         set_MyBinaryListField4(std::move(rhs.value_.MyBinaryListField4));
2798         break;
2799       }
2800       case Type::ref_field:
2801       {
2802         set_ref_field(std::move(*rhs.value_.ref_field));
2803         break;
2804       }
2805       case Type::ref_field2:
2806       {
2807         set_ref_field2(std::move(*rhs.value_.ref_field2));
2808         break;
2809       }
2810       case Type::excp_field:
2811       {
2812         set_excp_field(std::move(rhs.value_.excp_field));
2813         break;
2814       }
2815       case Type::MyCustomField:
2816       {
2817         set_MyCustomField(std::move(rhs.value_.MyCustomField));
2818         break;
2819       }
2820       default:
2821       {
2822         assert(false);
2823         break;
2824       }
2825     }
2826     apache::thrift::clear(rhs);
2827     return *this;
2828   }
2829 
2830   ComplexUnion& operator=(const ComplexUnion& rhs) {
2831     if (this == &rhs) { return *this; }
2832     __fbthrift_clear();
2833     if (rhs.type_ == Type::__EMPTY__) { return *this; }
2834     switch (rhs.type_) {
2835       case Type::intValue:
2836       {
2837         set_intValue(rhs.value_.intValue);
2838         break;
2839       }
2840       case Type::opt_intValue:
2841       {
2842         set_opt_intValue(rhs.value_.opt_intValue);
2843         break;
2844       }
2845       case Type::stringValue:
2846       {
2847         set_stringValue(rhs.value_.stringValue);
2848         break;
2849       }
2850       case Type::opt_stringValue:
2851       {
2852         set_opt_stringValue(rhs.value_.opt_stringValue);
2853         break;
2854       }
2855       case Type::intValue2:
2856       {
2857         set_intValue2(rhs.value_.intValue2);
2858         break;
2859       }
2860       case Type::intValue3:
2861       {
2862         set_intValue3(rhs.value_.intValue3);
2863         break;
2864       }
2865       case Type::doubelValue:
2866       {
2867         set_doubelValue(rhs.value_.doubelValue);
2868         break;
2869       }
2870       case Type::boolValue:
2871       {
2872         set_boolValue(rhs.value_.boolValue);
2873         break;
2874       }
2875       case Type::union_list:
2876       {
2877         set_union_list(rhs.value_.union_list);
2878         break;
2879       }
2880       case Type::union_set:
2881       {
2882         set_union_set(rhs.value_.union_set);
2883         break;
2884       }
2885       case Type::union_map:
2886       {
2887         set_union_map(rhs.value_.union_map);
2888         break;
2889       }
2890       case Type::opt_union_map:
2891       {
2892         set_opt_union_map(rhs.value_.opt_union_map);
2893         break;
2894       }
2895       case Type::enum_field:
2896       {
2897         set_enum_field(rhs.value_.enum_field);
2898         break;
2899       }
2900       case Type::enum_container:
2901       {
2902         set_enum_container(rhs.value_.enum_container);
2903         break;
2904       }
2905       case Type::a_struct:
2906       {
2907         set_a_struct(rhs.value_.a_struct);
2908         break;
2909       }
2910       case Type::a_set_struct:
2911       {
2912         set_a_set_struct(rhs.value_.a_set_struct);
2913         break;
2914       }
2915       case Type::a_union:
2916       {
2917         set_a_union(rhs.value_.a_union);
2918         break;
2919       }
2920       case Type::opt_a_union:
2921       {
2922         set_opt_a_union(rhs.value_.opt_a_union);
2923         break;
2924       }
2925       case Type::a_union_list:
2926       {
2927         set_a_union_list(rhs.value_.a_union_list);
2928         break;
2929       }
2930       case Type::a_union_typedef:
2931       {
2932         set_a_union_typedef(rhs.value_.a_union_typedef);
2933         break;
2934       }
2935       case Type::a_union_typedef_list:
2936       {
2937         set_a_union_typedef_list(rhs.value_.a_union_typedef_list);
2938         break;
2939       }
2940       case Type::MyBinaryField:
2941       {
2942         set_MyBinaryField(rhs.value_.MyBinaryField);
2943         break;
2944       }
2945       case Type::MyBinaryField2:
2946       {
2947         set_MyBinaryField2(rhs.value_.MyBinaryField2);
2948         break;
2949       }
2950       case Type::MyBinaryListField4:
2951       {
2952         set_MyBinaryListField4(rhs.value_.MyBinaryListField4);
2953         break;
2954       }
2955       case Type::ref_field:
2956       {
2957         set_ref_field(*rhs.value_.ref_field);
2958         break;
2959       }
2960       case Type::ref_field2:
2961       {
2962         set_ref_field2(*rhs.value_.ref_field2);
2963         break;
2964       }
2965       case Type::excp_field:
2966       {
2967         set_excp_field(rhs.value_.excp_field);
2968         break;
2969       }
2970       case Type::MyCustomField:
2971       {
2972         set_MyCustomField(rhs.value_.MyCustomField);
2973         break;
2974       }
2975       default:
2976       {
2977         assert(false);
2978         break;
2979       }
2980     }
2981     return *this;
2982   }
2983 
2984   ~ComplexUnion() {
2985     apache::thrift::clear(*this);
2986   }
2987   union storage_type {
2988     ::std::int64_t intValue;
2989     ::std::int64_t opt_intValue;
2990     ::std::string stringValue;
2991     ::std::string opt_stringValue;
2992     ::std::int16_t intValue2;
2993     ::std::int32_t intValue3;
2994     double doubelValue;
2995     bool boolValue;
2996     ::std::vector<::std::int32_t> union_list;
2997     ::std::set<::std::int64_t> union_set;
2998     ::std::map<::std::string, ::std::int32_t> union_map;
2999     ::std::map<::std::string, ::std::int32_t> opt_union_map;
3000     ::some::valid::ns::MyEnumA enum_field;
3001     ::std::vector<::some::valid::ns::MyEnumA> enum_container;
3002     ::some::valid::ns::MyStruct a_struct;
3003     ::std::set<::some::valid::ns::MyStruct> a_set_struct;
3004     ::some::valid::ns::SimpleUnion a_union;
3005     ::some::valid::ns::SimpleUnion opt_a_union;
3006     ::std::vector<::some::valid::ns::SimpleUnion> a_union_list;
3007     ::some::valid::ns::unionTypeDef a_union_typedef;
3008     ::std::vector<::some::valid::ns::unionTypeDef> a_union_typedef_list;
3009     ::std::string MyBinaryField;
3010     ::std::string MyBinaryField2;
3011     ::std::vector<::std::string> MyBinaryListField4;
3012     ::std::unique_ptr<::some::valid::ns::MyStruct> ref_field;
3013     ::std::shared_ptr<const ::some::valid::ns::MyStruct> ref_field2;
3014     ::some::valid::ns::AnException excp_field;
3015     ::some::valid::ns::CustomProtocolType MyCustomField;
3016 
3017     storage_type() {}
3018     ~storage_type() {}
3019   } ;
3020 
3021   bool operator==(const ComplexUnion&) const;
3022   bool operator<(const ComplexUnion&) const;
3023 
3024   ::std::int64_t& set_intValue(::std::int64_t t = ::std::int64_t()) {
3025     __fbthrift_clear();
3026     type_ = Type::intValue;
3027     ::new (std::addressof(value_.intValue)) ::std::int64_t(t);
3028     return value_.intValue;
3029   }
3030 
3031   ::std::int64_t& set_opt_intValue(::std::int64_t t = ::std::int64_t()) {
3032     __fbthrift_clear();
3033     type_ = Type::opt_intValue;
3034     ::new (std::addressof(value_.opt_intValue)) ::std::int64_t(t);
3035     return value_.opt_intValue;
3036   }
3037 
3038   ::std::string& set_stringValue(::std::string const &t) {
3039     __fbthrift_clear();
3040     type_ = Type::stringValue;
3041     ::new (std::addressof(value_.stringValue)) ::std::string(t);
3042     return value_.stringValue;
3043   }
3044 
3045   ::std::string& set_stringValue(::std::string&& t) {
3046     __fbthrift_clear();
3047     type_ = Type::stringValue;
3048     ::new (std::addressof(value_.stringValue)) ::std::string(std::move(t));
3049     return value_.stringValue;
3050   }
3051 
3052   template<typename... T, typename = ::apache::thrift::safe_overload_t<::std::string, T...>> ::std::string& set_stringValue(T&&... t) {
3053     __fbthrift_clear();
3054     type_ = Type::stringValue;
3055     ::new (std::addressof(value_.stringValue)) ::std::string(std::forward<T>(t)...);
3056     return value_.stringValue;
3057   }
3058 
3059   ::std::string& set_opt_stringValue(::std::string const &t) {
3060     __fbthrift_clear();
3061     type_ = Type::opt_stringValue;
3062     ::new (std::addressof(value_.opt_stringValue)) ::std::string(t);
3063     return value_.opt_stringValue;
3064   }
3065 
3066   ::std::string& set_opt_stringValue(::std::string&& t) {
3067     __fbthrift_clear();
3068     type_ = Type::opt_stringValue;
3069     ::new (std::addressof(value_.opt_stringValue)) ::std::string(std::move(t));
3070     return value_.opt_stringValue;
3071   }
3072 
3073   template<typename... T, typename = ::apache::thrift::safe_overload_t<::std::string, T...>> ::std::string& set_opt_stringValue(T&&... t) {
3074     __fbthrift_clear();
3075     type_ = Type::opt_stringValue;
3076     ::new (std::addressof(value_.opt_stringValue)) ::std::string(std::forward<T>(t)...);
3077     return value_.opt_stringValue;
3078   }
3079 
3080   ::std::int16_t& set_intValue2(::std::int16_t t = ::std::int16_t()) {
3081     __fbthrift_clear();
3082     type_ = Type::intValue2;
3083     ::new (std::addressof(value_.intValue2)) ::std::int16_t(t);
3084     return value_.intValue2;
3085   }
3086 
3087   ::std::int32_t& set_intValue3(::std::int32_t t = ::std::int32_t()) {
3088     __fbthrift_clear();
3089     type_ = Type::intValue3;
3090     ::new (std::addressof(value_.intValue3)) ::std::int32_t(t);
3091     return value_.intValue3;
3092   }
3093 
3094   double& set_doubelValue(double t = double()) {
3095     __fbthrift_clear();
3096     type_ = Type::doubelValue;
3097     ::new (std::addressof(value_.doubelValue)) double(t);
3098     return value_.doubelValue;
3099   }
3100 
3101   bool& set_boolValue(bool t = bool()) {
3102     __fbthrift_clear();
3103     type_ = Type::boolValue;
3104     ::new (std::addressof(value_.boolValue)) bool(t);
3105     return value_.boolValue;
3106   }
3107 
3108   ::std::vector<::std::int32_t>& set_union_list(::std::vector<::std::int32_t> const &t) {
3109     __fbthrift_clear();
3110     type_ = Type::union_list;
3111     ::new (std::addressof(value_.union_list)) ::std::vector<::std::int32_t>(t);
3112     return value_.union_list;
3113   }
3114 
3115   ::std::vector<::std::int32_t>& set_union_list(::std::vector<::std::int32_t>&& t) {
3116     __fbthrift_clear();
3117     type_ = Type::union_list;
3118     ::new (std::addressof(value_.union_list)) ::std::vector<::std::int32_t>(std::move(t));
3119     return value_.union_list;
3120   }
3121 
3122   template<typename... T, typename = ::apache::thrift::safe_overload_t<::std::vector<::std::int32_t>, T...>> ::std::vector<::std::int32_t>& set_union_list(T&&... t) {
3123     __fbthrift_clear();
3124     type_ = Type::union_list;
3125     ::new (std::addressof(value_.union_list)) ::std::vector<::std::int32_t>(std::forward<T>(t)...);
3126     return value_.union_list;
3127   }
3128 
3129   ::std::set<::std::int64_t>& set_union_set(::std::set<::std::int64_t> const &t) {
3130     __fbthrift_clear();
3131     type_ = Type::union_set;
3132     ::new (std::addressof(value_.union_set)) ::std::set<::std::int64_t>(t);
3133     return value_.union_set;
3134   }
3135 
3136   ::std::set<::std::int64_t>& set_union_set(::std::set<::std::int64_t>&& t) {
3137     __fbthrift_clear();
3138     type_ = Type::union_set;
3139     ::new (std::addressof(value_.union_set)) ::std::set<::std::int64_t>(std::move(t));
3140     return value_.union_set;
3141   }
3142 
3143   template<typename... T, typename = ::apache::thrift::safe_overload_t<::std::set<::std::int64_t>, T...>> ::std::set<::std::int64_t>& set_union_set(T&&... t) {
3144     __fbthrift_clear();
3145     type_ = Type::union_set;
3146     ::new (std::addressof(value_.union_set)) ::std::set<::std::int64_t>(std::forward<T>(t)...);
3147     return value_.union_set;
3148   }
3149 
3150   ::std::map<::std::string, ::std::int32_t>& set_union_map(::std::map<::std::string, ::std::int32_t> const &t) {
3151     __fbthrift_clear();
3152     type_ = Type::union_map;
3153     ::new (std::addressof(value_.union_map)) ::std::map<::std::string, ::std::int32_t>(t);
3154     return value_.union_map;
3155   }
3156 
3157   ::std::map<::std::string, ::std::int32_t>& set_union_map(::std::map<::std::string, ::std::int32_t>&& t) {
3158     __fbthrift_clear();
3159     type_ = Type::union_map;
3160     ::new (std::addressof(value_.union_map)) ::std::map<::std::string, ::std::int32_t>(std::move(t));
3161     return value_.union_map;
3162   }
3163 
3164   template<typename... T, typename = ::apache::thrift::safe_overload_t<::std::map<::std::string, ::std::int32_t>, T...>> ::std::map<::std::string, ::std::int32_t>& set_union_map(T&&... t) {
3165     __fbthrift_clear();
3166     type_ = Type::union_map;
3167     ::new (std::addressof(value_.union_map)) ::std::map<::std::string, ::std::int32_t>(std::forward<T>(t)...);
3168     return value_.union_map;
3169   }
3170 
3171   ::std::map<::std::string, ::std::int32_t>& set_opt_union_map(::std::map<::std::string, ::std::int32_t> const &t) {
3172     __fbthrift_clear();
3173     type_ = Type::opt_union_map;
3174     ::new (std::addressof(value_.opt_union_map)) ::std::map<::std::string, ::std::int32_t>(t);
3175     return value_.opt_union_map;
3176   }
3177 
3178   ::std::map<::std::string, ::std::int32_t>& set_opt_union_map(::std::map<::std::string, ::std::int32_t>&& t) {
3179     __fbthrift_clear();
3180     type_ = Type::opt_union_map;
3181     ::new (std::addressof(value_.opt_union_map)) ::std::map<::std::string, ::std::int32_t>(std::move(t));
3182     return value_.opt_union_map;
3183   }
3184 
3185   template<typename... T, typename = ::apache::thrift::safe_overload_t<::std::map<::std::string, ::std::int32_t>, T...>> ::std::map<::std::string, ::std::int32_t>& set_opt_union_map(T&&... t) {
3186     __fbthrift_clear();
3187     type_ = Type::opt_union_map;
3188     ::new (std::addressof(value_.opt_union_map)) ::std::map<::std::string, ::std::int32_t>(std::forward<T>(t)...);
3189     return value_.opt_union_map;
3190   }
3191 
3192   ::some::valid::ns::MyEnumA& set_enum_field(::some::valid::ns::MyEnumA t = ::some::valid::ns::MyEnumA()) {
3193     __fbthrift_clear();
3194     type_ = Type::enum_field;
3195     ::new (std::addressof(value_.enum_field)) ::some::valid::ns::MyEnumA(t);
3196     return value_.enum_field;
3197   }
3198 
3199   ::std::vector<::some::valid::ns::MyEnumA>& set_enum_container(::std::vector<::some::valid::ns::MyEnumA> const &t) {
3200     __fbthrift_clear();
3201     type_ = Type::enum_container;
3202     ::new (std::addressof(value_.enum_container)) ::std::vector<::some::valid::ns::MyEnumA>(t);
3203     return value_.enum_container;
3204   }
3205 
3206   ::std::vector<::some::valid::ns::MyEnumA>& set_enum_container(::std::vector<::some::valid::ns::MyEnumA>&& t) {
3207     __fbthrift_clear();
3208     type_ = Type::enum_container;
3209     ::new (std::addressof(value_.enum_container)) ::std::vector<::some::valid::ns::MyEnumA>(std::move(t));
3210     return value_.enum_container;
3211   }
3212 
3213   template<typename... T, typename = ::apache::thrift::safe_overload_t<::std::vector<::some::valid::ns::MyEnumA>, T...>> ::std::vector<::some::valid::ns::MyEnumA>& set_enum_container(T&&... t) {
3214     __fbthrift_clear();
3215     type_ = Type::enum_container;
3216     ::new (std::addressof(value_.enum_container)) ::std::vector<::some::valid::ns::MyEnumA>(std::forward<T>(t)...);
3217     return value_.enum_container;
3218   }
3219 
3220   ::some::valid::ns::MyStruct& set_a_struct(::some::valid::ns::MyStruct const &t) {
3221     __fbthrift_clear();
3222     type_ = Type::a_struct;
3223     ::new (std::addressof(value_.a_struct)) ::some::valid::ns::MyStruct(t);
3224     return value_.a_struct;
3225   }
3226 
3227   ::some::valid::ns::MyStruct& set_a_struct(::some::valid::ns::MyStruct&& t) {
3228     __fbthrift_clear();
3229     type_ = Type::a_struct;
3230     ::new (std::addressof(value_.a_struct)) ::some::valid::ns::MyStruct(std::move(t));
3231     return value_.a_struct;
3232   }
3233 
3234   template<typename... T, typename = ::apache::thrift::safe_overload_t<::some::valid::ns::MyStruct, T...>> ::some::valid::ns::MyStruct& set_a_struct(T&&... t) {
3235     __fbthrift_clear();
3236     type_ = Type::a_struct;
3237     ::new (std::addressof(value_.a_struct)) ::some::valid::ns::MyStruct(std::forward<T>(t)...);
3238     return value_.a_struct;
3239   }
3240 
3241   ::std::set<::some::valid::ns::MyStruct>& set_a_set_struct(::std::set<::some::valid::ns::MyStruct> const &t) {
3242     __fbthrift_clear();
3243     type_ = Type::a_set_struct;
3244     ::new (std::addressof(value_.a_set_struct)) ::std::set<::some::valid::ns::MyStruct>(t);
3245     return value_.a_set_struct;
3246   }
3247 
3248   ::std::set<::some::valid::ns::MyStruct>& set_a_set_struct(::std::set<::some::valid::ns::MyStruct>&& t) {
3249     __fbthrift_clear();
3250     type_ = Type::a_set_struct;
3251     ::new (std::addressof(value_.a_set_struct)) ::std::set<::some::valid::ns::MyStruct>(std::move(t));
3252     return value_.a_set_struct;
3253   }
3254 
3255   template<typename... T, typename = ::apache::thrift::safe_overload_t<::std::set<::some::valid::ns::MyStruct>, T...>> ::std::set<::some::valid::ns::MyStruct>& set_a_set_struct(T&&... t) {
3256     __fbthrift_clear();
3257     type_ = Type::a_set_struct;
3258     ::new (std::addressof(value_.a_set_struct)) ::std::set<::some::valid::ns::MyStruct>(std::forward<T>(t)...);
3259     return value_.a_set_struct;
3260   }
3261 
3262   ::some::valid::ns::SimpleUnion& set_a_union(::some::valid::ns::SimpleUnion const &t) {
3263     __fbthrift_clear();
3264     type_ = Type::a_union;
3265     ::new (std::addressof(value_.a_union)) ::some::valid::ns::SimpleUnion(t);
3266     return value_.a_union;
3267   }
3268 
3269   ::some::valid::ns::SimpleUnion& set_a_union(::some::valid::ns::SimpleUnion&& t) {
3270     __fbthrift_clear();
3271     type_ = Type::a_union;
3272     ::new (std::addressof(value_.a_union)) ::some::valid::ns::SimpleUnion(std::move(t));
3273     return value_.a_union;
3274   }
3275 
3276   template<typename... T, typename = ::apache::thrift::safe_overload_t<::some::valid::ns::SimpleUnion, T...>> ::some::valid::ns::SimpleUnion& set_a_union(T&&... t) {
3277     __fbthrift_clear();
3278     type_ = Type::a_union;
3279     ::new (std::addressof(value_.a_union)) ::some::valid::ns::SimpleUnion(std::forward<T>(t)...);
3280     return value_.a_union;
3281   }
3282 
3283   ::some::valid::ns::SimpleUnion& set_opt_a_union(::some::valid::ns::SimpleUnion const &t) {
3284     __fbthrift_clear();
3285     type_ = Type::opt_a_union;
3286     ::new (std::addressof(value_.opt_a_union)) ::some::valid::ns::SimpleUnion(t);
3287     return value_.opt_a_union;
3288   }
3289 
3290   ::some::valid::ns::SimpleUnion& set_opt_a_union(::some::valid::ns::SimpleUnion&& t) {
3291     __fbthrift_clear();
3292     type_ = Type::opt_a_union;
3293     ::new (std::addressof(value_.opt_a_union)) ::some::valid::ns::SimpleUnion(std::move(t));
3294     return value_.opt_a_union;
3295   }
3296 
3297   template<typename... T, typename = ::apache::thrift::safe_overload_t<::some::valid::ns::SimpleUnion, T...>> ::some::valid::ns::SimpleUnion& set_opt_a_union(T&&... t) {
3298     __fbthrift_clear();
3299     type_ = Type::opt_a_union;
3300     ::new (std::addressof(value_.opt_a_union)) ::some::valid::ns::SimpleUnion(std::forward<T>(t)...);
3301     return value_.opt_a_union;
3302   }
3303 
3304   ::std::vector<::some::valid::ns::SimpleUnion>& set_a_union_list(::std::vector<::some::valid::ns::SimpleUnion> const &t) {
3305     __fbthrift_clear();
3306     type_ = Type::a_union_list;
3307     ::new (std::addressof(value_.a_union_list)) ::std::vector<::some::valid::ns::SimpleUnion>(t);
3308     return value_.a_union_list;
3309   }
3310 
3311   ::std::vector<::some::valid::ns::SimpleUnion>& set_a_union_list(::std::vector<::some::valid::ns::SimpleUnion>&& t) {
3312     __fbthrift_clear();
3313     type_ = Type::a_union_list;
3314     ::new (std::addressof(value_.a_union_list)) ::std::vector<::some::valid::ns::SimpleUnion>(std::move(t));
3315     return value_.a_union_list;
3316   }
3317 
3318   template<typename... T, typename = ::apache::thrift::safe_overload_t<::std::vector<::some::valid::ns::SimpleUnion>, T...>> ::std::vector<::some::valid::ns::SimpleUnion>& set_a_union_list(T&&... t) {
3319     __fbthrift_clear();
3320     type_ = Type::a_union_list;
3321     ::new (std::addressof(value_.a_union_list)) ::std::vector<::some::valid::ns::SimpleUnion>(std::forward<T>(t)...);
3322     return value_.a_union_list;
3323   }
3324 
3325   ::some::valid::ns::unionTypeDef& set_a_union_typedef(::some::valid::ns::unionTypeDef const &t) {
3326     __fbthrift_clear();
3327     type_ = Type::a_union_typedef;
3328     ::new (std::addressof(value_.a_union_typedef)) ::some::valid::ns::unionTypeDef(t);
3329     return value_.a_union_typedef;
3330   }
3331 
3332   ::some::valid::ns::unionTypeDef& set_a_union_typedef(::some::valid::ns::unionTypeDef&& t) {
3333     __fbthrift_clear();
3334     type_ = Type::a_union_typedef;
3335     ::new (std::addressof(value_.a_union_typedef)) ::some::valid::ns::unionTypeDef(std::move(t));
3336     return value_.a_union_typedef;
3337   }
3338 
3339   template<typename... T, typename = ::apache::thrift::safe_overload_t<::some::valid::ns::unionTypeDef, T...>> ::some::valid::ns::unionTypeDef& set_a_union_typedef(T&&... t) {
3340     __fbthrift_clear();
3341     type_ = Type::a_union_typedef;
3342     ::new (std::addressof(value_.a_union_typedef)) ::some::valid::ns::unionTypeDef(std::forward<T>(t)...);
3343     return value_.a_union_typedef;
3344   }
3345 
3346   ::std::vector<::some::valid::ns::unionTypeDef>& set_a_union_typedef_list(::std::vector<::some::valid::ns::unionTypeDef> const &t) {
3347     __fbthrift_clear();
3348     type_ = Type::a_union_typedef_list;
3349     ::new (std::addressof(value_.a_union_typedef_list)) ::std::vector<::some::valid::ns::unionTypeDef>(t);
3350     return value_.a_union_typedef_list;
3351   }
3352 
3353   ::std::vector<::some::valid::ns::unionTypeDef>& set_a_union_typedef_list(::std::vector<::some::valid::ns::unionTypeDef>&& t) {
3354     __fbthrift_clear();
3355     type_ = Type::a_union_typedef_list;
3356     ::new (std::addressof(value_.a_union_typedef_list)) ::std::vector<::some::valid::ns::unionTypeDef>(std::move(t));
3357     return value_.a_union_typedef_list;
3358   }
3359 
3360   template<typename... T, typename = ::apache::thrift::safe_overload_t<::std::vector<::some::valid::ns::unionTypeDef>, T...>> ::std::vector<::some::valid::ns::unionTypeDef>& set_a_union_typedef_list(T&&... t) {
3361     __fbthrift_clear();
3362     type_ = Type::a_union_typedef_list;
3363     ::new (std::addressof(value_.a_union_typedef_list)) ::std::vector<::some::valid::ns::unionTypeDef>(std::forward<T>(t)...);
3364     return value_.a_union_typedef_list;
3365   }
3366 
3367   ::std::string& set_MyBinaryField(::std::string const &t) {
3368     __fbthrift_clear();
3369     type_ = Type::MyBinaryField;
3370     ::new (std::addressof(value_.MyBinaryField)) ::std::string(t);
3371     return value_.MyBinaryField;
3372   }
3373 
3374   ::std::string& set_MyBinaryField(::std::string&& t) {
3375     __fbthrift_clear();
3376     type_ = Type::MyBinaryField;
3377     ::new (std::addressof(value_.MyBinaryField)) ::std::string(std::move(t));
3378     return value_.MyBinaryField;
3379   }
3380 
3381   template<typename... T, typename = ::apache::thrift::safe_overload_t<::std::string, T...>> ::std::string& set_MyBinaryField(T&&... t) {
3382     __fbthrift_clear();
3383     type_ = Type::MyBinaryField;
3384     ::new (std::addressof(value_.MyBinaryField)) ::std::string(std::forward<T>(t)...);
3385     return value_.MyBinaryField;
3386   }
3387 
3388   ::std::string& set_MyBinaryField2(::std::string const &t) {
3389     __fbthrift_clear();
3390     type_ = Type::MyBinaryField2;
3391     ::new (std::addressof(value_.MyBinaryField2)) ::std::string(t);
3392     return value_.MyBinaryField2;
3393   }
3394 
3395   ::std::string& set_MyBinaryField2(::std::string&& t) {
3396     __fbthrift_clear();
3397     type_ = Type::MyBinaryField2;
3398     ::new (std::addressof(value_.MyBinaryField2)) ::std::string(std::move(t));
3399     return value_.MyBinaryField2;
3400   }
3401 
3402   template<typename... T, typename = ::apache::thrift::safe_overload_t<::std::string, T...>> ::std::string& set_MyBinaryField2(T&&... t) {
3403     __fbthrift_clear();
3404     type_ = Type::MyBinaryField2;
3405     ::new (std::addressof(value_.MyBinaryField2)) ::std::string(std::forward<T>(t)...);
3406     return value_.MyBinaryField2;
3407   }
3408 
3409   ::std::vector<::std::string>& set_MyBinaryListField4(::std::vector<::std::string> const &t) {
3410     __fbthrift_clear();
3411     type_ = Type::MyBinaryListField4;
3412     ::new (std::addressof(value_.MyBinaryListField4)) ::std::vector<::std::string>(t);
3413     return value_.MyBinaryListField4;
3414   }
3415 
3416   ::std::vector<::std::string>& set_MyBinaryListField4(::std::vector<::std::string>&& t) {
3417     __fbthrift_clear();
3418     type_ = Type::MyBinaryListField4;
3419     ::new (std::addressof(value_.MyBinaryListField4)) ::std::vector<::std::string>(std::move(t));
3420     return value_.MyBinaryListField4;
3421   }
3422 
3423   template<typename... T, typename = ::apache::thrift::safe_overload_t<::std::vector<::std::string>, T...>> ::std::vector<::std::string>& set_MyBinaryListField4(T&&... t) {
3424     __fbthrift_clear();
3425     type_ = Type::MyBinaryListField4;
3426     ::new (std::addressof(value_.MyBinaryListField4)) ::std::vector<::std::string>(std::forward<T>(t)...);
3427     return value_.MyBinaryListField4;
3428   }
3429   ::std::unique_ptr<::some::valid::ns::MyStruct>& set_ref_field(::some::valid::ns::MyStruct const &t);
3430   ::std::unique_ptr<::some::valid::ns::MyStruct>& set_ref_field(::some::valid::ns::MyStruct&& t);
3431   template<typename... T, typename = ::apache::thrift::safe_overload_t<::some::valid::ns::MyStruct, T...>> ::std::unique_ptr<::some::valid::ns::MyStruct>& set_ref_field(T&&... t) {
3432     // defer resolution of ref_ in case ref_::element_type would here be incomplete
3433     using ref_ = folly::conditional_t<(sizeof...(T) < size_t(-1)), ::std::unique_ptr<::some::valid::ns::MyStruct>, void>;
3434     __fbthrift_clear();
3435     type_ = Type::ref_field;
3436     ::new (std::addressof(value_.ref_field)) ref_(new typename ref_::element_type(std::forward<T>(t)...));
3437     return value_.ref_field;
3438   }
3439   ::std::shared_ptr<const ::some::valid::ns::MyStruct>& set_ref_field2(::some::valid::ns::MyStruct const &t);
3440   ::std::shared_ptr<const ::some::valid::ns::MyStruct>& set_ref_field2(::some::valid::ns::MyStruct&& t);
3441   template<typename... T, typename = ::apache::thrift::safe_overload_t<::some::valid::ns::MyStruct, T...>> ::std::shared_ptr<const ::some::valid::ns::MyStruct>& set_ref_field2(T&&... t) {
3442     // defer resolution of ref_ in case ref_::element_type would here be incomplete
3443     using ref_ = folly::conditional_t<(sizeof...(T) < size_t(-1)), ::std::shared_ptr<const ::some::valid::ns::MyStruct>, void>;
3444     __fbthrift_clear();
3445     type_ = Type::ref_field2;
3446     ::new (std::addressof(value_.ref_field2)) ref_(new typename ref_::element_type(std::forward<T>(t)...));
3447     return value_.ref_field2;
3448   }
3449 
3450   ::some::valid::ns::AnException& set_excp_field(::some::valid::ns::AnException const &t) {
3451     __fbthrift_clear();
3452     type_ = Type::excp_field;
3453     ::new (std::addressof(value_.excp_field)) ::some::valid::ns::AnException(t);
3454     return value_.excp_field;
3455   }
3456 
3457   ::some::valid::ns::AnException& set_excp_field(::some::valid::ns::AnException&& t) {
3458     __fbthrift_clear();
3459     type_ = Type::excp_field;
3460     ::new (std::addressof(value_.excp_field)) ::some::valid::ns::AnException(std::move(t));
3461     return value_.excp_field;
3462   }
3463 
3464   template<typename... T, typename = ::apache::thrift::safe_overload_t<::some::valid::ns::AnException, T...>> ::some::valid::ns::AnException& set_excp_field(T&&... t) {
3465     __fbthrift_clear();
3466     type_ = Type::excp_field;
3467     ::new (std::addressof(value_.excp_field)) ::some::valid::ns::AnException(std::forward<T>(t)...);
3468     return value_.excp_field;
3469   }
3470 
3471   ::some::valid::ns::CustomProtocolType& set_MyCustomField(::some::valid::ns::CustomProtocolType const &t) {
3472     __fbthrift_clear();
3473     type_ = Type::MyCustomField;
3474     ::new (std::addressof(value_.MyCustomField)) ::some::valid::ns::CustomProtocolType(t);
3475     return value_.MyCustomField;
3476   }
3477 
3478   ::some::valid::ns::CustomProtocolType& set_MyCustomField(::some::valid::ns::CustomProtocolType&& t) {
3479     __fbthrift_clear();
3480     type_ = Type::MyCustomField;
3481     ::new (std::addressof(value_.MyCustomField)) ::some::valid::ns::CustomProtocolType(std::move(t));
3482     return value_.MyCustomField;
3483   }
3484 
3485   template<typename... T, typename = ::apache::thrift::safe_overload_t<::some::valid::ns::CustomProtocolType, T...>> ::some::valid::ns::CustomProtocolType& set_MyCustomField(T&&... t) {
3486     __fbthrift_clear();
3487     type_ = Type::MyCustomField;
3488     ::new (std::addressof(value_.MyCustomField)) ::some::valid::ns::CustomProtocolType(std::forward<T>(t)...);
3489     return value_.MyCustomField;
3490   }
3491 
3492   ::std::int64_t const& get_intValue() const {
3493     if (type_ != Type::intValue) {
3494       ::apache::thrift::detail::throw_on_bad_field_access();
3495     }
3496     return value_.intValue;
3497   }
3498 
3499   ::std::int64_t const& get_opt_intValue() const {
3500     if (type_ != Type::opt_intValue) {
3501       ::apache::thrift::detail::throw_on_bad_field_access();
3502     }
3503     return value_.opt_intValue;
3504   }
3505 
3506   ::std::string const& get_stringValue() const {
3507     if (type_ != Type::stringValue) {
3508       ::apache::thrift::detail::throw_on_bad_field_access();
3509     }
3510     return value_.stringValue;
3511   }
3512 
3513   ::std::string const& get_opt_stringValue() const {
3514     if (type_ != Type::opt_stringValue) {
3515       ::apache::thrift::detail::throw_on_bad_field_access();
3516     }
3517     return value_.opt_stringValue;
3518   }
3519 
3520   ::std::int16_t const& get_intValue2() const {
3521     if (type_ != Type::intValue2) {
3522       ::apache::thrift::detail::throw_on_bad_field_access();
3523     }
3524     return value_.intValue2;
3525   }
3526 
3527   ::std::int32_t const& get_intValue3() const {
3528     if (type_ != Type::intValue3) {
3529       ::apache::thrift::detail::throw_on_bad_field_access();
3530     }
3531     return value_.intValue3;
3532   }
3533 
3534   double const& get_doubelValue() const {
3535     if (type_ != Type::doubelValue) {
3536       ::apache::thrift::detail::throw_on_bad_field_access();
3537     }
3538     return value_.doubelValue;
3539   }
3540 
3541   bool const& get_boolValue() const {
3542     if (type_ != Type::boolValue) {
3543       ::apache::thrift::detail::throw_on_bad_field_access();
3544     }
3545     return value_.boolValue;
3546   }
3547 
3548   ::std::vector<::std::int32_t> const& get_union_list() const {
3549     if (type_ != Type::union_list) {
3550       ::apache::thrift::detail::throw_on_bad_field_access();
3551     }
3552     return value_.union_list;
3553   }
3554 
3555   ::std::set<::std::int64_t> const& get_union_set() const {
3556     if (type_ != Type::union_set) {
3557       ::apache::thrift::detail::throw_on_bad_field_access();
3558     }
3559     return value_.union_set;
3560   }
3561 
3562   ::std::map<::std::string, ::std::int32_t> const& get_union_map() const {
3563     if (type_ != Type::union_map) {
3564       ::apache::thrift::detail::throw_on_bad_field_access();
3565     }
3566     return value_.union_map;
3567   }
3568 
3569   ::std::map<::std::string, ::std::int32_t> const& get_opt_union_map() const {
3570     if (type_ != Type::opt_union_map) {
3571       ::apache::thrift::detail::throw_on_bad_field_access();
3572     }
3573     return value_.opt_union_map;
3574   }
3575 
3576   ::some::valid::ns::MyEnumA const& get_enum_field() const {
3577     if (type_ != Type::enum_field) {
3578       ::apache::thrift::detail::throw_on_bad_field_access();
3579     }
3580     return value_.enum_field;
3581   }
3582 
3583   ::std::vector<::some::valid::ns::MyEnumA> const& get_enum_container() const {
3584     if (type_ != Type::enum_container) {
3585       ::apache::thrift::detail::throw_on_bad_field_access();
3586     }
3587     return value_.enum_container;
3588   }
3589 
3590   ::some::valid::ns::MyStruct const& get_a_struct() const {
3591     if (type_ != Type::a_struct) {
3592       ::apache::thrift::detail::throw_on_bad_field_access();
3593     }
3594     return value_.a_struct;
3595   }
3596 
3597   ::std::set<::some::valid::ns::MyStruct> const& get_a_set_struct() const {
3598     if (type_ != Type::a_set_struct) {
3599       ::apache::thrift::detail::throw_on_bad_field_access();
3600     }
3601     return value_.a_set_struct;
3602   }
3603 
3604   ::some::valid::ns::SimpleUnion const& get_a_union() const {
3605     if (type_ != Type::a_union) {
3606       ::apache::thrift::detail::throw_on_bad_field_access();
3607     }
3608     return value_.a_union;
3609   }
3610 
3611   ::some::valid::ns::SimpleUnion const& get_opt_a_union() const {
3612     if (type_ != Type::opt_a_union) {
3613       ::apache::thrift::detail::throw_on_bad_field_access();
3614     }
3615     return value_.opt_a_union;
3616   }
3617 
3618   ::std::vector<::some::valid::ns::SimpleUnion> const& get_a_union_list() const {
3619     if (type_ != Type::a_union_list) {
3620       ::apache::thrift::detail::throw_on_bad_field_access();
3621     }
3622     return value_.a_union_list;
3623   }
3624 
3625   ::some::valid::ns::unionTypeDef const& get_a_union_typedef() const {
3626     if (type_ != Type::a_union_typedef) {
3627       ::apache::thrift::detail::throw_on_bad_field_access();
3628     }
3629     return value_.a_union_typedef;
3630   }
3631 
3632   ::std::vector<::some::valid::ns::unionTypeDef> const& get_a_union_typedef_list() const {
3633     if (type_ != Type::a_union_typedef_list) {
3634       ::apache::thrift::detail::throw_on_bad_field_access();
3635     }
3636     return value_.a_union_typedef_list;
3637   }
3638 
3639   ::std::string const& get_MyBinaryField() const {
3640     if (type_ != Type::MyBinaryField) {
3641       ::apache::thrift::detail::throw_on_bad_field_access();
3642     }
3643     return value_.MyBinaryField;
3644   }
3645 
3646   ::std::string const& get_MyBinaryField2() const {
3647     if (type_ != Type::MyBinaryField2) {
3648       ::apache::thrift::detail::throw_on_bad_field_access();
3649     }
3650     return value_.MyBinaryField2;
3651   }
3652 
3653   ::std::vector<::std::string> const& get_MyBinaryListField4() const {
3654     if (type_ != Type::MyBinaryListField4) {
3655       ::apache::thrift::detail::throw_on_bad_field_access();
3656     }
3657     return value_.MyBinaryListField4;
3658   }
3659 
3660   ::std::unique_ptr<::some::valid::ns::MyStruct> const& get_ref_field() const {
3661     if (type_ != Type::ref_field) {
3662       ::apache::thrift::detail::throw_on_bad_field_access();
3663     }
3664     return value_.ref_field;
3665   }
3666 
3667   ::std::shared_ptr<const ::some::valid::ns::MyStruct> const& get_ref_field2() const {
3668     if (type_ != Type::ref_field2) {
3669       ::apache::thrift::detail::throw_on_bad_field_access();
3670     }
3671     return value_.ref_field2;
3672   }
3673 
3674   ::some::valid::ns::AnException const& get_excp_field() const {
3675     if (type_ != Type::excp_field) {
3676       ::apache::thrift::detail::throw_on_bad_field_access();
3677     }
3678     return value_.excp_field;
3679   }
3680 
3681   ::some::valid::ns::CustomProtocolType const& get_MyCustomField() const {
3682     if (type_ != Type::MyCustomField) {
3683       ::apache::thrift::detail::throw_on_bad_field_access();
3684     }
3685     return value_.MyCustomField;
3686   }
3687 
3688   ::std::int64_t& mutable_intValue() {
3689     assert(type_ == Type::intValue);
3690     return value_.intValue;
3691   }
3692 
3693   ::std::int64_t& mutable_opt_intValue() {
3694     assert(type_ == Type::opt_intValue);
3695     return value_.opt_intValue;
3696   }
3697 
3698   ::std::string& mutable_stringValue() {
3699     assert(type_ == Type::stringValue);
3700     return value_.stringValue;
3701   }
3702 
3703   ::std::string& mutable_opt_stringValue() {
3704     assert(type_ == Type::opt_stringValue);
3705     return value_.opt_stringValue;
3706   }
3707 
3708   ::std::int16_t& mutable_intValue2() {
3709     assert(type_ == Type::intValue2);
3710     return value_.intValue2;
3711   }
3712 
3713   ::std::int32_t& mutable_intValue3() {
3714     assert(type_ == Type::intValue3);
3715     return value_.intValue3;
3716   }
3717 
3718   double& mutable_doubelValue() {
3719     assert(type_ == Type::doubelValue);
3720     return value_.doubelValue;
3721   }
3722 
3723   bool& mutable_boolValue() {
3724     assert(type_ == Type::boolValue);
3725     return value_.boolValue;
3726   }
3727 
3728   ::std::vector<::std::int32_t>& mutable_union_list() {
3729     assert(type_ == Type::union_list);
3730     return value_.union_list;
3731   }
3732 
3733   ::std::set<::std::int64_t>& mutable_union_set() {
3734     assert(type_ == Type::union_set);
3735     return value_.union_set;
3736   }
3737 
3738   ::std::map<::std::string, ::std::int32_t>& mutable_union_map() {
3739     assert(type_ == Type::union_map);
3740     return value_.union_map;
3741   }
3742 
3743   ::std::map<::std::string, ::std::int32_t>& mutable_opt_union_map() {
3744     assert(type_ == Type::opt_union_map);
3745     return value_.opt_union_map;
3746   }
3747 
3748   ::some::valid::ns::MyEnumA& mutable_enum_field() {
3749     assert(type_ == Type::enum_field);
3750     return value_.enum_field;
3751   }
3752 
3753   ::std::vector<::some::valid::ns::MyEnumA>& mutable_enum_container() {
3754     assert(type_ == Type::enum_container);
3755     return value_.enum_container;
3756   }
3757 
3758   ::some::valid::ns::MyStruct& mutable_a_struct() {
3759     assert(type_ == Type::a_struct);
3760     return value_.a_struct;
3761   }
3762 
3763   ::std::set<::some::valid::ns::MyStruct>& mutable_a_set_struct() {
3764     assert(type_ == Type::a_set_struct);
3765     return value_.a_set_struct;
3766   }
3767 
3768   ::some::valid::ns::SimpleUnion& mutable_a_union() {
3769     assert(type_ == Type::a_union);
3770     return value_.a_union;
3771   }
3772 
3773   ::some::valid::ns::SimpleUnion& mutable_opt_a_union() {
3774     assert(type_ == Type::opt_a_union);
3775     return value_.opt_a_union;
3776   }
3777 
3778   ::std::vector<::some::valid::ns::SimpleUnion>& mutable_a_union_list() {
3779     assert(type_ == Type::a_union_list);
3780     return value_.a_union_list;
3781   }
3782 
3783   ::some::valid::ns::unionTypeDef& mutable_a_union_typedef() {
3784     assert(type_ == Type::a_union_typedef);
3785     return value_.a_union_typedef;
3786   }
3787 
3788   ::std::vector<::some::valid::ns::unionTypeDef>& mutable_a_union_typedef_list() {
3789     assert(type_ == Type::a_union_typedef_list);
3790     return value_.a_union_typedef_list;
3791   }
3792 
3793   ::std::string& mutable_MyBinaryField() {
3794     assert(type_ == Type::MyBinaryField);
3795     return value_.MyBinaryField;
3796   }
3797 
3798   ::std::string& mutable_MyBinaryField2() {
3799     assert(type_ == Type::MyBinaryField2);
3800     return value_.MyBinaryField2;
3801   }
3802 
3803   ::std::vector<::std::string>& mutable_MyBinaryListField4() {
3804     assert(type_ == Type::MyBinaryListField4);
3805     return value_.MyBinaryListField4;
3806   }
3807 
3808   ::std::unique_ptr<::some::valid::ns::MyStruct>& mutable_ref_field() {
3809     assert(type_ == Type::ref_field);
3810     return value_.ref_field;
3811   }
3812 
3813   ::std::shared_ptr<const ::some::valid::ns::MyStruct>& mutable_ref_field2() {
3814     assert(type_ == Type::ref_field2);
3815     return value_.ref_field2;
3816   }
3817 
3818   ::some::valid::ns::AnException& mutable_excp_field() {
3819     assert(type_ == Type::excp_field);
3820     return value_.excp_field;
3821   }
3822 
3823   ::some::valid::ns::CustomProtocolType& mutable_MyCustomField() {
3824     assert(type_ == Type::MyCustomField);
3825     return value_.MyCustomField;
3826   }
3827 
3828   ::std::int64_t move_intValue() {
3829     assert(type_ == Type::intValue);
3830     return std::move(value_.intValue);
3831   }
3832 
3833   ::std::int64_t move_opt_intValue() {
3834     assert(type_ == Type::opt_intValue);
3835     return std::move(value_.opt_intValue);
3836   }
3837 
3838   ::std::string move_stringValue() {
3839     assert(type_ == Type::stringValue);
3840     return std::move(value_.stringValue);
3841   }
3842 
3843   ::std::string move_opt_stringValue() {
3844     assert(type_ == Type::opt_stringValue);
3845     return std::move(value_.opt_stringValue);
3846   }
3847 
3848   ::std::int16_t move_intValue2() {
3849     assert(type_ == Type::intValue2);
3850     return std::move(value_.intValue2);
3851   }
3852 
3853   ::std::int32_t move_intValue3() {
3854     assert(type_ == Type::intValue3);
3855     return std::move(value_.intValue3);
3856   }
3857 
3858   double move_doubelValue() {
3859     assert(type_ == Type::doubelValue);
3860     return std::move(value_.doubelValue);
3861   }
3862 
3863   bool move_boolValue() {
3864     assert(type_ == Type::boolValue);
3865     return std::move(value_.boolValue);
3866   }
3867 
3868   ::std::vector<::std::int32_t> move_union_list() {
3869     assert(type_ == Type::union_list);
3870     return std::move(value_.union_list);
3871   }
3872 
3873   ::std::set<::std::int64_t> move_union_set() {
3874     assert(type_ == Type::union_set);
3875     return std::move(value_.union_set);
3876   }
3877 
3878   ::std::map<::std::string, ::std::int32_t> move_union_map() {
3879     assert(type_ == Type::union_map);
3880     return std::move(value_.union_map);
3881   }
3882 
3883   ::std::map<::std::string, ::std::int32_t> move_opt_union_map() {
3884     assert(type_ == Type::opt_union_map);
3885     return std::move(value_.opt_union_map);
3886   }
3887 
3888   ::some::valid::ns::MyEnumA move_enum_field() {
3889     assert(type_ == Type::enum_field);
3890     return std::move(value_.enum_field);
3891   }
3892 
3893   ::std::vector<::some::valid::ns::MyEnumA> move_enum_container() {
3894     assert(type_ == Type::enum_container);
3895     return std::move(value_.enum_container);
3896   }
3897 
3898   ::some::valid::ns::MyStruct move_a_struct() {
3899     assert(type_ == Type::a_struct);
3900     return std::move(value_.a_struct);
3901   }
3902 
3903   ::std::set<::some::valid::ns::MyStruct> move_a_set_struct() {
3904     assert(type_ == Type::a_set_struct);
3905     return std::move(value_.a_set_struct);
3906   }
3907 
3908   ::some::valid::ns::SimpleUnion move_a_union() {
3909     assert(type_ == Type::a_union);
3910     return std::move(value_.a_union);
3911   }
3912 
3913   ::some::valid::ns::SimpleUnion move_opt_a_union() {
3914     assert(type_ == Type::opt_a_union);
3915     return std::move(value_.opt_a_union);
3916   }
3917 
3918   ::std::vector<::some::valid::ns::SimpleUnion> move_a_union_list() {
3919     assert(type_ == Type::a_union_list);
3920     return std::move(value_.a_union_list);
3921   }
3922 
3923   ::some::valid::ns::unionTypeDef move_a_union_typedef() {
3924     assert(type_ == Type::a_union_typedef);
3925     return std::move(value_.a_union_typedef);
3926   }
3927 
3928   ::std::vector<::some::valid::ns::unionTypeDef> move_a_union_typedef_list() {
3929     assert(type_ == Type::a_union_typedef_list);
3930     return std::move(value_.a_union_typedef_list);
3931   }
3932 
3933   ::std::string move_MyBinaryField() {
3934     assert(type_ == Type::MyBinaryField);
3935     return std::move(value_.MyBinaryField);
3936   }
3937 
3938   ::std::string move_MyBinaryField2() {
3939     assert(type_ == Type::MyBinaryField2);
3940     return std::move(value_.MyBinaryField2);
3941   }
3942 
3943   ::std::vector<::std::string> move_MyBinaryListField4() {
3944     assert(type_ == Type::MyBinaryListField4);
3945     return std::move(value_.MyBinaryListField4);
3946   }
3947 
3948   ::std::unique_ptr<::some::valid::ns::MyStruct> move_ref_field() {
3949     assert(type_ == Type::ref_field);
3950     return std::move(value_.ref_field);
3951   }
3952 
3953   ::std::shared_ptr<const ::some::valid::ns::MyStruct> move_ref_field2() {
3954     assert(type_ == Type::ref_field2);
3955     return std::move(value_.ref_field2);
3956   }
3957 
3958   ::some::valid::ns::AnException move_excp_field() {
3959     assert(type_ == Type::excp_field);
3960     return std::move(value_.excp_field);
3961   }
3962 
3963   ::some::valid::ns::CustomProtocolType move_MyCustomField() {
3964     assert(type_ == Type::MyCustomField);
3965     return std::move(value_.MyCustomField);
3966   }
3967 
3968   template <typename..., typename T = ::std::int64_t>
3969   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> intValue_ref() const& {
3970     return {value_.intValue, type_, intValue, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
3971   }
3972 
3973   template <typename..., typename T = ::std::int64_t>
3974   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> intValue_ref() const&& {
3975     return {std::move(value_.intValue), type_, intValue, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
3976   }
3977 
3978   template <typename..., typename T = ::std::int64_t>
3979   FOLLY_ERASE ::apache::thrift::union_field_ref<T&> intValue_ref() & {
3980     return {value_.intValue, type_, intValue, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
3981   }
3982 
3983   template <typename..., typename T = ::std::int64_t>
3984   FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> intValue_ref() && {
3985     return {std::move(value_.intValue), type_, intValue, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
3986   }
3987   template <typename..., typename T = ::std::int64_t>
3988   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> opt_intValue_ref() const& {
3989     return {value_.opt_intValue, type_, opt_intValue, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
3990   }
3991 
3992   template <typename..., typename T = ::std::int64_t>
3993   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> opt_intValue_ref() const&& {
3994     return {std::move(value_.opt_intValue), type_, opt_intValue, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
3995   }
3996 
3997   template <typename..., typename T = ::std::int64_t>
3998   FOLLY_ERASE ::apache::thrift::union_field_ref<T&> opt_intValue_ref() & {
3999     return {value_.opt_intValue, type_, opt_intValue, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4000   }
4001 
4002   template <typename..., typename T = ::std::int64_t>
4003   FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> opt_intValue_ref() && {
4004     return {std::move(value_.opt_intValue), type_, opt_intValue, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4005   }
4006   template <typename..., typename T = ::std::string>
4007   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> stringValue_ref() const& {
4008     return {value_.stringValue, type_, stringValue, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4009   }
4010 
4011   template <typename..., typename T = ::std::string>
4012   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> stringValue_ref() const&& {
4013     return {std::move(value_.stringValue), type_, stringValue, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4014   }
4015 
4016   template <typename..., typename T = ::std::string>
4017   FOLLY_ERASE ::apache::thrift::union_field_ref<T&> stringValue_ref() & {
4018     return {value_.stringValue, type_, stringValue, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4019   }
4020 
4021   template <typename..., typename T = ::std::string>
4022   FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> stringValue_ref() && {
4023     return {std::move(value_.stringValue), type_, stringValue, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4024   }
4025   template <typename..., typename T = ::std::string>
4026   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> opt_stringValue_ref() const& {
4027     return {value_.opt_stringValue, type_, opt_stringValue, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4028   }
4029 
4030   template <typename..., typename T = ::std::string>
4031   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> opt_stringValue_ref() const&& {
4032     return {std::move(value_.opt_stringValue), type_, opt_stringValue, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4033   }
4034 
4035   template <typename..., typename T = ::std::string>
4036   FOLLY_ERASE ::apache::thrift::union_field_ref<T&> opt_stringValue_ref() & {
4037     return {value_.opt_stringValue, type_, opt_stringValue, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4038   }
4039 
4040   template <typename..., typename T = ::std::string>
4041   FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> opt_stringValue_ref() && {
4042     return {std::move(value_.opt_stringValue), type_, opt_stringValue, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4043   }
4044   template <typename..., typename T = ::std::int16_t>
4045   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> intValue2_ref() const& {
4046     return {value_.intValue2, type_, intValue2, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4047   }
4048 
4049   template <typename..., typename T = ::std::int16_t>
4050   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> intValue2_ref() const&& {
4051     return {std::move(value_.intValue2), type_, intValue2, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4052   }
4053 
4054   template <typename..., typename T = ::std::int16_t>
4055   FOLLY_ERASE ::apache::thrift::union_field_ref<T&> intValue2_ref() & {
4056     return {value_.intValue2, type_, intValue2, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4057   }
4058 
4059   template <typename..., typename T = ::std::int16_t>
4060   FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> intValue2_ref() && {
4061     return {std::move(value_.intValue2), type_, intValue2, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4062   }
4063   template <typename..., typename T = ::std::int32_t>
4064   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> intValue3_ref() const& {
4065     return {value_.intValue3, type_, intValue3, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4066   }
4067 
4068   template <typename..., typename T = ::std::int32_t>
4069   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> intValue3_ref() const&& {
4070     return {std::move(value_.intValue3), type_, intValue3, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4071   }
4072 
4073   template <typename..., typename T = ::std::int32_t>
4074   FOLLY_ERASE ::apache::thrift::union_field_ref<T&> intValue3_ref() & {
4075     return {value_.intValue3, type_, intValue3, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4076   }
4077 
4078   template <typename..., typename T = ::std::int32_t>
4079   FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> intValue3_ref() && {
4080     return {std::move(value_.intValue3), type_, intValue3, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4081   }
4082   template <typename..., typename T = double>
4083   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> doubelValue_ref() const& {
4084     return {value_.doubelValue, type_, doubelValue, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4085   }
4086 
4087   template <typename..., typename T = double>
4088   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> doubelValue_ref() const&& {
4089     return {std::move(value_.doubelValue), type_, doubelValue, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4090   }
4091 
4092   template <typename..., typename T = double>
4093   FOLLY_ERASE ::apache::thrift::union_field_ref<T&> doubelValue_ref() & {
4094     return {value_.doubelValue, type_, doubelValue, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4095   }
4096 
4097   template <typename..., typename T = double>
4098   FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> doubelValue_ref() && {
4099     return {std::move(value_.doubelValue), type_, doubelValue, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4100   }
4101   template <typename..., typename T = bool>
4102   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> boolValue_ref() const& {
4103     return {value_.boolValue, type_, boolValue, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4104   }
4105 
4106   template <typename..., typename T = bool>
4107   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> boolValue_ref() const&& {
4108     return {std::move(value_.boolValue), type_, boolValue, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4109   }
4110 
4111   template <typename..., typename T = bool>
4112   FOLLY_ERASE ::apache::thrift::union_field_ref<T&> boolValue_ref() & {
4113     return {value_.boolValue, type_, boolValue, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4114   }
4115 
4116   template <typename..., typename T = bool>
4117   FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> boolValue_ref() && {
4118     return {std::move(value_.boolValue), type_, boolValue, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4119   }
4120   template <typename..., typename T = ::std::vector<::std::int32_t>>
4121   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> union_list_ref() const& {
4122     return {value_.union_list, type_, union_list, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4123   }
4124 
4125   template <typename..., typename T = ::std::vector<::std::int32_t>>
4126   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> union_list_ref() const&& {
4127     return {std::move(value_.union_list), type_, union_list, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4128   }
4129 
4130   template <typename..., typename T = ::std::vector<::std::int32_t>>
4131   FOLLY_ERASE ::apache::thrift::union_field_ref<T&> union_list_ref() & {
4132     return {value_.union_list, type_, union_list, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4133   }
4134 
4135   template <typename..., typename T = ::std::vector<::std::int32_t>>
4136   FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> union_list_ref() && {
4137     return {std::move(value_.union_list), type_, union_list, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4138   }
4139   template <typename..., typename T = ::std::set<::std::int64_t>>
4140   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> union_set_ref() const& {
4141     return {value_.union_set, type_, union_set, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4142   }
4143 
4144   template <typename..., typename T = ::std::set<::std::int64_t>>
4145   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> union_set_ref() const&& {
4146     return {std::move(value_.union_set), type_, union_set, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4147   }
4148 
4149   template <typename..., typename T = ::std::set<::std::int64_t>>
4150   FOLLY_ERASE ::apache::thrift::union_field_ref<T&> union_set_ref() & {
4151     return {value_.union_set, type_, union_set, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4152   }
4153 
4154   template <typename..., typename T = ::std::set<::std::int64_t>>
4155   FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> union_set_ref() && {
4156     return {std::move(value_.union_set), type_, union_set, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4157   }
4158   template <typename..., typename T = ::std::map<::std::string, ::std::int32_t>>
4159   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> union_map_ref() const& {
4160     return {value_.union_map, type_, union_map, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4161   }
4162 
4163   template <typename..., typename T = ::std::map<::std::string, ::std::int32_t>>
4164   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> union_map_ref() const&& {
4165     return {std::move(value_.union_map), type_, union_map, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4166   }
4167 
4168   template <typename..., typename T = ::std::map<::std::string, ::std::int32_t>>
4169   FOLLY_ERASE ::apache::thrift::union_field_ref<T&> union_map_ref() & {
4170     return {value_.union_map, type_, union_map, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4171   }
4172 
4173   template <typename..., typename T = ::std::map<::std::string, ::std::int32_t>>
4174   FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> union_map_ref() && {
4175     return {std::move(value_.union_map), type_, union_map, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4176   }
4177   template <typename..., typename T = ::std::map<::std::string, ::std::int32_t>>
4178   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> opt_union_map_ref() const& {
4179     return {value_.opt_union_map, type_, opt_union_map, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4180   }
4181 
4182   template <typename..., typename T = ::std::map<::std::string, ::std::int32_t>>
4183   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> opt_union_map_ref() const&& {
4184     return {std::move(value_.opt_union_map), type_, opt_union_map, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4185   }
4186 
4187   template <typename..., typename T = ::std::map<::std::string, ::std::int32_t>>
4188   FOLLY_ERASE ::apache::thrift::union_field_ref<T&> opt_union_map_ref() & {
4189     return {value_.opt_union_map, type_, opt_union_map, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4190   }
4191 
4192   template <typename..., typename T = ::std::map<::std::string, ::std::int32_t>>
4193   FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> opt_union_map_ref() && {
4194     return {std::move(value_.opt_union_map), type_, opt_union_map, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4195   }
4196   template <typename..., typename T = ::some::valid::ns::MyEnumA>
4197   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> enum_field_ref() const& {
4198     return {value_.enum_field, type_, enum_field, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4199   }
4200 
4201   template <typename..., typename T = ::some::valid::ns::MyEnumA>
4202   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> enum_field_ref() const&& {
4203     return {std::move(value_.enum_field), type_, enum_field, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4204   }
4205 
4206   template <typename..., typename T = ::some::valid::ns::MyEnumA>
4207   FOLLY_ERASE ::apache::thrift::union_field_ref<T&> enum_field_ref() & {
4208     return {value_.enum_field, type_, enum_field, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4209   }
4210 
4211   template <typename..., typename T = ::some::valid::ns::MyEnumA>
4212   FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> enum_field_ref() && {
4213     return {std::move(value_.enum_field), type_, enum_field, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4214   }
4215   template <typename..., typename T = ::std::vector<::some::valid::ns::MyEnumA>>
4216   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> enum_container_ref() const& {
4217     return {value_.enum_container, type_, enum_container, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4218   }
4219 
4220   template <typename..., typename T = ::std::vector<::some::valid::ns::MyEnumA>>
4221   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> enum_container_ref() const&& {
4222     return {std::move(value_.enum_container), type_, enum_container, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4223   }
4224 
4225   template <typename..., typename T = ::std::vector<::some::valid::ns::MyEnumA>>
4226   FOLLY_ERASE ::apache::thrift::union_field_ref<T&> enum_container_ref() & {
4227     return {value_.enum_container, type_, enum_container, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4228   }
4229 
4230   template <typename..., typename T = ::std::vector<::some::valid::ns::MyEnumA>>
4231   FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> enum_container_ref() && {
4232     return {std::move(value_.enum_container), type_, enum_container, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4233   }
4234   template <typename..., typename T = ::some::valid::ns::MyStruct>
4235   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> a_struct_ref() const& {
4236     return {value_.a_struct, type_, a_struct, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4237   }
4238 
4239   template <typename..., typename T = ::some::valid::ns::MyStruct>
4240   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> a_struct_ref() const&& {
4241     return {std::move(value_.a_struct), type_, a_struct, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4242   }
4243 
4244   template <typename..., typename T = ::some::valid::ns::MyStruct>
4245   FOLLY_ERASE ::apache::thrift::union_field_ref<T&> a_struct_ref() & {
4246     return {value_.a_struct, type_, a_struct, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4247   }
4248 
4249   template <typename..., typename T = ::some::valid::ns::MyStruct>
4250   FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> a_struct_ref() && {
4251     return {std::move(value_.a_struct), type_, a_struct, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4252   }
4253   template <typename..., typename T = ::std::set<::some::valid::ns::MyStruct>>
4254   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> a_set_struct_ref() const& {
4255     return {value_.a_set_struct, type_, a_set_struct, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4256   }
4257 
4258   template <typename..., typename T = ::std::set<::some::valid::ns::MyStruct>>
4259   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> a_set_struct_ref() const&& {
4260     return {std::move(value_.a_set_struct), type_, a_set_struct, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4261   }
4262 
4263   template <typename..., typename T = ::std::set<::some::valid::ns::MyStruct>>
4264   FOLLY_ERASE ::apache::thrift::union_field_ref<T&> a_set_struct_ref() & {
4265     return {value_.a_set_struct, type_, a_set_struct, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4266   }
4267 
4268   template <typename..., typename T = ::std::set<::some::valid::ns::MyStruct>>
4269   FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> a_set_struct_ref() && {
4270     return {std::move(value_.a_set_struct), type_, a_set_struct, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4271   }
4272   template <typename..., typename T = ::some::valid::ns::SimpleUnion>
4273   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> a_union_ref() const& {
4274     return {value_.a_union, type_, a_union, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4275   }
4276 
4277   template <typename..., typename T = ::some::valid::ns::SimpleUnion>
4278   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> a_union_ref() const&& {
4279     return {std::move(value_.a_union), type_, a_union, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4280   }
4281 
4282   template <typename..., typename T = ::some::valid::ns::SimpleUnion>
4283   FOLLY_ERASE ::apache::thrift::union_field_ref<T&> a_union_ref() & {
4284     return {value_.a_union, type_, a_union, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4285   }
4286 
4287   template <typename..., typename T = ::some::valid::ns::SimpleUnion>
4288   FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> a_union_ref() && {
4289     return {std::move(value_.a_union), type_, a_union, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4290   }
4291   template <typename..., typename T = ::some::valid::ns::SimpleUnion>
4292   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> opt_a_union_ref() const& {
4293     return {value_.opt_a_union, type_, opt_a_union, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4294   }
4295 
4296   template <typename..., typename T = ::some::valid::ns::SimpleUnion>
4297   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> opt_a_union_ref() const&& {
4298     return {std::move(value_.opt_a_union), type_, opt_a_union, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4299   }
4300 
4301   template <typename..., typename T = ::some::valid::ns::SimpleUnion>
4302   FOLLY_ERASE ::apache::thrift::union_field_ref<T&> opt_a_union_ref() & {
4303     return {value_.opt_a_union, type_, opt_a_union, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4304   }
4305 
4306   template <typename..., typename T = ::some::valid::ns::SimpleUnion>
4307   FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> opt_a_union_ref() && {
4308     return {std::move(value_.opt_a_union), type_, opt_a_union, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4309   }
4310   template <typename..., typename T = ::std::vector<::some::valid::ns::SimpleUnion>>
4311   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> a_union_list_ref() const& {
4312     return {value_.a_union_list, type_, a_union_list, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4313   }
4314 
4315   template <typename..., typename T = ::std::vector<::some::valid::ns::SimpleUnion>>
4316   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> a_union_list_ref() const&& {
4317     return {std::move(value_.a_union_list), type_, a_union_list, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4318   }
4319 
4320   template <typename..., typename T = ::std::vector<::some::valid::ns::SimpleUnion>>
4321   FOLLY_ERASE ::apache::thrift::union_field_ref<T&> a_union_list_ref() & {
4322     return {value_.a_union_list, type_, a_union_list, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4323   }
4324 
4325   template <typename..., typename T = ::std::vector<::some::valid::ns::SimpleUnion>>
4326   FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> a_union_list_ref() && {
4327     return {std::move(value_.a_union_list), type_, a_union_list, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4328   }
4329   template <typename..., typename T = ::some::valid::ns::unionTypeDef>
4330   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> a_union_typedef_ref() const& {
4331     return {value_.a_union_typedef, type_, a_union_typedef, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4332   }
4333 
4334   template <typename..., typename T = ::some::valid::ns::unionTypeDef>
4335   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> a_union_typedef_ref() const&& {
4336     return {std::move(value_.a_union_typedef), type_, a_union_typedef, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4337   }
4338 
4339   template <typename..., typename T = ::some::valid::ns::unionTypeDef>
4340   FOLLY_ERASE ::apache::thrift::union_field_ref<T&> a_union_typedef_ref() & {
4341     return {value_.a_union_typedef, type_, a_union_typedef, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4342   }
4343 
4344   template <typename..., typename T = ::some::valid::ns::unionTypeDef>
4345   FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> a_union_typedef_ref() && {
4346     return {std::move(value_.a_union_typedef), type_, a_union_typedef, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4347   }
4348   template <typename..., typename T = ::std::vector<::some::valid::ns::unionTypeDef>>
4349   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> a_union_typedef_list_ref() const& {
4350     return {value_.a_union_typedef_list, type_, a_union_typedef_list, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4351   }
4352 
4353   template <typename..., typename T = ::std::vector<::some::valid::ns::unionTypeDef>>
4354   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> a_union_typedef_list_ref() const&& {
4355     return {std::move(value_.a_union_typedef_list), type_, a_union_typedef_list, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4356   }
4357 
4358   template <typename..., typename T = ::std::vector<::some::valid::ns::unionTypeDef>>
4359   FOLLY_ERASE ::apache::thrift::union_field_ref<T&> a_union_typedef_list_ref() & {
4360     return {value_.a_union_typedef_list, type_, a_union_typedef_list, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4361   }
4362 
4363   template <typename..., typename T = ::std::vector<::some::valid::ns::unionTypeDef>>
4364   FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> a_union_typedef_list_ref() && {
4365     return {std::move(value_.a_union_typedef_list), type_, a_union_typedef_list, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4366   }
4367   template <typename..., typename T = ::std::string>
4368   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> MyBinaryField_ref() const& {
4369     return {value_.MyBinaryField, type_, MyBinaryField, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4370   }
4371 
4372   template <typename..., typename T = ::std::string>
4373   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> MyBinaryField_ref() const&& {
4374     return {std::move(value_.MyBinaryField), type_, MyBinaryField, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4375   }
4376 
4377   template <typename..., typename T = ::std::string>
4378   FOLLY_ERASE ::apache::thrift::union_field_ref<T&> MyBinaryField_ref() & {
4379     return {value_.MyBinaryField, type_, MyBinaryField, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4380   }
4381 
4382   template <typename..., typename T = ::std::string>
4383   FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> MyBinaryField_ref() && {
4384     return {std::move(value_.MyBinaryField), type_, MyBinaryField, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4385   }
4386   template <typename..., typename T = ::std::string>
4387   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> MyBinaryField2_ref() const& {
4388     return {value_.MyBinaryField2, type_, MyBinaryField2, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4389   }
4390 
4391   template <typename..., typename T = ::std::string>
4392   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> MyBinaryField2_ref() const&& {
4393     return {std::move(value_.MyBinaryField2), type_, MyBinaryField2, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4394   }
4395 
4396   template <typename..., typename T = ::std::string>
4397   FOLLY_ERASE ::apache::thrift::union_field_ref<T&> MyBinaryField2_ref() & {
4398     return {value_.MyBinaryField2, type_, MyBinaryField2, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4399   }
4400 
4401   template <typename..., typename T = ::std::string>
4402   FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> MyBinaryField2_ref() && {
4403     return {std::move(value_.MyBinaryField2), type_, MyBinaryField2, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4404   }
4405   template <typename..., typename T = ::std::vector<::std::string>>
4406   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> MyBinaryListField4_ref() const& {
4407     return {value_.MyBinaryListField4, type_, MyBinaryListField4, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4408   }
4409 
4410   template <typename..., typename T = ::std::vector<::std::string>>
4411   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> MyBinaryListField4_ref() const&& {
4412     return {std::move(value_.MyBinaryListField4), type_, MyBinaryListField4, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4413   }
4414 
4415   template <typename..., typename T = ::std::vector<::std::string>>
4416   FOLLY_ERASE ::apache::thrift::union_field_ref<T&> MyBinaryListField4_ref() & {
4417     return {value_.MyBinaryListField4, type_, MyBinaryListField4, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4418   }
4419 
4420   template <typename..., typename T = ::std::vector<::std::string>>
4421   FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> MyBinaryListField4_ref() && {
4422     return {std::move(value_.MyBinaryListField4), type_, MyBinaryListField4, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4423   }
4424   template <typename..., typename T = ::std::unique_ptr<::some::valid::ns::MyStruct>>
4425   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> ref_field_ref() const& {
4426     return {value_.ref_field, type_, ref_field, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4427   }
4428 
4429   template <typename..., typename T = ::std::unique_ptr<::some::valid::ns::MyStruct>>
4430   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> ref_field_ref() const&& {
4431     return {std::move(value_.ref_field), type_, ref_field, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4432   }
4433 
4434   template <typename..., typename T = ::std::unique_ptr<::some::valid::ns::MyStruct>>
4435   FOLLY_ERASE ::apache::thrift::union_field_ref<T&> ref_field_ref() & {
4436     return {value_.ref_field, type_, ref_field, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4437   }
4438 
4439   template <typename..., typename T = ::std::unique_ptr<::some::valid::ns::MyStruct>>
4440   FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> ref_field_ref() && {
4441     return {std::move(value_.ref_field), type_, ref_field, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4442   }
4443   template <typename..., typename T = ::std::shared_ptr<const ::some::valid::ns::MyStruct>>
4444   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> ref_field2_ref() const& {
4445     return {value_.ref_field2, type_, ref_field2, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4446   }
4447 
4448   template <typename..., typename T = ::std::shared_ptr<const ::some::valid::ns::MyStruct>>
4449   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> ref_field2_ref() const&& {
4450     return {std::move(value_.ref_field2), type_, ref_field2, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4451   }
4452 
4453   template <typename..., typename T = ::std::shared_ptr<const ::some::valid::ns::MyStruct>>
4454   FOLLY_ERASE ::apache::thrift::union_field_ref<T&> ref_field2_ref() & {
4455     return {value_.ref_field2, type_, ref_field2, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4456   }
4457 
4458   template <typename..., typename T = ::std::shared_ptr<const ::some::valid::ns::MyStruct>>
4459   FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> ref_field2_ref() && {
4460     return {std::move(value_.ref_field2), type_, ref_field2, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4461   }
4462   template <typename..., typename T = ::some::valid::ns::AnException>
4463   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> excp_field_ref() const& {
4464     return {value_.excp_field, type_, excp_field, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4465   }
4466 
4467   template <typename..., typename T = ::some::valid::ns::AnException>
4468   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> excp_field_ref() const&& {
4469     return {std::move(value_.excp_field), type_, excp_field, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4470   }
4471 
4472   template <typename..., typename T = ::some::valid::ns::AnException>
4473   FOLLY_ERASE ::apache::thrift::union_field_ref<T&> excp_field_ref() & {
4474     return {value_.excp_field, type_, excp_field, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4475   }
4476 
4477   template <typename..., typename T = ::some::valid::ns::AnException>
4478   FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> excp_field_ref() && {
4479     return {std::move(value_.excp_field), type_, excp_field, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4480   }
4481   template <typename..., typename T = ::some::valid::ns::CustomProtocolType>
4482   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> MyCustomField_ref() const& {
4483     return {value_.MyCustomField, type_, MyCustomField, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4484   }
4485 
4486   template <typename..., typename T = ::some::valid::ns::CustomProtocolType>
4487   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> MyCustomField_ref() const&& {
4488     return {std::move(value_.MyCustomField), type_, MyCustomField, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4489   }
4490 
4491   template <typename..., typename T = ::some::valid::ns::CustomProtocolType>
4492   FOLLY_ERASE ::apache::thrift::union_field_ref<T&> MyCustomField_ref() & {
4493     return {value_.MyCustomField, type_, MyCustomField, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4494   }
4495 
4496   template <typename..., typename T = ::some::valid::ns::CustomProtocolType>
4497   FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> MyCustomField_ref() && {
4498     return {std::move(value_.MyCustomField), type_, MyCustomField, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
4499   }
4500   Type getType() const { return static_cast<Type>(type_); }
4501 
4502   template <class Protocol_>
4503   uint32_t read(Protocol_* iprot);
4504   template <class Protocol_>
4505   uint32_t serializedSize(Protocol_ const* prot_) const;
4506   template <class Protocol_>
4507   uint32_t serializedSizeZC(Protocol_ const* prot_) const;
4508   template <class Protocol_>
4509   uint32_t write(Protocol_* prot_) const;
4510  protected:
4511   template <class T>
4512   void destruct(T &val) {
4513     (&val)->~T();
4514   }
4515 
4516   storage_type value_;
4517   std::underlying_type_t<Type> type_;
4518   // user defined code (cpp2.methods = ...)
4519   void foo(const std::string& bar) {}
4520 
4521  private:
4522   template <class Protocol_>
4523   void readNoXfer(Protocol_* iprot);
4524 
4525   friend class ::apache::thrift::Cpp2Ops<ComplexUnion>;
4526   friend void swap(ComplexUnion& a, ComplexUnion& b);
4527 };
4528 
4529 template <class Protocol_>
4530 uint32_t ComplexUnion::read(Protocol_* iprot) {
4531   auto _xferStart = iprot->getCursorPosition();
4532   readNoXfer(iprot);
4533   return iprot->getCursorPosition() - _xferStart;
4534 }
4535 
4536 }}} // some::valid::ns
4537 namespace some { namespace valid { namespace ns {
4538 class FOLLY_EXPORT AnException : public apache::thrift::TException {
4539  private:
4540   friend struct ::apache::thrift::detail::st::struct_private_access;
4541 
4542   //  used by a static_assert in the corresponding source
4543   static constexpr bool __fbthrift_cpp2_gen_json = true;
4544   static constexpr bool __fbthrift_cpp2_gen_nimble = false;
4545   static constexpr bool __fbthrift_cpp2_gen_has_thrift_uri = false;
4546 
4547   void __fbthrift_clear();
4548   static constexpr ::apache::thrift::ExceptionKind __fbthrift_cpp2_gen_exception_kind =
4549          ::apache::thrift::ExceptionKind::UNSPECIFIED;
4550   static constexpr ::apache::thrift::ExceptionSafety __fbthrift_cpp2_gen_exception_safety =
4551          ::apache::thrift::ExceptionSafety::UNSPECIFIED;
4552   static constexpr ::apache::thrift::ExceptionBlame __fbthrift_cpp2_gen_exception_blame =
4553          ::apache::thrift::ExceptionBlame::UNSPECIFIED;
4554 
4555  public:
4556   using __fbthrift_cpp2_type = AnException;
4557   static constexpr bool __fbthrift_cpp2_is_union =
4558     false;
4559 
4560 
4561  public:
4562 
4563   AnException();
4564   explicit AnException(std::string __message);
4565 
4566   // FragileConstructor for use in initialization lists only.
4567   [[deprecated("This constructor is deprecated")]]
4568   AnException(apache::thrift::FragileConstructor, ::std::int32_t code__arg, ::std::int32_t req_code__arg, ::std::string message2__arg, ::std::string req_message__arg, ::std::vector<::std::int32_t> exception_list__arg, ::std::set<::std::int64_t> exception_set__arg, ::std::map<::std::string, ::std::int32_t> exception_map__arg, ::std::map<::std::string, ::std::int32_t> req_exception_map__arg, ::some::valid::ns::MyEnumA enum_field__arg, ::std::vector<::some::valid::ns::MyEnumA> enum_container__arg, ::some::valid::ns::MyStruct a_struct__arg, ::std::set<::some::valid::ns::MyStruct> a_set_struct__arg, ::std::vector<::some::valid::ns::SimpleUnion> a_union_list__arg, ::some::valid::ns::unionTypeDef union_typedef__arg, ::std::vector<::some::valid::ns::unionTypeDef> a_union_typedef_list__arg, ::some::valid::ns::CustomProtocolType MyCustomField__arg, ::some::valid::ns::CustomProtocolType MyOptCustomField__arg);
4569 
4570   AnException(AnException&&) noexcept;
4571   AnException(const AnException& src);
4572 
4573 
4574   AnException& operator=(AnException&&) noexcept;
4575   AnException& operator=(const AnException& src);
4576 
4577   ~AnException() override;
4578 
4579  private:
4580   ::std::int32_t code;
4581  public:
4582   ::std::int32_t req_code;
4583  private:
4584   ::std::string message2;
4585  public:
4586   ::std::string req_message;
4587  private:
4588   ::std::vector<::std::int32_t> exception_list;
4589  private:
4590   ::std::set<::std::int64_t> exception_set;
4591  private:
4592   ::std::map<::std::string, ::std::int32_t> exception_map;
4593  public:
4594   ::std::map<::std::string, ::std::int32_t> req_exception_map;
4595  private:
4596   ::some::valid::ns::MyEnumA enum_field;
4597  private:
4598   ::std::vector<::some::valid::ns::MyEnumA> enum_container;
4599  private:
4600   ::some::valid::ns::MyStruct a_struct;
4601  private:
4602   ::std::set<::some::valid::ns::MyStruct> a_set_struct;
4603  private:
4604   ::std::vector<::some::valid::ns::SimpleUnion> a_union_list;
4605  private:
4606   ::some::valid::ns::unionTypeDef union_typedef;
4607  private:
4608   ::std::vector<::some::valid::ns::unionTypeDef> a_union_typedef_list;
4609  private:
4610   ::some::valid::ns::CustomProtocolType MyCustomField;
4611  private:
4612   ::some::valid::ns::CustomProtocolType MyOptCustomField;
4613  private:
4614   apache::thrift::detail::isset_bitset<14, false> __isset;
4615 
4616  public:
4617 
4618   bool operator==(const AnException&) const;
4619   bool operator<(const AnException&) const;
4620 
4621   template <typename..., typename T = ::std::int32_t>
4622   FOLLY_ERASE ::apache::thrift::field_ref<const T&> code_ref() const& {
4623     return {this->code, __isset.at(0), __isset.bit(0)};
4624   }
4625 
4626   template <typename..., typename T = ::std::int32_t>
4627   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> code_ref() const&& {
4628     return {static_cast<const T&&>(this->code), __isset.at(0), __isset.bit(0)};
4629   }
4630 
4631   template <typename..., typename T = ::std::int32_t>
4632   FOLLY_ERASE ::apache::thrift::field_ref<T&> code_ref() & {
4633     return {this->code, __isset.at(0), __isset.bit(0)};
4634   }
4635 
4636   template <typename..., typename T = ::std::int32_t>
4637   FOLLY_ERASE ::apache::thrift::field_ref<T&&> code_ref() && {
4638     return {static_cast<T&&>(this->code), __isset.at(0), __isset.bit(0)};
4639   }
4640 
4641   template <typename..., typename T = ::std::int32_t>
4642   FOLLY_ERASE ::apache::thrift::required_field_ref<const T&> req_code_ref() const& {
4643     return ::apache::thrift::required_field_ref<const T&>{this->req_code};
4644   }
4645 
4646   template <typename..., typename T = ::std::int32_t>
4647   FOLLY_ERASE ::apache::thrift::required_field_ref<const T&&> req_code_ref() const&& {
4648     return ::apache::thrift::required_field_ref<const T&&>{static_cast<const T&&>(this->req_code)};
4649   }
4650 
4651   template <typename..., typename T = ::std::int32_t>
4652   FOLLY_ERASE ::apache::thrift::required_field_ref<T&> req_code_ref() & {
4653     return ::apache::thrift::required_field_ref<T&>{this->req_code};
4654   }
4655 
4656   template <typename..., typename T = ::std::int32_t>
4657   FOLLY_ERASE ::apache::thrift::required_field_ref<T&&> req_code_ref() && {
4658     return ::apache::thrift::required_field_ref<T&&>{static_cast<T&&>(this->req_code)};
4659   }
4660 
4661   template <typename..., typename T = ::std::string>
4662   FOLLY_ERASE ::apache::thrift::field_ref<const T&> message2_ref() const& {
4663     return {this->message2, __isset.at(1), __isset.bit(1)};
4664   }
4665 
4666   template <typename..., typename T = ::std::string>
4667   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> message2_ref() const&& {
4668     return {static_cast<const T&&>(this->message2), __isset.at(1), __isset.bit(1)};
4669   }
4670 
4671   template <typename..., typename T = ::std::string>
4672   FOLLY_ERASE ::apache::thrift::field_ref<T&> message2_ref() & {
4673     return {this->message2, __isset.at(1), __isset.bit(1)};
4674   }
4675 
4676   template <typename..., typename T = ::std::string>
4677   FOLLY_ERASE ::apache::thrift::field_ref<T&&> message2_ref() && {
4678     return {static_cast<T&&>(this->message2), __isset.at(1), __isset.bit(1)};
4679   }
4680 
4681   template <typename..., typename T = ::std::string>
4682   FOLLY_ERASE ::apache::thrift::required_field_ref<const T&> req_message_ref() const& {
4683     return ::apache::thrift::required_field_ref<const T&>{this->req_message};
4684   }
4685 
4686   template <typename..., typename T = ::std::string>
4687   FOLLY_ERASE ::apache::thrift::required_field_ref<const T&&> req_message_ref() const&& {
4688     return ::apache::thrift::required_field_ref<const T&&>{static_cast<const T&&>(this->req_message)};
4689   }
4690 
4691   template <typename..., typename T = ::std::string>
4692   FOLLY_ERASE ::apache::thrift::required_field_ref<T&> req_message_ref() & {
4693     return ::apache::thrift::required_field_ref<T&>{this->req_message};
4694   }
4695 
4696   template <typename..., typename T = ::std::string>
4697   FOLLY_ERASE ::apache::thrift::required_field_ref<T&&> req_message_ref() && {
4698     return ::apache::thrift::required_field_ref<T&&>{static_cast<T&&>(this->req_message)};
4699   }
4700 
4701   template <typename..., typename T = ::std::vector<::std::int32_t>>
4702   FOLLY_ERASE ::apache::thrift::field_ref<const T&> exception_list_ref() const& {
4703     return {this->exception_list, __isset.at(2), __isset.bit(2)};
4704   }
4705 
4706   template <typename..., typename T = ::std::vector<::std::int32_t>>
4707   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> exception_list_ref() const&& {
4708     return {static_cast<const T&&>(this->exception_list), __isset.at(2), __isset.bit(2)};
4709   }
4710 
4711   template <typename..., typename T = ::std::vector<::std::int32_t>>
4712   FOLLY_ERASE ::apache::thrift::field_ref<T&> exception_list_ref() & {
4713     return {this->exception_list, __isset.at(2), __isset.bit(2)};
4714   }
4715 
4716   template <typename..., typename T = ::std::vector<::std::int32_t>>
4717   FOLLY_ERASE ::apache::thrift::field_ref<T&&> exception_list_ref() && {
4718     return {static_cast<T&&>(this->exception_list), __isset.at(2), __isset.bit(2)};
4719   }
4720 
4721   template <typename..., typename T = ::std::set<::std::int64_t>>
4722   FOLLY_ERASE ::apache::thrift::field_ref<const T&> exception_set_ref() const& {
4723     return {this->exception_set, __isset.at(3), __isset.bit(3)};
4724   }
4725 
4726   template <typename..., typename T = ::std::set<::std::int64_t>>
4727   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> exception_set_ref() const&& {
4728     return {static_cast<const T&&>(this->exception_set), __isset.at(3), __isset.bit(3)};
4729   }
4730 
4731   template <typename..., typename T = ::std::set<::std::int64_t>>
4732   FOLLY_ERASE ::apache::thrift::field_ref<T&> exception_set_ref() & {
4733     return {this->exception_set, __isset.at(3), __isset.bit(3)};
4734   }
4735 
4736   template <typename..., typename T = ::std::set<::std::int64_t>>
4737   FOLLY_ERASE ::apache::thrift::field_ref<T&&> exception_set_ref() && {
4738     return {static_cast<T&&>(this->exception_set), __isset.at(3), __isset.bit(3)};
4739   }
4740 
4741   template <typename..., typename T = ::std::map<::std::string, ::std::int32_t>>
4742   FOLLY_ERASE ::apache::thrift::field_ref<const T&> exception_map_ref() const& {
4743     return {this->exception_map, __isset.at(4), __isset.bit(4)};
4744   }
4745 
4746   template <typename..., typename T = ::std::map<::std::string, ::std::int32_t>>
4747   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> exception_map_ref() const&& {
4748     return {static_cast<const T&&>(this->exception_map), __isset.at(4), __isset.bit(4)};
4749   }
4750 
4751   template <typename..., typename T = ::std::map<::std::string, ::std::int32_t>>
4752   FOLLY_ERASE ::apache::thrift::field_ref<T&> exception_map_ref() & {
4753     return {this->exception_map, __isset.at(4), __isset.bit(4)};
4754   }
4755 
4756   template <typename..., typename T = ::std::map<::std::string, ::std::int32_t>>
4757   FOLLY_ERASE ::apache::thrift::field_ref<T&&> exception_map_ref() && {
4758     return {static_cast<T&&>(this->exception_map), __isset.at(4), __isset.bit(4)};
4759   }
4760 
4761   template <typename..., typename T = ::std::map<::std::string, ::std::int32_t>>
4762   FOLLY_ERASE ::apache::thrift::required_field_ref<const T&> req_exception_map_ref() const& {
4763     return ::apache::thrift::required_field_ref<const T&>{this->req_exception_map};
4764   }
4765 
4766   template <typename..., typename T = ::std::map<::std::string, ::std::int32_t>>
4767   FOLLY_ERASE ::apache::thrift::required_field_ref<const T&&> req_exception_map_ref() const&& {
4768     return ::apache::thrift::required_field_ref<const T&&>{static_cast<const T&&>(this->req_exception_map)};
4769   }
4770 
4771   template <typename..., typename T = ::std::map<::std::string, ::std::int32_t>>
4772   FOLLY_ERASE ::apache::thrift::required_field_ref<T&> req_exception_map_ref() & {
4773     return ::apache::thrift::required_field_ref<T&>{this->req_exception_map};
4774   }
4775 
4776   template <typename..., typename T = ::std::map<::std::string, ::std::int32_t>>
4777   FOLLY_ERASE ::apache::thrift::required_field_ref<T&&> req_exception_map_ref() && {
4778     return ::apache::thrift::required_field_ref<T&&>{static_cast<T&&>(this->req_exception_map)};
4779   }
4780 
4781   template <typename..., typename T = ::some::valid::ns::MyEnumA>
4782   FOLLY_ERASE ::apache::thrift::field_ref<const T&> enum_field_ref() const& {
4783     return {this->enum_field, __isset.at(5), __isset.bit(5)};
4784   }
4785 
4786   template <typename..., typename T = ::some::valid::ns::MyEnumA>
4787   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> enum_field_ref() const&& {
4788     return {static_cast<const T&&>(this->enum_field), __isset.at(5), __isset.bit(5)};
4789   }
4790 
4791   template <typename..., typename T = ::some::valid::ns::MyEnumA>
4792   FOLLY_ERASE ::apache::thrift::field_ref<T&> enum_field_ref() & {
4793     return {this->enum_field, __isset.at(5), __isset.bit(5)};
4794   }
4795 
4796   template <typename..., typename T = ::some::valid::ns::MyEnumA>
4797   FOLLY_ERASE ::apache::thrift::field_ref<T&&> enum_field_ref() && {
4798     return {static_cast<T&&>(this->enum_field), __isset.at(5), __isset.bit(5)};
4799   }
4800 
4801   template <typename..., typename T = ::std::vector<::some::valid::ns::MyEnumA>>
4802   FOLLY_ERASE ::apache::thrift::field_ref<const T&> enum_container_ref() const& {
4803     return {this->enum_container, __isset.at(6), __isset.bit(6)};
4804   }
4805 
4806   template <typename..., typename T = ::std::vector<::some::valid::ns::MyEnumA>>
4807   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> enum_container_ref() const&& {
4808     return {static_cast<const T&&>(this->enum_container), __isset.at(6), __isset.bit(6)};
4809   }
4810 
4811   template <typename..., typename T = ::std::vector<::some::valid::ns::MyEnumA>>
4812   FOLLY_ERASE ::apache::thrift::field_ref<T&> enum_container_ref() & {
4813     return {this->enum_container, __isset.at(6), __isset.bit(6)};
4814   }
4815 
4816   template <typename..., typename T = ::std::vector<::some::valid::ns::MyEnumA>>
4817   FOLLY_ERASE ::apache::thrift::field_ref<T&&> enum_container_ref() && {
4818     return {static_cast<T&&>(this->enum_container), __isset.at(6), __isset.bit(6)};
4819   }
4820 
4821   template <typename..., typename T = ::some::valid::ns::MyStruct>
4822   FOLLY_ERASE ::apache::thrift::field_ref<const T&> a_struct_ref() const& {
4823     return {this->a_struct, __isset.at(7), __isset.bit(7)};
4824   }
4825 
4826   template <typename..., typename T = ::some::valid::ns::MyStruct>
4827   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> a_struct_ref() const&& {
4828     return {static_cast<const T&&>(this->a_struct), __isset.at(7), __isset.bit(7)};
4829   }
4830 
4831   template <typename..., typename T = ::some::valid::ns::MyStruct>
4832   FOLLY_ERASE ::apache::thrift::field_ref<T&> a_struct_ref() & {
4833     return {this->a_struct, __isset.at(7), __isset.bit(7)};
4834   }
4835 
4836   template <typename..., typename T = ::some::valid::ns::MyStruct>
4837   FOLLY_ERASE ::apache::thrift::field_ref<T&&> a_struct_ref() && {
4838     return {static_cast<T&&>(this->a_struct), __isset.at(7), __isset.bit(7)};
4839   }
4840 
4841   template <typename..., typename T = ::std::set<::some::valid::ns::MyStruct>>
4842   FOLLY_ERASE ::apache::thrift::field_ref<const T&> a_set_struct_ref() const& {
4843     return {this->a_set_struct, __isset.at(8), __isset.bit(8)};
4844   }
4845 
4846   template <typename..., typename T = ::std::set<::some::valid::ns::MyStruct>>
4847   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> a_set_struct_ref() const&& {
4848     return {static_cast<const T&&>(this->a_set_struct), __isset.at(8), __isset.bit(8)};
4849   }
4850 
4851   template <typename..., typename T = ::std::set<::some::valid::ns::MyStruct>>
4852   FOLLY_ERASE ::apache::thrift::field_ref<T&> a_set_struct_ref() & {
4853     return {this->a_set_struct, __isset.at(8), __isset.bit(8)};
4854   }
4855 
4856   template <typename..., typename T = ::std::set<::some::valid::ns::MyStruct>>
4857   FOLLY_ERASE ::apache::thrift::field_ref<T&&> a_set_struct_ref() && {
4858     return {static_cast<T&&>(this->a_set_struct), __isset.at(8), __isset.bit(8)};
4859   }
4860 
4861   template <typename..., typename T = ::std::vector<::some::valid::ns::SimpleUnion>>
4862   FOLLY_ERASE ::apache::thrift::field_ref<const T&> a_union_list_ref() const& {
4863     return {this->a_union_list, __isset.at(9), __isset.bit(9)};
4864   }
4865 
4866   template <typename..., typename T = ::std::vector<::some::valid::ns::SimpleUnion>>
4867   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> a_union_list_ref() const&& {
4868     return {static_cast<const T&&>(this->a_union_list), __isset.at(9), __isset.bit(9)};
4869   }
4870 
4871   template <typename..., typename T = ::std::vector<::some::valid::ns::SimpleUnion>>
4872   FOLLY_ERASE ::apache::thrift::field_ref<T&> a_union_list_ref() & {
4873     return {this->a_union_list, __isset.at(9), __isset.bit(9)};
4874   }
4875 
4876   template <typename..., typename T = ::std::vector<::some::valid::ns::SimpleUnion>>
4877   FOLLY_ERASE ::apache::thrift::field_ref<T&&> a_union_list_ref() && {
4878     return {static_cast<T&&>(this->a_union_list), __isset.at(9), __isset.bit(9)};
4879   }
4880 
4881   template <typename..., typename T = ::some::valid::ns::unionTypeDef>
4882   FOLLY_ERASE ::apache::thrift::field_ref<const T&> union_typedef_ref() const& {
4883     return {this->union_typedef, __isset.at(10), __isset.bit(10)};
4884   }
4885 
4886   template <typename..., typename T = ::some::valid::ns::unionTypeDef>
4887   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> union_typedef_ref() const&& {
4888     return {static_cast<const T&&>(this->union_typedef), __isset.at(10), __isset.bit(10)};
4889   }
4890 
4891   template <typename..., typename T = ::some::valid::ns::unionTypeDef>
4892   FOLLY_ERASE ::apache::thrift::field_ref<T&> union_typedef_ref() & {
4893     return {this->union_typedef, __isset.at(10), __isset.bit(10)};
4894   }
4895 
4896   template <typename..., typename T = ::some::valid::ns::unionTypeDef>
4897   FOLLY_ERASE ::apache::thrift::field_ref<T&&> union_typedef_ref() && {
4898     return {static_cast<T&&>(this->union_typedef), __isset.at(10), __isset.bit(10)};
4899   }
4900 
4901   template <typename..., typename T = ::std::vector<::some::valid::ns::unionTypeDef>>
4902   FOLLY_ERASE ::apache::thrift::field_ref<const T&> a_union_typedef_list_ref() const& {
4903     return {this->a_union_typedef_list, __isset.at(11), __isset.bit(11)};
4904   }
4905 
4906   template <typename..., typename T = ::std::vector<::some::valid::ns::unionTypeDef>>
4907   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> a_union_typedef_list_ref() const&& {
4908     return {static_cast<const T&&>(this->a_union_typedef_list), __isset.at(11), __isset.bit(11)};
4909   }
4910 
4911   template <typename..., typename T = ::std::vector<::some::valid::ns::unionTypeDef>>
4912   FOLLY_ERASE ::apache::thrift::field_ref<T&> a_union_typedef_list_ref() & {
4913     return {this->a_union_typedef_list, __isset.at(11), __isset.bit(11)};
4914   }
4915 
4916   template <typename..., typename T = ::std::vector<::some::valid::ns::unionTypeDef>>
4917   FOLLY_ERASE ::apache::thrift::field_ref<T&&> a_union_typedef_list_ref() && {
4918     return {static_cast<T&&>(this->a_union_typedef_list), __isset.at(11), __isset.bit(11)};
4919   }
4920 
4921   template <typename..., typename T = ::some::valid::ns::CustomProtocolType>
4922   FOLLY_ERASE ::apache::thrift::field_ref<const T&> MyCustomField_ref() const& {
4923     return {this->MyCustomField, __isset.at(12), __isset.bit(12)};
4924   }
4925 
4926   template <typename..., typename T = ::some::valid::ns::CustomProtocolType>
4927   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> MyCustomField_ref() const&& {
4928     return {static_cast<const T&&>(this->MyCustomField), __isset.at(12), __isset.bit(12)};
4929   }
4930 
4931   template <typename..., typename T = ::some::valid::ns::CustomProtocolType>
4932   FOLLY_ERASE ::apache::thrift::field_ref<T&> MyCustomField_ref() & {
4933     return {this->MyCustomField, __isset.at(12), __isset.bit(12)};
4934   }
4935 
4936   template <typename..., typename T = ::some::valid::ns::CustomProtocolType>
4937   FOLLY_ERASE ::apache::thrift::field_ref<T&&> MyCustomField_ref() && {
4938     return {static_cast<T&&>(this->MyCustomField), __isset.at(12), __isset.bit(12)};
4939   }
4940 
4941   template <typename..., typename T = ::some::valid::ns::CustomProtocolType>
4942   FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> MyOptCustomField_ref() const& {
4943     return {this->MyOptCustomField, __isset.at(13), __isset.bit(13)};
4944   }
4945 
4946   template <typename..., typename T = ::some::valid::ns::CustomProtocolType>
4947   FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> MyOptCustomField_ref() const&& {
4948     return {static_cast<const T&&>(this->MyOptCustomField), __isset.at(13), __isset.bit(13)};
4949   }
4950 
4951   template <typename..., typename T = ::some::valid::ns::CustomProtocolType>
4952   FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> MyOptCustomField_ref() & {
4953     return {this->MyOptCustomField, __isset.at(13), __isset.bit(13)};
4954   }
4955 
4956   template <typename..., typename T = ::some::valid::ns::CustomProtocolType>
4957   FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> MyOptCustomField_ref() && {
4958     return {static_cast<T&&>(this->MyOptCustomField), __isset.at(13), __isset.bit(13)};
4959   }
4960 
4961   ::std::int32_t get_code() const {
4962     return code;
4963   }
4964 
4965   [[deprecated("Use `FOO.code_ref() = BAR;` instead of `FOO.set_code(BAR);`")]]
4966   ::std::int32_t& set_code(::std::int32_t code_) {
4967     code_ref() = code_;
4968     return code;
4969   }
4970 
4971   ::std::int32_t get_req_code() const {
4972     return req_code;
4973   }
4974 
4975   [[deprecated("Use `FOO.req_code_ref() = BAR;` instead of `FOO.set_req_code(BAR);`")]]
4976   ::std::int32_t& set_req_code(::std::int32_t req_code_) {
4977     req_code_ref() = req_code_;
4978     return req_code;
4979   }
4980 
4981   const ::std::string& get_message2() const& {
4982     return message2;
4983   }
4984 
4985   ::std::string get_message2() && {
4986     return std::move(message2);
4987   }
4988 
4989   template <typename T_AnException_message2_struct_setter = ::std::string>
4990   [[deprecated("Use `FOO.message2_ref() = BAR;` instead of `FOO.set_message2(BAR);`")]]
4991   ::std::string& set_message2(T_AnException_message2_struct_setter&& message2_) {
4992     message2_ref() = std::forward<T_AnException_message2_struct_setter>(message2_);
4993     return message2;
4994   }
4995 
4996   const ::std::string& get_req_message() const& {
4997     return req_message;
4998   }
4999 
5000   ::std::string get_req_message() && {
5001     return std::move(req_message);
5002   }
5003 
5004   template <typename T_AnException_req_message_struct_setter = ::std::string>
5005   [[deprecated("Use `FOO.req_message_ref() = BAR;` instead of `FOO.set_req_message(BAR);`")]]
5006   ::std::string& set_req_message(T_AnException_req_message_struct_setter&& req_message_) {
5007     req_message_ref() = std::forward<T_AnException_req_message_struct_setter>(req_message_);
5008     return req_message;
5009   }
5010   const ::std::vector<::std::int32_t>& get_exception_list() const&;
5011   ::std::vector<::std::int32_t> get_exception_list() &&;
5012 
5013   template <typename T_AnException_exception_list_struct_setter = ::std::vector<::std::int32_t>>
5014   [[deprecated("Use `FOO.exception_list_ref() = BAR;` instead of `FOO.set_exception_list(BAR);`")]]
5015   ::std::vector<::std::int32_t>& set_exception_list(T_AnException_exception_list_struct_setter&& exception_list_) {
5016     exception_list_ref() = std::forward<T_AnException_exception_list_struct_setter>(exception_list_);
5017     return exception_list;
5018   }
5019   const ::std::set<::std::int64_t>& get_exception_set() const&;
5020   ::std::set<::std::int64_t> get_exception_set() &&;
5021 
5022   template <typename T_AnException_exception_set_struct_setter = ::std::set<::std::int64_t>>
5023   [[deprecated("Use `FOO.exception_set_ref() = BAR;` instead of `FOO.set_exception_set(BAR);`")]]
5024   ::std::set<::std::int64_t>& set_exception_set(T_AnException_exception_set_struct_setter&& exception_set_) {
5025     exception_set_ref() = std::forward<T_AnException_exception_set_struct_setter>(exception_set_);
5026     return exception_set;
5027   }
5028   const ::std::map<::std::string, ::std::int32_t>& get_exception_map() const&;
5029   ::std::map<::std::string, ::std::int32_t> get_exception_map() &&;
5030 
5031   template <typename T_AnException_exception_map_struct_setter = ::std::map<::std::string, ::std::int32_t>>
5032   [[deprecated("Use `FOO.exception_map_ref() = BAR;` instead of `FOO.set_exception_map(BAR);`")]]
5033   ::std::map<::std::string, ::std::int32_t>& set_exception_map(T_AnException_exception_map_struct_setter&& exception_map_) {
5034     exception_map_ref() = std::forward<T_AnException_exception_map_struct_setter>(exception_map_);
5035     return exception_map;
5036   }
5037   const ::std::map<::std::string, ::std::int32_t>& get_req_exception_map() const&;
5038   ::std::map<::std::string, ::std::int32_t> get_req_exception_map() &&;
5039 
5040   template <typename T_AnException_req_exception_map_struct_setter = ::std::map<::std::string, ::std::int32_t>>
5041   [[deprecated("Use `FOO.req_exception_map_ref() = BAR;` instead of `FOO.set_req_exception_map(BAR);`")]]
5042   ::std::map<::std::string, ::std::int32_t>& set_req_exception_map(T_AnException_req_exception_map_struct_setter&& req_exception_map_) {
5043     req_exception_map_ref() = std::forward<T_AnException_req_exception_map_struct_setter>(req_exception_map_);
5044     return req_exception_map;
5045   }
5046 
5047   ::some::valid::ns::MyEnumA get_enum_field() const {
5048     return enum_field;
5049   }
5050 
5051   [[deprecated("Use `FOO.enum_field_ref() = BAR;` instead of `FOO.set_enum_field(BAR);`")]]
5052   ::some::valid::ns::MyEnumA& set_enum_field(::some::valid::ns::MyEnumA enum_field_) {
5053     enum_field_ref() = enum_field_;
5054     return enum_field;
5055   }
5056   const ::std::vector<::some::valid::ns::MyEnumA>& get_enum_container() const&;
5057   ::std::vector<::some::valid::ns::MyEnumA> get_enum_container() &&;
5058 
5059   template <typename T_AnException_enum_container_struct_setter = ::std::vector<::some::valid::ns::MyEnumA>>
5060   [[deprecated("Use `FOO.enum_container_ref() = BAR;` instead of `FOO.set_enum_container(BAR);`")]]
5061   ::std::vector<::some::valid::ns::MyEnumA>& set_enum_container(T_AnException_enum_container_struct_setter&& enum_container_) {
5062     enum_container_ref() = std::forward<T_AnException_enum_container_struct_setter>(enum_container_);
5063     return enum_container;
5064   }
5065   const ::some::valid::ns::MyStruct& get_a_struct() const&;
5066   ::some::valid::ns::MyStruct get_a_struct() &&;
5067 
5068   template <typename T_AnException_a_struct_struct_setter = ::some::valid::ns::MyStruct>
5069   [[deprecated("Use `FOO.a_struct_ref() = BAR;` instead of `FOO.set_a_struct(BAR);`")]]
5070   ::some::valid::ns::MyStruct& set_a_struct(T_AnException_a_struct_struct_setter&& a_struct_) {
5071     a_struct_ref() = std::forward<T_AnException_a_struct_struct_setter>(a_struct_);
5072     return a_struct;
5073   }
5074   const ::std::set<::some::valid::ns::MyStruct>& get_a_set_struct() const&;
5075   ::std::set<::some::valid::ns::MyStruct> get_a_set_struct() &&;
5076 
5077   template <typename T_AnException_a_set_struct_struct_setter = ::std::set<::some::valid::ns::MyStruct>>
5078   [[deprecated("Use `FOO.a_set_struct_ref() = BAR;` instead of `FOO.set_a_set_struct(BAR);`")]]
5079   ::std::set<::some::valid::ns::MyStruct>& set_a_set_struct(T_AnException_a_set_struct_struct_setter&& a_set_struct_) {
5080     a_set_struct_ref() = std::forward<T_AnException_a_set_struct_struct_setter>(a_set_struct_);
5081     return a_set_struct;
5082   }
5083   const ::std::vector<::some::valid::ns::SimpleUnion>& get_a_union_list() const&;
5084   ::std::vector<::some::valid::ns::SimpleUnion> get_a_union_list() &&;
5085 
5086   template <typename T_AnException_a_union_list_struct_setter = ::std::vector<::some::valid::ns::SimpleUnion>>
5087   [[deprecated("Use `FOO.a_union_list_ref() = BAR;` instead of `FOO.set_a_union_list(BAR);`")]]
5088   ::std::vector<::some::valid::ns::SimpleUnion>& set_a_union_list(T_AnException_a_union_list_struct_setter&& a_union_list_) {
5089     a_union_list_ref() = std::forward<T_AnException_a_union_list_struct_setter>(a_union_list_);
5090     return a_union_list;
5091   }
5092   const ::some::valid::ns::unionTypeDef& get_union_typedef() const&;
5093   ::some::valid::ns::unionTypeDef get_union_typedef() &&;
5094 
5095   template <typename T_AnException_union_typedef_struct_setter = ::some::valid::ns::unionTypeDef>
5096   [[deprecated("Use `FOO.union_typedef_ref() = BAR;` instead of `FOO.set_union_typedef(BAR);`")]]
5097   ::some::valid::ns::unionTypeDef& set_union_typedef(T_AnException_union_typedef_struct_setter&& union_typedef_) {
5098     union_typedef_ref() = std::forward<T_AnException_union_typedef_struct_setter>(union_typedef_);
5099     return union_typedef;
5100   }
5101   const ::std::vector<::some::valid::ns::unionTypeDef>& get_a_union_typedef_list() const&;
5102   ::std::vector<::some::valid::ns::unionTypeDef> get_a_union_typedef_list() &&;
5103 
5104   template <typename T_AnException_a_union_typedef_list_struct_setter = ::std::vector<::some::valid::ns::unionTypeDef>>
5105   [[deprecated("Use `FOO.a_union_typedef_list_ref() = BAR;` instead of `FOO.set_a_union_typedef_list(BAR);`")]]
5106   ::std::vector<::some::valid::ns::unionTypeDef>& set_a_union_typedef_list(T_AnException_a_union_typedef_list_struct_setter&& a_union_typedef_list_) {
5107     a_union_typedef_list_ref() = std::forward<T_AnException_a_union_typedef_list_struct_setter>(a_union_typedef_list_);
5108     return a_union_typedef_list;
5109   }
5110 
5111   template <class Protocol_>
5112   uint32_t read(Protocol_* iprot);
5113   template <class Protocol_>
5114   uint32_t serializedSize(Protocol_ const* prot_) const;
5115   template <class Protocol_>
5116   uint32_t serializedSizeZC(Protocol_ const* prot_) const;
5117   template <class Protocol_>
5118   uint32_t write(Protocol_* prot_) const;
5119 
5120   const char* what() const noexcept override {
5121     return message2.c_str();
5122   }
5123 
5124  private:
5125   template <class Protocol_>
5126   void readNoXfer(Protocol_* iprot);
5127 
5128   friend class ::apache::thrift::Cpp2Ops<AnException>;
5129   friend void swap(AnException& a, AnException& b);
5130 };
5131 
5132 template <class Protocol_>
5133 uint32_t AnException::read(Protocol_* iprot) {
5134   auto _xferStart = iprot->getCursorPosition();
5135   readNoXfer(iprot);
5136   return iprot->getCursorPosition() - _xferStart;
5137 }
5138 
5139 }}} // some::valid::ns
5140 namespace some { namespace valid { namespace ns {
5141 class FOLLY_EXPORT AnotherException : public apache::thrift::TException {
5142  private:
5143   friend struct ::apache::thrift::detail::st::struct_private_access;
5144 
5145   //  used by a static_assert in the corresponding source
5146   static constexpr bool __fbthrift_cpp2_gen_json = true;
5147   static constexpr bool __fbthrift_cpp2_gen_nimble = false;
5148   static constexpr bool __fbthrift_cpp2_gen_has_thrift_uri = false;
5149 
5150   void __fbthrift_clear();
5151   static constexpr ::apache::thrift::ExceptionKind __fbthrift_cpp2_gen_exception_kind =
5152          ::apache::thrift::ExceptionKind::UNSPECIFIED;
5153   static constexpr ::apache::thrift::ExceptionSafety __fbthrift_cpp2_gen_exception_safety =
5154          ::apache::thrift::ExceptionSafety::UNSPECIFIED;
5155   static constexpr ::apache::thrift::ExceptionBlame __fbthrift_cpp2_gen_exception_blame =
5156          ::apache::thrift::ExceptionBlame::UNSPECIFIED;
5157 
5158  public:
5159   using __fbthrift_cpp2_type = AnotherException;
5160   static constexpr bool __fbthrift_cpp2_is_union =
5161     false;
5162 
5163 
5164  public:
5165 
5166   AnotherException();
5167 
5168   // FragileConstructor for use in initialization lists only.
5169   [[deprecated("This constructor is deprecated")]]
5170   AnotherException(apache::thrift::FragileConstructor, ::std::int32_t code__arg, ::std::int32_t req_code__arg, ::std::string message__arg);
5171 
5172   AnotherException(AnotherException&&) noexcept;
5173 
5174   AnotherException(const AnotherException& src);
5175 
5176 
5177   AnotherException& operator=(AnotherException&&) noexcept;
5178   AnotherException& operator=(const AnotherException& src);
5179 
5180   virtual ~AnotherException();
5181 
5182  private:
5183   ::std::int32_t code;
5184  public:
5185   ::std::int32_t req_code;
5186  private:
5187   ::std::string message;
5188  private:
5189   apache::thrift::detail::isset_bitset<2, false> __isset;
5190 
5191  public:
5192 
5193   bool operator==(const AnotherException&) const;
5194   bool operator<(const AnotherException&) const;
5195 
5196   template <typename..., typename T = ::std::int32_t>
5197   FOLLY_ERASE ::apache::thrift::field_ref<const T&> code_ref() const& {
5198     return {this->code, __isset.at(0), __isset.bit(0)};
5199   }
5200 
5201   template <typename..., typename T = ::std::int32_t>
5202   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> code_ref() const&& {
5203     return {static_cast<const T&&>(this->code), __isset.at(0), __isset.bit(0)};
5204   }
5205 
5206   template <typename..., typename T = ::std::int32_t>
5207   FOLLY_ERASE ::apache::thrift::field_ref<T&> code_ref() & {
5208     return {this->code, __isset.at(0), __isset.bit(0)};
5209   }
5210 
5211   template <typename..., typename T = ::std::int32_t>
5212   FOLLY_ERASE ::apache::thrift::field_ref<T&&> code_ref() && {
5213     return {static_cast<T&&>(this->code), __isset.at(0), __isset.bit(0)};
5214   }
5215 
5216   template <typename..., typename T = ::std::int32_t>
5217   FOLLY_ERASE ::apache::thrift::required_field_ref<const T&> req_code_ref() const& {
5218     return ::apache::thrift::required_field_ref<const T&>{this->req_code};
5219   }
5220 
5221   template <typename..., typename T = ::std::int32_t>
5222   FOLLY_ERASE ::apache::thrift::required_field_ref<const T&&> req_code_ref() const&& {
5223     return ::apache::thrift::required_field_ref<const T&&>{static_cast<const T&&>(this->req_code)};
5224   }
5225 
5226   template <typename..., typename T = ::std::int32_t>
5227   FOLLY_ERASE ::apache::thrift::required_field_ref<T&> req_code_ref() & {
5228     return ::apache::thrift::required_field_ref<T&>{this->req_code};
5229   }
5230 
5231   template <typename..., typename T = ::std::int32_t>
5232   FOLLY_ERASE ::apache::thrift::required_field_ref<T&&> req_code_ref() && {
5233     return ::apache::thrift::required_field_ref<T&&>{static_cast<T&&>(this->req_code)};
5234   }
5235 
5236   template <typename..., typename T = ::std::string>
5237   FOLLY_ERASE ::apache::thrift::field_ref<const T&> message_ref() const& {
5238     return {this->message, __isset.at(1), __isset.bit(1)};
5239   }
5240 
5241   template <typename..., typename T = ::std::string>
5242   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> message_ref() const&& {
5243     return {static_cast<const T&&>(this->message), __isset.at(1), __isset.bit(1)};
5244   }
5245 
5246   template <typename..., typename T = ::std::string>
5247   FOLLY_ERASE ::apache::thrift::field_ref<T&> message_ref() & {
5248     return {this->message, __isset.at(1), __isset.bit(1)};
5249   }
5250 
5251   template <typename..., typename T = ::std::string>
5252   FOLLY_ERASE ::apache::thrift::field_ref<T&&> message_ref() && {
5253     return {static_cast<T&&>(this->message), __isset.at(1), __isset.bit(1)};
5254   }
5255 
5256   ::std::int32_t get_code() const {
5257     return code;
5258   }
5259 
5260   [[deprecated("Use `FOO.code_ref() = BAR;` instead of `FOO.set_code(BAR);`")]]
5261   ::std::int32_t& set_code(::std::int32_t code_) {
5262     code_ref() = code_;
5263     return code;
5264   }
5265 
5266   ::std::int32_t get_req_code() const {
5267     return req_code;
5268   }
5269 
5270   [[deprecated("Use `FOO.req_code_ref() = BAR;` instead of `FOO.set_req_code(BAR);`")]]
5271   ::std::int32_t& set_req_code(::std::int32_t req_code_) {
5272     req_code_ref() = req_code_;
5273     return req_code;
5274   }
5275 
5276   const ::std::string& get_message() const& {
5277     return message;
5278   }
5279 
5280   ::std::string get_message() && {
5281     return std::move(message);
5282   }
5283 
5284   template <typename T_AnotherException_message_struct_setter = ::std::string>
5285   [[deprecated("Use `FOO.message_ref() = BAR;` instead of `FOO.set_message(BAR);`")]]
5286   ::std::string& set_message(T_AnotherException_message_struct_setter&& message_) {
5287     message_ref() = std::forward<T_AnotherException_message_struct_setter>(message_);
5288     return message;
5289   }
5290 
5291   template <class Protocol_>
5292   uint32_t read(Protocol_* iprot);
5293   template <class Protocol_>
5294   uint32_t serializedSize(Protocol_ const* prot_) const;
5295   template <class Protocol_>
5296   uint32_t serializedSizeZC(Protocol_ const* prot_) const;
5297   template <class Protocol_>
5298   uint32_t write(Protocol_* prot_) const;
5299 
5300   const char* what() const noexcept override {
5301     return "::some::valid::ns::AnotherException";
5302   }
5303 
5304  private:
5305   template <class Protocol_>
5306   void readNoXfer(Protocol_* iprot);
5307 
5308   friend class ::apache::thrift::Cpp2Ops<AnotherException>;
5309   friend void swap(AnotherException& a, AnotherException& b);
5310 };
5311 
5312 template <class Protocol_>
5313 uint32_t AnotherException::read(Protocol_* iprot) {
5314   auto _xferStart = iprot->getCursorPosition();
5315   readNoXfer(iprot);
5316   return iprot->getCursorPosition() - _xferStart;
5317 }
5318 
5319 }}} // some::valid::ns
5320 namespace some { namespace valid { namespace ns {
5321 class containerStruct final  {
5322  private:
5323   friend struct ::apache::thrift::detail::st::struct_private_access;
5324 
5325   //  used by a static_assert in the corresponding source
5326   static constexpr bool __fbthrift_cpp2_gen_json = true;
5327   static constexpr bool __fbthrift_cpp2_gen_nimble = false;
5328   static constexpr bool __fbthrift_cpp2_gen_has_thrift_uri = false;
5329 
5330   void __fbthrift_clear();
5331 
5332  public:
5333   using __fbthrift_cpp2_type = containerStruct;
5334   static constexpr bool __fbthrift_cpp2_is_union =
5335     false;
5336 
5337 
5338  public:
5339 
5340   containerStruct();
5341 
5342   // FragileConstructor for use in initialization lists only.
5343   [[deprecated("This constructor is deprecated")]]
5344   containerStruct(apache::thrift::FragileConstructor, bool fieldA__arg, bool req_fieldA__arg, bool opt_fieldA__arg, ::std::map<::std::string, bool> fieldB__arg, ::std::map<::std::string, bool> req_fieldB__arg, ::std::map<::std::string, bool> opt_fieldB__arg, ::std::set<::std::int32_t> fieldC__arg, ::std::set<::std::int32_t> req_fieldC__arg, ::std::set<::std::int32_t> opt_fieldC__arg, ::std::string fieldD__arg, ::std::string fieldE__arg, ::std::string req_fieldE__arg, ::std::string opt_fieldE__arg, ::std::vector<::std::vector<::std::int32_t>> fieldF__arg, ::std::map<::std::string, ::std::map<::std::string, ::std::map<::std::string, ::std::int32_t>>> fieldG__arg, ::std::vector<::std::set<::std::int32_t>> fieldH__arg, bool fieldI__arg, ::std::map<::std::string, ::std::vector<::std::int32_t>> fieldJ__arg, ::std::vector<::std::vector<::std::vector<::std::vector<::std::int32_t>>>> fieldK__arg, ::std::set<::std::set<::std::set<bool>>> fieldL__arg, ::std::map<::std::set<::std::vector<::std::int32_t>>, ::std::map<::std::vector<::std::set<::std::string>>, ::std::string>> fieldM__arg, ::some::valid::ns::simpleTypeDef fieldN__arg, ::some::valid::ns::complexStructTypeDef fieldO__arg, ::std::vector<::some::valid::ns::mostComplexTypeDef> fieldP__arg, ::some::valid::ns::MyEnumA fieldQ__arg, ::some::valid::ns::MyEnumA fieldR__arg, ::some::valid::ns::MyEnumA req_fieldR__arg, ::some::valid::ns::MyEnumA opt_fieldR__arg, ::some::valid::ns::MyEnumA fieldS__arg, ::std::vector<::some::valid::ns::MyEnumA> fieldT__arg, ::std::vector<::some::valid::ns::MyEnumA> fieldU__arg, ::some::valid::ns::MyStruct fieldV__arg, ::some::valid::ns::MyStruct req_fieldV__arg, ::some::valid::ns::MyStruct opt_fieldV__arg, ::std::set<::some::valid::ns::MyStruct> fieldW__arg, ::some::valid::ns::ComplexUnion fieldX__arg, ::some::valid::ns::ComplexUnion req_fieldX__arg, ::some::valid::ns::ComplexUnion opt_fieldX__arg, ::std::vector<::some::valid::ns::ComplexUnion> fieldY__arg, ::some::valid::ns::unionTypeDef fieldZ__arg, ::std::vector<::some::valid::ns::unionTypeDef> fieldAA__arg, ::std::map<::some::valid::ns::IndirectionB, ::some::valid::ns::IndirectionC> fieldAB__arg, ::some::valid::ns::MyEnumB fieldAC__arg, ::a::different::ns::AnEnum fieldAD__arg, ::std::map<::std::string, ::std::int32_t> fieldAE__arg, ::some::valid::ns::IndirectionD fieldSD__arg);
5345 
5346   containerStruct(containerStruct&&) = default;
5347 
5348 
5349   containerStruct& operator=(containerStruct&&) = default;
5350 
5351   ~containerStruct();
5352 
5353  private:
5354   bool fieldA;
5355  public:
5356   bool req_fieldA;
5357  private:
5358   bool opt_fieldA;
5359  private:
5360   ::std::map<::std::string, bool> fieldB;
5361  public:
5362   ::std::map<::std::string, bool> req_fieldB;
5363  private:
5364   ::std::map<::std::string, bool> opt_fieldB;
5365  private:
5366   ::std::set<::std::int32_t> fieldC;
5367  public:
5368   ::std::set<::std::int32_t> req_fieldC;
5369  private:
5370   ::std::set<::std::int32_t> opt_fieldC;
5371  private:
5372   ::std::string fieldD;
5373  private:
5374   ::std::string fieldE;
5375  public:
5376   ::std::string req_fieldE;
5377  private:
5378   ::std::string opt_fieldE;
5379  private:
5380   ::std::vector<::std::vector<::std::int32_t>> fieldF;
5381  private:
5382   ::std::map<::std::string, ::std::map<::std::string, ::std::map<::std::string, ::std::int32_t>>> fieldG;
5383  private:
5384   ::std::vector<::std::set<::std::int32_t>> fieldH;
5385  private:
5386   bool fieldI;
5387  private:
5388   ::std::map<::std::string, ::std::vector<::std::int32_t>> fieldJ;
5389  private:
5390   ::std::vector<::std::vector<::std::vector<::std::vector<::std::int32_t>>>> fieldK;
5391  private:
5392   ::std::set<::std::set<::std::set<bool>>> fieldL;
5393  private:
5394   ::std::map<::std::set<::std::vector<::std::int32_t>>, ::std::map<::std::vector<::std::set<::std::string>>, ::std::string>> fieldM;
5395  private:
5396   ::some::valid::ns::simpleTypeDef fieldN;
5397  private:
5398   ::some::valid::ns::complexStructTypeDef fieldO;
5399  private:
5400   ::std::vector<::some::valid::ns::mostComplexTypeDef> fieldP;
5401  private:
5402   ::some::valid::ns::MyEnumA fieldQ;
5403  private:
5404   ::some::valid::ns::MyEnumA fieldR;
5405  public:
5406   ::some::valid::ns::MyEnumA req_fieldR;
5407  private:
5408   ::some::valid::ns::MyEnumA opt_fieldR;
5409  private:
5410   ::some::valid::ns::MyEnumA fieldS;
5411  private:
5412   ::std::vector<::some::valid::ns::MyEnumA> fieldT;
5413  private:
5414   ::std::vector<::some::valid::ns::MyEnumA> fieldU;
5415  private:
5416   ::some::valid::ns::MyStruct fieldV;
5417  public:
5418   ::some::valid::ns::MyStruct req_fieldV;
5419  private:
5420   ::some::valid::ns::MyStruct opt_fieldV;
5421  private:
5422   ::std::set<::some::valid::ns::MyStruct> fieldW;
5423  private:
5424   ::some::valid::ns::ComplexUnion fieldX;
5425  public:
5426   ::some::valid::ns::ComplexUnion req_fieldX;
5427  private:
5428   ::some::valid::ns::ComplexUnion opt_fieldX;
5429  private:
5430   ::std::vector<::some::valid::ns::ComplexUnion> fieldY;
5431  private:
5432   ::some::valid::ns::unionTypeDef fieldZ;
5433  private:
5434   ::std::vector<::some::valid::ns::unionTypeDef> fieldAA;
5435  private:
5436   ::std::map<::some::valid::ns::IndirectionB, ::some::valid::ns::IndirectionC> fieldAB;
5437  private:
5438   ::some::valid::ns::MyEnumB fieldAC;
5439  private:
5440   ::a::different::ns::AnEnum fieldAD;
5441  private:
5442   ::std::map<::std::string, ::std::int32_t> fieldAE;
5443  private:
5444   ::some::valid::ns::IndirectionD fieldSD;
5445  private:
5446   apache::thrift::detail::isset_bitset<39, false> __isset;
5447 
5448  public:
5449 
5450   bool operator==(const containerStruct&) const;
5451   bool operator<(const containerStruct&) const;
5452 
5453   template <typename..., typename T = bool>
5454   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldA_ref() const& {
5455     return {this->fieldA, __isset.at(0), __isset.bit(0)};
5456   }
5457 
5458   template <typename..., typename T = bool>
5459   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldA_ref() const&& {
5460     return {static_cast<const T&&>(this->fieldA), __isset.at(0), __isset.bit(0)};
5461   }
5462 
5463   template <typename..., typename T = bool>
5464   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldA_ref() & {
5465     return {this->fieldA, __isset.at(0), __isset.bit(0)};
5466   }
5467 
5468   template <typename..., typename T = bool>
5469   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldA_ref() && {
5470     return {static_cast<T&&>(this->fieldA), __isset.at(0), __isset.bit(0)};
5471   }
5472 
5473   template <typename..., typename T = bool>
5474   FOLLY_ERASE ::apache::thrift::required_field_ref<const T&> req_fieldA_ref() const& {
5475     return ::apache::thrift::required_field_ref<const T&>{this->req_fieldA};
5476   }
5477 
5478   template <typename..., typename T = bool>
5479   FOLLY_ERASE ::apache::thrift::required_field_ref<const T&&> req_fieldA_ref() const&& {
5480     return ::apache::thrift::required_field_ref<const T&&>{static_cast<const T&&>(this->req_fieldA)};
5481   }
5482 
5483   template <typename..., typename T = bool>
5484   FOLLY_ERASE ::apache::thrift::required_field_ref<T&> req_fieldA_ref() & {
5485     return ::apache::thrift::required_field_ref<T&>{this->req_fieldA};
5486   }
5487 
5488   template <typename..., typename T = bool>
5489   FOLLY_ERASE ::apache::thrift::required_field_ref<T&&> req_fieldA_ref() && {
5490     return ::apache::thrift::required_field_ref<T&&>{static_cast<T&&>(this->req_fieldA)};
5491   }
5492 
5493   template <typename..., typename T = bool>
5494   FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> opt_fieldA_ref() const& {
5495     return {this->opt_fieldA, __isset.at(1), __isset.bit(1)};
5496   }
5497 
5498   template <typename..., typename T = bool>
5499   FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> opt_fieldA_ref() const&& {
5500     return {static_cast<const T&&>(this->opt_fieldA), __isset.at(1), __isset.bit(1)};
5501   }
5502 
5503   template <typename..., typename T = bool>
5504   FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> opt_fieldA_ref() & {
5505     return {this->opt_fieldA, __isset.at(1), __isset.bit(1)};
5506   }
5507 
5508   template <typename..., typename T = bool>
5509   FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> opt_fieldA_ref() && {
5510     return {static_cast<T&&>(this->opt_fieldA), __isset.at(1), __isset.bit(1)};
5511   }
5512 
5513   template <typename..., typename T = ::std::map<::std::string, bool>>
5514   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldB_ref() const& {
5515     return {this->fieldB, __isset.at(2), __isset.bit(2)};
5516   }
5517 
5518   template <typename..., typename T = ::std::map<::std::string, bool>>
5519   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldB_ref() const&& {
5520     return {static_cast<const T&&>(this->fieldB), __isset.at(2), __isset.bit(2)};
5521   }
5522 
5523   template <typename..., typename T = ::std::map<::std::string, bool>>
5524   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldB_ref() & {
5525     return {this->fieldB, __isset.at(2), __isset.bit(2)};
5526   }
5527 
5528   template <typename..., typename T = ::std::map<::std::string, bool>>
5529   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldB_ref() && {
5530     return {static_cast<T&&>(this->fieldB), __isset.at(2), __isset.bit(2)};
5531   }
5532 
5533   template <typename..., typename T = ::std::map<::std::string, bool>>
5534   FOLLY_ERASE ::apache::thrift::required_field_ref<const T&> req_fieldB_ref() const& {
5535     return ::apache::thrift::required_field_ref<const T&>{this->req_fieldB};
5536   }
5537 
5538   template <typename..., typename T = ::std::map<::std::string, bool>>
5539   FOLLY_ERASE ::apache::thrift::required_field_ref<const T&&> req_fieldB_ref() const&& {
5540     return ::apache::thrift::required_field_ref<const T&&>{static_cast<const T&&>(this->req_fieldB)};
5541   }
5542 
5543   template <typename..., typename T = ::std::map<::std::string, bool>>
5544   FOLLY_ERASE ::apache::thrift::required_field_ref<T&> req_fieldB_ref() & {
5545     return ::apache::thrift::required_field_ref<T&>{this->req_fieldB};
5546   }
5547 
5548   template <typename..., typename T = ::std::map<::std::string, bool>>
5549   FOLLY_ERASE ::apache::thrift::required_field_ref<T&&> req_fieldB_ref() && {
5550     return ::apache::thrift::required_field_ref<T&&>{static_cast<T&&>(this->req_fieldB)};
5551   }
5552 
5553   template <typename..., typename T = ::std::map<::std::string, bool>>
5554   FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> opt_fieldB_ref() const& {
5555     return {this->opt_fieldB, __isset.at(3), __isset.bit(3)};
5556   }
5557 
5558   template <typename..., typename T = ::std::map<::std::string, bool>>
5559   FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> opt_fieldB_ref() const&& {
5560     return {static_cast<const T&&>(this->opt_fieldB), __isset.at(3), __isset.bit(3)};
5561   }
5562 
5563   template <typename..., typename T = ::std::map<::std::string, bool>>
5564   FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> opt_fieldB_ref() & {
5565     return {this->opt_fieldB, __isset.at(3), __isset.bit(3)};
5566   }
5567 
5568   template <typename..., typename T = ::std::map<::std::string, bool>>
5569   FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> opt_fieldB_ref() && {
5570     return {static_cast<T&&>(this->opt_fieldB), __isset.at(3), __isset.bit(3)};
5571   }
5572 
5573   template <typename..., typename T = ::std::set<::std::int32_t>>
5574   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldC_ref() const& {
5575     return {this->fieldC, __isset.at(4), __isset.bit(4)};
5576   }
5577 
5578   template <typename..., typename T = ::std::set<::std::int32_t>>
5579   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldC_ref() const&& {
5580     return {static_cast<const T&&>(this->fieldC), __isset.at(4), __isset.bit(4)};
5581   }
5582 
5583   template <typename..., typename T = ::std::set<::std::int32_t>>
5584   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldC_ref() & {
5585     return {this->fieldC, __isset.at(4), __isset.bit(4)};
5586   }
5587 
5588   template <typename..., typename T = ::std::set<::std::int32_t>>
5589   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldC_ref() && {
5590     return {static_cast<T&&>(this->fieldC), __isset.at(4), __isset.bit(4)};
5591   }
5592 
5593   template <typename..., typename T = ::std::set<::std::int32_t>>
5594   FOLLY_ERASE ::apache::thrift::required_field_ref<const T&> req_fieldC_ref() const& {
5595     return ::apache::thrift::required_field_ref<const T&>{this->req_fieldC};
5596   }
5597 
5598   template <typename..., typename T = ::std::set<::std::int32_t>>
5599   FOLLY_ERASE ::apache::thrift::required_field_ref<const T&&> req_fieldC_ref() const&& {
5600     return ::apache::thrift::required_field_ref<const T&&>{static_cast<const T&&>(this->req_fieldC)};
5601   }
5602 
5603   template <typename..., typename T = ::std::set<::std::int32_t>>
5604   FOLLY_ERASE ::apache::thrift::required_field_ref<T&> req_fieldC_ref() & {
5605     return ::apache::thrift::required_field_ref<T&>{this->req_fieldC};
5606   }
5607 
5608   template <typename..., typename T = ::std::set<::std::int32_t>>
5609   FOLLY_ERASE ::apache::thrift::required_field_ref<T&&> req_fieldC_ref() && {
5610     return ::apache::thrift::required_field_ref<T&&>{static_cast<T&&>(this->req_fieldC)};
5611   }
5612 
5613   template <typename..., typename T = ::std::set<::std::int32_t>>
5614   FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> opt_fieldC_ref() const& {
5615     return {this->opt_fieldC, __isset.at(5), __isset.bit(5)};
5616   }
5617 
5618   template <typename..., typename T = ::std::set<::std::int32_t>>
5619   FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> opt_fieldC_ref() const&& {
5620     return {static_cast<const T&&>(this->opt_fieldC), __isset.at(5), __isset.bit(5)};
5621   }
5622 
5623   template <typename..., typename T = ::std::set<::std::int32_t>>
5624   FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> opt_fieldC_ref() & {
5625     return {this->opt_fieldC, __isset.at(5), __isset.bit(5)};
5626   }
5627 
5628   template <typename..., typename T = ::std::set<::std::int32_t>>
5629   FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> opt_fieldC_ref() && {
5630     return {static_cast<T&&>(this->opt_fieldC), __isset.at(5), __isset.bit(5)};
5631   }
5632 
5633   template <typename..., typename T = ::std::string>
5634   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldD_ref() const& {
5635     return {this->fieldD, __isset.at(6), __isset.bit(6)};
5636   }
5637 
5638   template <typename..., typename T = ::std::string>
5639   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldD_ref() const&& {
5640     return {static_cast<const T&&>(this->fieldD), __isset.at(6), __isset.bit(6)};
5641   }
5642 
5643   template <typename..., typename T = ::std::string>
5644   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldD_ref() & {
5645     return {this->fieldD, __isset.at(6), __isset.bit(6)};
5646   }
5647 
5648   template <typename..., typename T = ::std::string>
5649   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldD_ref() && {
5650     return {static_cast<T&&>(this->fieldD), __isset.at(6), __isset.bit(6)};
5651   }
5652 
5653   template <typename..., typename T = ::std::string>
5654   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldE_ref() const& {
5655     return {this->fieldE, __isset.at(7), __isset.bit(7)};
5656   }
5657 
5658   template <typename..., typename T = ::std::string>
5659   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldE_ref() const&& {
5660     return {static_cast<const T&&>(this->fieldE), __isset.at(7), __isset.bit(7)};
5661   }
5662 
5663   template <typename..., typename T = ::std::string>
5664   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldE_ref() & {
5665     return {this->fieldE, __isset.at(7), __isset.bit(7)};
5666   }
5667 
5668   template <typename..., typename T = ::std::string>
5669   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldE_ref() && {
5670     return {static_cast<T&&>(this->fieldE), __isset.at(7), __isset.bit(7)};
5671   }
5672 
5673   template <typename..., typename T = ::std::string>
5674   FOLLY_ERASE ::apache::thrift::required_field_ref<const T&> req_fieldE_ref() const& {
5675     return ::apache::thrift::required_field_ref<const T&>{this->req_fieldE};
5676   }
5677 
5678   template <typename..., typename T = ::std::string>
5679   FOLLY_ERASE ::apache::thrift::required_field_ref<const T&&> req_fieldE_ref() const&& {
5680     return ::apache::thrift::required_field_ref<const T&&>{static_cast<const T&&>(this->req_fieldE)};
5681   }
5682 
5683   template <typename..., typename T = ::std::string>
5684   FOLLY_ERASE ::apache::thrift::required_field_ref<T&> req_fieldE_ref() & {
5685     return ::apache::thrift::required_field_ref<T&>{this->req_fieldE};
5686   }
5687 
5688   template <typename..., typename T = ::std::string>
5689   FOLLY_ERASE ::apache::thrift::required_field_ref<T&&> req_fieldE_ref() && {
5690     return ::apache::thrift::required_field_ref<T&&>{static_cast<T&&>(this->req_fieldE)};
5691   }
5692 
5693   template <typename..., typename T = ::std::string>
5694   FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> opt_fieldE_ref() const& {
5695     return {this->opt_fieldE, __isset.at(8), __isset.bit(8)};
5696   }
5697 
5698   template <typename..., typename T = ::std::string>
5699   FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> opt_fieldE_ref() const&& {
5700     return {static_cast<const T&&>(this->opt_fieldE), __isset.at(8), __isset.bit(8)};
5701   }
5702 
5703   template <typename..., typename T = ::std::string>
5704   FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> opt_fieldE_ref() & {
5705     return {this->opt_fieldE, __isset.at(8), __isset.bit(8)};
5706   }
5707 
5708   template <typename..., typename T = ::std::string>
5709   FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> opt_fieldE_ref() && {
5710     return {static_cast<T&&>(this->opt_fieldE), __isset.at(8), __isset.bit(8)};
5711   }
5712 
5713   template <typename..., typename T = ::std::vector<::std::vector<::std::int32_t>>>
5714   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldF_ref() const& {
5715     return {this->fieldF, __isset.at(9), __isset.bit(9)};
5716   }
5717 
5718   template <typename..., typename T = ::std::vector<::std::vector<::std::int32_t>>>
5719   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldF_ref() const&& {
5720     return {static_cast<const T&&>(this->fieldF), __isset.at(9), __isset.bit(9)};
5721   }
5722 
5723   template <typename..., typename T = ::std::vector<::std::vector<::std::int32_t>>>
5724   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldF_ref() & {
5725     return {this->fieldF, __isset.at(9), __isset.bit(9)};
5726   }
5727 
5728   template <typename..., typename T = ::std::vector<::std::vector<::std::int32_t>>>
5729   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldF_ref() && {
5730     return {static_cast<T&&>(this->fieldF), __isset.at(9), __isset.bit(9)};
5731   }
5732 
5733   template <typename..., typename T = ::std::map<::std::string, ::std::map<::std::string, ::std::map<::std::string, ::std::int32_t>>>>
5734   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldG_ref() const& {
5735     return {this->fieldG, __isset.at(10), __isset.bit(10)};
5736   }
5737 
5738   template <typename..., typename T = ::std::map<::std::string, ::std::map<::std::string, ::std::map<::std::string, ::std::int32_t>>>>
5739   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldG_ref() const&& {
5740     return {static_cast<const T&&>(this->fieldG), __isset.at(10), __isset.bit(10)};
5741   }
5742 
5743   template <typename..., typename T = ::std::map<::std::string, ::std::map<::std::string, ::std::map<::std::string, ::std::int32_t>>>>
5744   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldG_ref() & {
5745     return {this->fieldG, __isset.at(10), __isset.bit(10)};
5746   }
5747 
5748   template <typename..., typename T = ::std::map<::std::string, ::std::map<::std::string, ::std::map<::std::string, ::std::int32_t>>>>
5749   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldG_ref() && {
5750     return {static_cast<T&&>(this->fieldG), __isset.at(10), __isset.bit(10)};
5751   }
5752 
5753   template <typename..., typename T = ::std::vector<::std::set<::std::int32_t>>>
5754   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldH_ref() const& {
5755     return {this->fieldH, __isset.at(11), __isset.bit(11)};
5756   }
5757 
5758   template <typename..., typename T = ::std::vector<::std::set<::std::int32_t>>>
5759   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldH_ref() const&& {
5760     return {static_cast<const T&&>(this->fieldH), __isset.at(11), __isset.bit(11)};
5761   }
5762 
5763   template <typename..., typename T = ::std::vector<::std::set<::std::int32_t>>>
5764   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldH_ref() & {
5765     return {this->fieldH, __isset.at(11), __isset.bit(11)};
5766   }
5767 
5768   template <typename..., typename T = ::std::vector<::std::set<::std::int32_t>>>
5769   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldH_ref() && {
5770     return {static_cast<T&&>(this->fieldH), __isset.at(11), __isset.bit(11)};
5771   }
5772 
5773   template <typename..., typename T = bool>
5774   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldI_ref() const& {
5775     return {this->fieldI, __isset.at(12), __isset.bit(12)};
5776   }
5777 
5778   template <typename..., typename T = bool>
5779   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldI_ref() const&& {
5780     return {static_cast<const T&&>(this->fieldI), __isset.at(12), __isset.bit(12)};
5781   }
5782 
5783   template <typename..., typename T = bool>
5784   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldI_ref() & {
5785     return {this->fieldI, __isset.at(12), __isset.bit(12)};
5786   }
5787 
5788   template <typename..., typename T = bool>
5789   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldI_ref() && {
5790     return {static_cast<T&&>(this->fieldI), __isset.at(12), __isset.bit(12)};
5791   }
5792 
5793   template <typename..., typename T = ::std::map<::std::string, ::std::vector<::std::int32_t>>>
5794   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldJ_ref() const& {
5795     return {this->fieldJ, __isset.at(13), __isset.bit(13)};
5796   }
5797 
5798   template <typename..., typename T = ::std::map<::std::string, ::std::vector<::std::int32_t>>>
5799   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldJ_ref() const&& {
5800     return {static_cast<const T&&>(this->fieldJ), __isset.at(13), __isset.bit(13)};
5801   }
5802 
5803   template <typename..., typename T = ::std::map<::std::string, ::std::vector<::std::int32_t>>>
5804   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldJ_ref() & {
5805     return {this->fieldJ, __isset.at(13), __isset.bit(13)};
5806   }
5807 
5808   template <typename..., typename T = ::std::map<::std::string, ::std::vector<::std::int32_t>>>
5809   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldJ_ref() && {
5810     return {static_cast<T&&>(this->fieldJ), __isset.at(13), __isset.bit(13)};
5811   }
5812 
5813   template <typename..., typename T = ::std::vector<::std::vector<::std::vector<::std::vector<::std::int32_t>>>>>
5814   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldK_ref() const& {
5815     return {this->fieldK, __isset.at(14), __isset.bit(14)};
5816   }
5817 
5818   template <typename..., typename T = ::std::vector<::std::vector<::std::vector<::std::vector<::std::int32_t>>>>>
5819   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldK_ref() const&& {
5820     return {static_cast<const T&&>(this->fieldK), __isset.at(14), __isset.bit(14)};
5821   }
5822 
5823   template <typename..., typename T = ::std::vector<::std::vector<::std::vector<::std::vector<::std::int32_t>>>>>
5824   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldK_ref() & {
5825     return {this->fieldK, __isset.at(14), __isset.bit(14)};
5826   }
5827 
5828   template <typename..., typename T = ::std::vector<::std::vector<::std::vector<::std::vector<::std::int32_t>>>>>
5829   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldK_ref() && {
5830     return {static_cast<T&&>(this->fieldK), __isset.at(14), __isset.bit(14)};
5831   }
5832 
5833   template <typename..., typename T = ::std::set<::std::set<::std::set<bool>>>>
5834   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldL_ref() const& {
5835     return {this->fieldL, __isset.at(15), __isset.bit(15)};
5836   }
5837 
5838   template <typename..., typename T = ::std::set<::std::set<::std::set<bool>>>>
5839   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldL_ref() const&& {
5840     return {static_cast<const T&&>(this->fieldL), __isset.at(15), __isset.bit(15)};
5841   }
5842 
5843   template <typename..., typename T = ::std::set<::std::set<::std::set<bool>>>>
5844   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldL_ref() & {
5845     return {this->fieldL, __isset.at(15), __isset.bit(15)};
5846   }
5847 
5848   template <typename..., typename T = ::std::set<::std::set<::std::set<bool>>>>
5849   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldL_ref() && {
5850     return {static_cast<T&&>(this->fieldL), __isset.at(15), __isset.bit(15)};
5851   }
5852 
5853   template <typename..., typename T = ::std::map<::std::set<::std::vector<::std::int32_t>>, ::std::map<::std::vector<::std::set<::std::string>>, ::std::string>>>
5854   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldM_ref() const& {
5855     return {this->fieldM, __isset.at(16), __isset.bit(16)};
5856   }
5857 
5858   template <typename..., typename T = ::std::map<::std::set<::std::vector<::std::int32_t>>, ::std::map<::std::vector<::std::set<::std::string>>, ::std::string>>>
5859   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldM_ref() const&& {
5860     return {static_cast<const T&&>(this->fieldM), __isset.at(16), __isset.bit(16)};
5861   }
5862 
5863   template <typename..., typename T = ::std::map<::std::set<::std::vector<::std::int32_t>>, ::std::map<::std::vector<::std::set<::std::string>>, ::std::string>>>
5864   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldM_ref() & {
5865     return {this->fieldM, __isset.at(16), __isset.bit(16)};
5866   }
5867 
5868   template <typename..., typename T = ::std::map<::std::set<::std::vector<::std::int32_t>>, ::std::map<::std::vector<::std::set<::std::string>>, ::std::string>>>
5869   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldM_ref() && {
5870     return {static_cast<T&&>(this->fieldM), __isset.at(16), __isset.bit(16)};
5871   }
5872 
5873   template <typename..., typename T = ::some::valid::ns::simpleTypeDef>
5874   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldN_ref() const& {
5875     return {this->fieldN, __isset.at(17), __isset.bit(17)};
5876   }
5877 
5878   template <typename..., typename T = ::some::valid::ns::simpleTypeDef>
5879   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldN_ref() const&& {
5880     return {static_cast<const T&&>(this->fieldN), __isset.at(17), __isset.bit(17)};
5881   }
5882 
5883   template <typename..., typename T = ::some::valid::ns::simpleTypeDef>
5884   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldN_ref() & {
5885     return {this->fieldN, __isset.at(17), __isset.bit(17)};
5886   }
5887 
5888   template <typename..., typename T = ::some::valid::ns::simpleTypeDef>
5889   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldN_ref() && {
5890     return {static_cast<T&&>(this->fieldN), __isset.at(17), __isset.bit(17)};
5891   }
5892 
5893   template <typename..., typename T = ::some::valid::ns::complexStructTypeDef>
5894   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldO_ref() const& {
5895     return {this->fieldO, __isset.at(18), __isset.bit(18)};
5896   }
5897 
5898   template <typename..., typename T = ::some::valid::ns::complexStructTypeDef>
5899   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldO_ref() const&& {
5900     return {static_cast<const T&&>(this->fieldO), __isset.at(18), __isset.bit(18)};
5901   }
5902 
5903   template <typename..., typename T = ::some::valid::ns::complexStructTypeDef>
5904   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldO_ref() & {
5905     return {this->fieldO, __isset.at(18), __isset.bit(18)};
5906   }
5907 
5908   template <typename..., typename T = ::some::valid::ns::complexStructTypeDef>
5909   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldO_ref() && {
5910     return {static_cast<T&&>(this->fieldO), __isset.at(18), __isset.bit(18)};
5911   }
5912 
5913   template <typename..., typename T = ::std::vector<::some::valid::ns::mostComplexTypeDef>>
5914   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldP_ref() const& {
5915     return {this->fieldP, __isset.at(19), __isset.bit(19)};
5916   }
5917 
5918   template <typename..., typename T = ::std::vector<::some::valid::ns::mostComplexTypeDef>>
5919   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldP_ref() const&& {
5920     return {static_cast<const T&&>(this->fieldP), __isset.at(19), __isset.bit(19)};
5921   }
5922 
5923   template <typename..., typename T = ::std::vector<::some::valid::ns::mostComplexTypeDef>>
5924   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldP_ref() & {
5925     return {this->fieldP, __isset.at(19), __isset.bit(19)};
5926   }
5927 
5928   template <typename..., typename T = ::std::vector<::some::valid::ns::mostComplexTypeDef>>
5929   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldP_ref() && {
5930     return {static_cast<T&&>(this->fieldP), __isset.at(19), __isset.bit(19)};
5931   }
5932 
5933   template <typename..., typename T = ::some::valid::ns::MyEnumA>
5934   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldQ_ref() const& {
5935     return {this->fieldQ, __isset.at(20), __isset.bit(20)};
5936   }
5937 
5938   template <typename..., typename T = ::some::valid::ns::MyEnumA>
5939   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldQ_ref() const&& {
5940     return {static_cast<const T&&>(this->fieldQ), __isset.at(20), __isset.bit(20)};
5941   }
5942 
5943   template <typename..., typename T = ::some::valid::ns::MyEnumA>
5944   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldQ_ref() & {
5945     return {this->fieldQ, __isset.at(20), __isset.bit(20)};
5946   }
5947 
5948   template <typename..., typename T = ::some::valid::ns::MyEnumA>
5949   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldQ_ref() && {
5950     return {static_cast<T&&>(this->fieldQ), __isset.at(20), __isset.bit(20)};
5951   }
5952 
5953   template <typename..., typename T = ::some::valid::ns::MyEnumA>
5954   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldR_ref() const& {
5955     return {this->fieldR, __isset.at(21), __isset.bit(21)};
5956   }
5957 
5958   template <typename..., typename T = ::some::valid::ns::MyEnumA>
5959   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldR_ref() const&& {
5960     return {static_cast<const T&&>(this->fieldR), __isset.at(21), __isset.bit(21)};
5961   }
5962 
5963   template <typename..., typename T = ::some::valid::ns::MyEnumA>
5964   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldR_ref() & {
5965     return {this->fieldR, __isset.at(21), __isset.bit(21)};
5966   }
5967 
5968   template <typename..., typename T = ::some::valid::ns::MyEnumA>
5969   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldR_ref() && {
5970     return {static_cast<T&&>(this->fieldR), __isset.at(21), __isset.bit(21)};
5971   }
5972 
5973   template <typename..., typename T = ::some::valid::ns::MyEnumA>
5974   FOLLY_ERASE ::apache::thrift::required_field_ref<const T&> req_fieldR_ref() const& {
5975     return ::apache::thrift::required_field_ref<const T&>{this->req_fieldR};
5976   }
5977 
5978   template <typename..., typename T = ::some::valid::ns::MyEnumA>
5979   FOLLY_ERASE ::apache::thrift::required_field_ref<const T&&> req_fieldR_ref() const&& {
5980     return ::apache::thrift::required_field_ref<const T&&>{static_cast<const T&&>(this->req_fieldR)};
5981   }
5982 
5983   template <typename..., typename T = ::some::valid::ns::MyEnumA>
5984   FOLLY_ERASE ::apache::thrift::required_field_ref<T&> req_fieldR_ref() & {
5985     return ::apache::thrift::required_field_ref<T&>{this->req_fieldR};
5986   }
5987 
5988   template <typename..., typename T = ::some::valid::ns::MyEnumA>
5989   FOLLY_ERASE ::apache::thrift::required_field_ref<T&&> req_fieldR_ref() && {
5990     return ::apache::thrift::required_field_ref<T&&>{static_cast<T&&>(this->req_fieldR)};
5991   }
5992 
5993   template <typename..., typename T = ::some::valid::ns::MyEnumA>
5994   FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> opt_fieldR_ref() const& {
5995     return {this->opt_fieldR, __isset.at(22), __isset.bit(22)};
5996   }
5997 
5998   template <typename..., typename T = ::some::valid::ns::MyEnumA>
5999   FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> opt_fieldR_ref() const&& {
6000     return {static_cast<const T&&>(this->opt_fieldR), __isset.at(22), __isset.bit(22)};
6001   }
6002 
6003   template <typename..., typename T = ::some::valid::ns::MyEnumA>
6004   FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> opt_fieldR_ref() & {
6005     return {this->opt_fieldR, __isset.at(22), __isset.bit(22)};
6006   }
6007 
6008   template <typename..., typename T = ::some::valid::ns::MyEnumA>
6009   FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> opt_fieldR_ref() && {
6010     return {static_cast<T&&>(this->opt_fieldR), __isset.at(22), __isset.bit(22)};
6011   }
6012 
6013   template <typename..., typename T = ::some::valid::ns::MyEnumA>
6014   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldS_ref() const& {
6015     return {this->fieldS, __isset.at(23), __isset.bit(23)};
6016   }
6017 
6018   template <typename..., typename T = ::some::valid::ns::MyEnumA>
6019   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldS_ref() const&& {
6020     return {static_cast<const T&&>(this->fieldS), __isset.at(23), __isset.bit(23)};
6021   }
6022 
6023   template <typename..., typename T = ::some::valid::ns::MyEnumA>
6024   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldS_ref() & {
6025     return {this->fieldS, __isset.at(23), __isset.bit(23)};
6026   }
6027 
6028   template <typename..., typename T = ::some::valid::ns::MyEnumA>
6029   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldS_ref() && {
6030     return {static_cast<T&&>(this->fieldS), __isset.at(23), __isset.bit(23)};
6031   }
6032 
6033   template <typename..., typename T = ::std::vector<::some::valid::ns::MyEnumA>>
6034   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldT_ref() const& {
6035     return {this->fieldT, __isset.at(24), __isset.bit(24)};
6036   }
6037 
6038   template <typename..., typename T = ::std::vector<::some::valid::ns::MyEnumA>>
6039   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldT_ref() const&& {
6040     return {static_cast<const T&&>(this->fieldT), __isset.at(24), __isset.bit(24)};
6041   }
6042 
6043   template <typename..., typename T = ::std::vector<::some::valid::ns::MyEnumA>>
6044   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldT_ref() & {
6045     return {this->fieldT, __isset.at(24), __isset.bit(24)};
6046   }
6047 
6048   template <typename..., typename T = ::std::vector<::some::valid::ns::MyEnumA>>
6049   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldT_ref() && {
6050     return {static_cast<T&&>(this->fieldT), __isset.at(24), __isset.bit(24)};
6051   }
6052 
6053   template <typename..., typename T = ::std::vector<::some::valid::ns::MyEnumA>>
6054   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldU_ref() const& {
6055     return {this->fieldU, __isset.at(25), __isset.bit(25)};
6056   }
6057 
6058   template <typename..., typename T = ::std::vector<::some::valid::ns::MyEnumA>>
6059   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldU_ref() const&& {
6060     return {static_cast<const T&&>(this->fieldU), __isset.at(25), __isset.bit(25)};
6061   }
6062 
6063   template <typename..., typename T = ::std::vector<::some::valid::ns::MyEnumA>>
6064   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldU_ref() & {
6065     return {this->fieldU, __isset.at(25), __isset.bit(25)};
6066   }
6067 
6068   template <typename..., typename T = ::std::vector<::some::valid::ns::MyEnumA>>
6069   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldU_ref() && {
6070     return {static_cast<T&&>(this->fieldU), __isset.at(25), __isset.bit(25)};
6071   }
6072 
6073   template <typename..., typename T = ::some::valid::ns::MyStruct>
6074   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldV_ref() const& {
6075     return {this->fieldV, __isset.at(26), __isset.bit(26)};
6076   }
6077 
6078   template <typename..., typename T = ::some::valid::ns::MyStruct>
6079   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldV_ref() const&& {
6080     return {static_cast<const T&&>(this->fieldV), __isset.at(26), __isset.bit(26)};
6081   }
6082 
6083   template <typename..., typename T = ::some::valid::ns::MyStruct>
6084   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldV_ref() & {
6085     return {this->fieldV, __isset.at(26), __isset.bit(26)};
6086   }
6087 
6088   template <typename..., typename T = ::some::valid::ns::MyStruct>
6089   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldV_ref() && {
6090     return {static_cast<T&&>(this->fieldV), __isset.at(26), __isset.bit(26)};
6091   }
6092 
6093   template <typename..., typename T = ::some::valid::ns::MyStruct>
6094   FOLLY_ERASE ::apache::thrift::required_field_ref<const T&> req_fieldV_ref() const& {
6095     return ::apache::thrift::required_field_ref<const T&>{this->req_fieldV};
6096   }
6097 
6098   template <typename..., typename T = ::some::valid::ns::MyStruct>
6099   FOLLY_ERASE ::apache::thrift::required_field_ref<const T&&> req_fieldV_ref() const&& {
6100     return ::apache::thrift::required_field_ref<const T&&>{static_cast<const T&&>(this->req_fieldV)};
6101   }
6102 
6103   template <typename..., typename T = ::some::valid::ns::MyStruct>
6104   FOLLY_ERASE ::apache::thrift::required_field_ref<T&> req_fieldV_ref() & {
6105     return ::apache::thrift::required_field_ref<T&>{this->req_fieldV};
6106   }
6107 
6108   template <typename..., typename T = ::some::valid::ns::MyStruct>
6109   FOLLY_ERASE ::apache::thrift::required_field_ref<T&&> req_fieldV_ref() && {
6110     return ::apache::thrift::required_field_ref<T&&>{static_cast<T&&>(this->req_fieldV)};
6111   }
6112 
6113   template <typename..., typename T = ::some::valid::ns::MyStruct>
6114   FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> opt_fieldV_ref() const& {
6115     return {this->opt_fieldV, __isset.at(27), __isset.bit(27)};
6116   }
6117 
6118   template <typename..., typename T = ::some::valid::ns::MyStruct>
6119   FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> opt_fieldV_ref() const&& {
6120     return {static_cast<const T&&>(this->opt_fieldV), __isset.at(27), __isset.bit(27)};
6121   }
6122 
6123   template <typename..., typename T = ::some::valid::ns::MyStruct>
6124   FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> opt_fieldV_ref() & {
6125     return {this->opt_fieldV, __isset.at(27), __isset.bit(27)};
6126   }
6127 
6128   template <typename..., typename T = ::some::valid::ns::MyStruct>
6129   FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> opt_fieldV_ref() && {
6130     return {static_cast<T&&>(this->opt_fieldV), __isset.at(27), __isset.bit(27)};
6131   }
6132 
6133   template <typename..., typename T = ::std::set<::some::valid::ns::MyStruct>>
6134   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldW_ref() const& {
6135     return {this->fieldW, __isset.at(28), __isset.bit(28)};
6136   }
6137 
6138   template <typename..., typename T = ::std::set<::some::valid::ns::MyStruct>>
6139   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldW_ref() const&& {
6140     return {static_cast<const T&&>(this->fieldW), __isset.at(28), __isset.bit(28)};
6141   }
6142 
6143   template <typename..., typename T = ::std::set<::some::valid::ns::MyStruct>>
6144   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldW_ref() & {
6145     return {this->fieldW, __isset.at(28), __isset.bit(28)};
6146   }
6147 
6148   template <typename..., typename T = ::std::set<::some::valid::ns::MyStruct>>
6149   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldW_ref() && {
6150     return {static_cast<T&&>(this->fieldW), __isset.at(28), __isset.bit(28)};
6151   }
6152 
6153   template <typename..., typename T = ::some::valid::ns::ComplexUnion>
6154   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldX_ref() const& {
6155     return {this->fieldX, __isset.at(29), __isset.bit(29)};
6156   }
6157 
6158   template <typename..., typename T = ::some::valid::ns::ComplexUnion>
6159   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldX_ref() const&& {
6160     return {static_cast<const T&&>(this->fieldX), __isset.at(29), __isset.bit(29)};
6161   }
6162 
6163   template <typename..., typename T = ::some::valid::ns::ComplexUnion>
6164   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldX_ref() & {
6165     return {this->fieldX, __isset.at(29), __isset.bit(29)};
6166   }
6167 
6168   template <typename..., typename T = ::some::valid::ns::ComplexUnion>
6169   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldX_ref() && {
6170     return {static_cast<T&&>(this->fieldX), __isset.at(29), __isset.bit(29)};
6171   }
6172 
6173   template <typename..., typename T = ::some::valid::ns::ComplexUnion>
6174   FOLLY_ERASE ::apache::thrift::required_field_ref<const T&> req_fieldX_ref() const& {
6175     return ::apache::thrift::required_field_ref<const T&>{this->req_fieldX};
6176   }
6177 
6178   template <typename..., typename T = ::some::valid::ns::ComplexUnion>
6179   FOLLY_ERASE ::apache::thrift::required_field_ref<const T&&> req_fieldX_ref() const&& {
6180     return ::apache::thrift::required_field_ref<const T&&>{static_cast<const T&&>(this->req_fieldX)};
6181   }
6182 
6183   template <typename..., typename T = ::some::valid::ns::ComplexUnion>
6184   FOLLY_ERASE ::apache::thrift::required_field_ref<T&> req_fieldX_ref() & {
6185     return ::apache::thrift::required_field_ref<T&>{this->req_fieldX};
6186   }
6187 
6188   template <typename..., typename T = ::some::valid::ns::ComplexUnion>
6189   FOLLY_ERASE ::apache::thrift::required_field_ref<T&&> req_fieldX_ref() && {
6190     return ::apache::thrift::required_field_ref<T&&>{static_cast<T&&>(this->req_fieldX)};
6191   }
6192 
6193   template <typename..., typename T = ::some::valid::ns::ComplexUnion>
6194   FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&> opt_fieldX_ref() const& {
6195     return {this->opt_fieldX, __isset.at(30), __isset.bit(30)};
6196   }
6197 
6198   template <typename..., typename T = ::some::valid::ns::ComplexUnion>
6199   FOLLY_ERASE ::apache::thrift::optional_field_ref<const T&&> opt_fieldX_ref() const&& {
6200     return {static_cast<const T&&>(this->opt_fieldX), __isset.at(30), __isset.bit(30)};
6201   }
6202 
6203   template <typename..., typename T = ::some::valid::ns::ComplexUnion>
6204   FOLLY_ERASE ::apache::thrift::optional_field_ref<T&> opt_fieldX_ref() & {
6205     return {this->opt_fieldX, __isset.at(30), __isset.bit(30)};
6206   }
6207 
6208   template <typename..., typename T = ::some::valid::ns::ComplexUnion>
6209   FOLLY_ERASE ::apache::thrift::optional_field_ref<T&&> opt_fieldX_ref() && {
6210     return {static_cast<T&&>(this->opt_fieldX), __isset.at(30), __isset.bit(30)};
6211   }
6212 
6213   template <typename..., typename T = ::std::vector<::some::valid::ns::ComplexUnion>>
6214   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldY_ref() const& {
6215     return {this->fieldY, __isset.at(31), __isset.bit(31)};
6216   }
6217 
6218   template <typename..., typename T = ::std::vector<::some::valid::ns::ComplexUnion>>
6219   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldY_ref() const&& {
6220     return {static_cast<const T&&>(this->fieldY), __isset.at(31), __isset.bit(31)};
6221   }
6222 
6223   template <typename..., typename T = ::std::vector<::some::valid::ns::ComplexUnion>>
6224   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldY_ref() & {
6225     return {this->fieldY, __isset.at(31), __isset.bit(31)};
6226   }
6227 
6228   template <typename..., typename T = ::std::vector<::some::valid::ns::ComplexUnion>>
6229   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldY_ref() && {
6230     return {static_cast<T&&>(this->fieldY), __isset.at(31), __isset.bit(31)};
6231   }
6232 
6233   template <typename..., typename T = ::some::valid::ns::unionTypeDef>
6234   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldZ_ref() const& {
6235     return {this->fieldZ, __isset.at(32), __isset.bit(32)};
6236   }
6237 
6238   template <typename..., typename T = ::some::valid::ns::unionTypeDef>
6239   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldZ_ref() const&& {
6240     return {static_cast<const T&&>(this->fieldZ), __isset.at(32), __isset.bit(32)};
6241   }
6242 
6243   template <typename..., typename T = ::some::valid::ns::unionTypeDef>
6244   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldZ_ref() & {
6245     return {this->fieldZ, __isset.at(32), __isset.bit(32)};
6246   }
6247 
6248   template <typename..., typename T = ::some::valid::ns::unionTypeDef>
6249   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldZ_ref() && {
6250     return {static_cast<T&&>(this->fieldZ), __isset.at(32), __isset.bit(32)};
6251   }
6252 
6253   template <typename..., typename T = ::std::vector<::some::valid::ns::unionTypeDef>>
6254   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldAA_ref() const& {
6255     return {this->fieldAA, __isset.at(33), __isset.bit(33)};
6256   }
6257 
6258   template <typename..., typename T = ::std::vector<::some::valid::ns::unionTypeDef>>
6259   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldAA_ref() const&& {
6260     return {static_cast<const T&&>(this->fieldAA), __isset.at(33), __isset.bit(33)};
6261   }
6262 
6263   template <typename..., typename T = ::std::vector<::some::valid::ns::unionTypeDef>>
6264   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldAA_ref() & {
6265     return {this->fieldAA, __isset.at(33), __isset.bit(33)};
6266   }
6267 
6268   template <typename..., typename T = ::std::vector<::some::valid::ns::unionTypeDef>>
6269   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldAA_ref() && {
6270     return {static_cast<T&&>(this->fieldAA), __isset.at(33), __isset.bit(33)};
6271   }
6272 
6273   template <typename..., typename T = ::std::map<::some::valid::ns::IndirectionB, ::some::valid::ns::IndirectionC>>
6274   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldAB_ref() const& {
6275     return {this->fieldAB, __isset.at(34), __isset.bit(34)};
6276   }
6277 
6278   template <typename..., typename T = ::std::map<::some::valid::ns::IndirectionB, ::some::valid::ns::IndirectionC>>
6279   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldAB_ref() const&& {
6280     return {static_cast<const T&&>(this->fieldAB), __isset.at(34), __isset.bit(34)};
6281   }
6282 
6283   template <typename..., typename T = ::std::map<::some::valid::ns::IndirectionB, ::some::valid::ns::IndirectionC>>
6284   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldAB_ref() & {
6285     return {this->fieldAB, __isset.at(34), __isset.bit(34)};
6286   }
6287 
6288   template <typename..., typename T = ::std::map<::some::valid::ns::IndirectionB, ::some::valid::ns::IndirectionC>>
6289   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldAB_ref() && {
6290     return {static_cast<T&&>(this->fieldAB), __isset.at(34), __isset.bit(34)};
6291   }
6292 
6293   template <typename..., typename T = ::some::valid::ns::MyEnumB>
6294   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldAC_ref() const& {
6295     return {this->fieldAC, __isset.at(35), __isset.bit(35)};
6296   }
6297 
6298   template <typename..., typename T = ::some::valid::ns::MyEnumB>
6299   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldAC_ref() const&& {
6300     return {static_cast<const T&&>(this->fieldAC), __isset.at(35), __isset.bit(35)};
6301   }
6302 
6303   template <typename..., typename T = ::some::valid::ns::MyEnumB>
6304   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldAC_ref() & {
6305     return {this->fieldAC, __isset.at(35), __isset.bit(35)};
6306   }
6307 
6308   template <typename..., typename T = ::some::valid::ns::MyEnumB>
6309   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldAC_ref() && {
6310     return {static_cast<T&&>(this->fieldAC), __isset.at(35), __isset.bit(35)};
6311   }
6312 
6313   template <typename..., typename T = ::a::different::ns::AnEnum>
6314   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldAD_ref() const& {
6315     return {this->fieldAD, __isset.at(36), __isset.bit(36)};
6316   }
6317 
6318   template <typename..., typename T = ::a::different::ns::AnEnum>
6319   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldAD_ref() const&& {
6320     return {static_cast<const T&&>(this->fieldAD), __isset.at(36), __isset.bit(36)};
6321   }
6322 
6323   template <typename..., typename T = ::a::different::ns::AnEnum>
6324   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldAD_ref() & {
6325     return {this->fieldAD, __isset.at(36), __isset.bit(36)};
6326   }
6327 
6328   template <typename..., typename T = ::a::different::ns::AnEnum>
6329   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldAD_ref() && {
6330     return {static_cast<T&&>(this->fieldAD), __isset.at(36), __isset.bit(36)};
6331   }
6332 
6333   template <typename..., typename T = ::std::map<::std::string, ::std::int32_t>>
6334   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldAE_ref() const& {
6335     return {this->fieldAE, __isset.at(37), __isset.bit(37)};
6336   }
6337 
6338   template <typename..., typename T = ::std::map<::std::string, ::std::int32_t>>
6339   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldAE_ref() const&& {
6340     return {static_cast<const T&&>(this->fieldAE), __isset.at(37), __isset.bit(37)};
6341   }
6342 
6343   template <typename..., typename T = ::std::map<::std::string, ::std::int32_t>>
6344   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldAE_ref() & {
6345     return {this->fieldAE, __isset.at(37), __isset.bit(37)};
6346   }
6347 
6348   template <typename..., typename T = ::std::map<::std::string, ::std::int32_t>>
6349   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldAE_ref() && {
6350     return {static_cast<T&&>(this->fieldAE), __isset.at(37), __isset.bit(37)};
6351   }
6352 
6353   template <typename..., typename T = ::some::valid::ns::IndirectionD>
6354   FOLLY_ERASE ::apache::thrift::field_ref<const T&> fieldSD_ref() const& {
6355     return {this->fieldSD, __isset.at(38), __isset.bit(38)};
6356   }
6357 
6358   template <typename..., typename T = ::some::valid::ns::IndirectionD>
6359   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> fieldSD_ref() const&& {
6360     return {static_cast<const T&&>(this->fieldSD), __isset.at(38), __isset.bit(38)};
6361   }
6362 
6363   template <typename..., typename T = ::some::valid::ns::IndirectionD>
6364   FOLLY_ERASE ::apache::thrift::field_ref<T&> fieldSD_ref() & {
6365     return {this->fieldSD, __isset.at(38), __isset.bit(38)};
6366   }
6367 
6368   template <typename..., typename T = ::some::valid::ns::IndirectionD>
6369   FOLLY_ERASE ::apache::thrift::field_ref<T&&> fieldSD_ref() && {
6370     return {static_cast<T&&>(this->fieldSD), __isset.at(38), __isset.bit(38)};
6371   }
6372 
6373   bool get_fieldA() const {
6374     return fieldA;
6375   }
6376 
6377   [[deprecated("Use `FOO.fieldA_ref() = BAR;` instead of `FOO.set_fieldA(BAR);`")]]
6378   bool& set_fieldA(bool fieldA_) {
6379     fieldA_ref() = fieldA_;
6380     return fieldA;
6381   }
6382 
6383   bool get_req_fieldA() const {
6384     return req_fieldA;
6385   }
6386 
6387   [[deprecated("Use `FOO.req_fieldA_ref() = BAR;` instead of `FOO.set_req_fieldA(BAR);`")]]
6388   bool& set_req_fieldA(bool req_fieldA_) {
6389     req_fieldA_ref() = req_fieldA_;
6390     return req_fieldA;
6391   }
6392 
6393   const bool* get_opt_fieldA() const& {
6394     return opt_fieldA_ref() ? std::addressof(opt_fieldA) : nullptr;
6395   }
6396 
6397   bool* get_opt_fieldA() & {
6398     return opt_fieldA_ref() ? std::addressof(opt_fieldA) : nullptr;
6399   }
6400   bool* get_opt_fieldA() && = delete;
6401 
6402   [[deprecated("Use `FOO.opt_fieldA_ref() = BAR;` instead of `FOO.set_opt_fieldA(BAR);`")]]
6403   bool& set_opt_fieldA(bool opt_fieldA_) {
6404     opt_fieldA_ref() = opt_fieldA_;
6405     return opt_fieldA;
6406   }
6407   const ::std::map<::std::string, bool>& get_fieldB() const&;
6408   ::std::map<::std::string, bool> get_fieldB() &&;
6409 
6410   template <typename T_containerStruct_fieldB_struct_setter = ::std::map<::std::string, bool>>
6411   [[deprecated("Use `FOO.fieldB_ref() = BAR;` instead of `FOO.set_fieldB(BAR);`")]]
6412   ::std::map<::std::string, bool>& set_fieldB(T_containerStruct_fieldB_struct_setter&& fieldB_) {
6413     fieldB_ref() = std::forward<T_containerStruct_fieldB_struct_setter>(fieldB_);
6414     return fieldB;
6415   }
6416   const ::std::map<::std::string, bool>& get_req_fieldB() const&;
6417   ::std::map<::std::string, bool> get_req_fieldB() &&;
6418 
6419   template <typename T_containerStruct_req_fieldB_struct_setter = ::std::map<::std::string, bool>>
6420   [[deprecated("Use `FOO.req_fieldB_ref() = BAR;` instead of `FOO.set_req_fieldB(BAR);`")]]
6421   ::std::map<::std::string, bool>& set_req_fieldB(T_containerStruct_req_fieldB_struct_setter&& req_fieldB_) {
6422     req_fieldB_ref() = std::forward<T_containerStruct_req_fieldB_struct_setter>(req_fieldB_);
6423     return req_fieldB;
6424   }
6425   const ::std::map<::std::string, bool>* get_opt_fieldB() const&;
6426   ::std::map<::std::string, bool>* get_opt_fieldB() &;
6427   ::std::map<::std::string, bool>* get_opt_fieldB() && = delete;
6428 
6429   template <typename T_containerStruct_opt_fieldB_struct_setter = ::std::map<::std::string, bool>>
6430   [[deprecated("Use `FOO.opt_fieldB_ref() = BAR;` instead of `FOO.set_opt_fieldB(BAR);`")]]
6431   ::std::map<::std::string, bool>& set_opt_fieldB(T_containerStruct_opt_fieldB_struct_setter&& opt_fieldB_) {
6432     opt_fieldB_ref() = std::forward<T_containerStruct_opt_fieldB_struct_setter>(opt_fieldB_);
6433     return opt_fieldB;
6434   }
6435   const ::std::set<::std::int32_t>& get_fieldC() const&;
6436   ::std::set<::std::int32_t> get_fieldC() &&;
6437 
6438   template <typename T_containerStruct_fieldC_struct_setter = ::std::set<::std::int32_t>>
6439   [[deprecated("Use `FOO.fieldC_ref() = BAR;` instead of `FOO.set_fieldC(BAR);`")]]
6440   ::std::set<::std::int32_t>& set_fieldC(T_containerStruct_fieldC_struct_setter&& fieldC_) {
6441     fieldC_ref() = std::forward<T_containerStruct_fieldC_struct_setter>(fieldC_);
6442     return fieldC;
6443   }
6444   const ::std::set<::std::int32_t>& get_req_fieldC() const&;
6445   ::std::set<::std::int32_t> get_req_fieldC() &&;
6446 
6447   template <typename T_containerStruct_req_fieldC_struct_setter = ::std::set<::std::int32_t>>
6448   [[deprecated("Use `FOO.req_fieldC_ref() = BAR;` instead of `FOO.set_req_fieldC(BAR);`")]]
6449   ::std::set<::std::int32_t>& set_req_fieldC(T_containerStruct_req_fieldC_struct_setter&& req_fieldC_) {
6450     req_fieldC_ref() = std::forward<T_containerStruct_req_fieldC_struct_setter>(req_fieldC_);
6451     return req_fieldC;
6452   }
6453   const ::std::set<::std::int32_t>* get_opt_fieldC() const&;
6454   ::std::set<::std::int32_t>* get_opt_fieldC() &;
6455   ::std::set<::std::int32_t>* get_opt_fieldC() && = delete;
6456 
6457   template <typename T_containerStruct_opt_fieldC_struct_setter = ::std::set<::std::int32_t>>
6458   [[deprecated("Use `FOO.opt_fieldC_ref() = BAR;` instead of `FOO.set_opt_fieldC(BAR);`")]]
6459   ::std::set<::std::int32_t>& set_opt_fieldC(T_containerStruct_opt_fieldC_struct_setter&& opt_fieldC_) {
6460     opt_fieldC_ref() = std::forward<T_containerStruct_opt_fieldC_struct_setter>(opt_fieldC_);
6461     return opt_fieldC;
6462   }
6463 
6464   const ::std::string& get_fieldD() const& {
6465     return fieldD;
6466   }
6467 
6468   ::std::string get_fieldD() && {
6469     return std::move(fieldD);
6470   }
6471 
6472   template <typename T_containerStruct_fieldD_struct_setter = ::std::string>
6473   [[deprecated("Use `FOO.fieldD_ref() = BAR;` instead of `FOO.set_fieldD(BAR);`")]]
6474   ::std::string& set_fieldD(T_containerStruct_fieldD_struct_setter&& fieldD_) {
6475     fieldD_ref() = std::forward<T_containerStruct_fieldD_struct_setter>(fieldD_);
6476     return fieldD;
6477   }
6478 
6479   const ::std::string& get_fieldE() const& {
6480     return fieldE;
6481   }
6482 
6483   ::std::string get_fieldE() && {
6484     return std::move(fieldE);
6485   }
6486 
6487   template <typename T_containerStruct_fieldE_struct_setter = ::std::string>
6488   [[deprecated("Use `FOO.fieldE_ref() = BAR;` instead of `FOO.set_fieldE(BAR);`")]]
6489   ::std::string& set_fieldE(T_containerStruct_fieldE_struct_setter&& fieldE_) {
6490     fieldE_ref() = std::forward<T_containerStruct_fieldE_struct_setter>(fieldE_);
6491     return fieldE;
6492   }
6493 
6494   const ::std::string& get_req_fieldE() const& {
6495     return req_fieldE;
6496   }
6497 
6498   ::std::string get_req_fieldE() && {
6499     return std::move(req_fieldE);
6500   }
6501 
6502   template <typename T_containerStruct_req_fieldE_struct_setter = ::std::string>
6503   [[deprecated("Use `FOO.req_fieldE_ref() = BAR;` instead of `FOO.set_req_fieldE(BAR);`")]]
6504   ::std::string& set_req_fieldE(T_containerStruct_req_fieldE_struct_setter&& req_fieldE_) {
6505     req_fieldE_ref() = std::forward<T_containerStruct_req_fieldE_struct_setter>(req_fieldE_);
6506     return req_fieldE;
6507   }
6508 
6509   const ::std::string* get_opt_fieldE() const& {
6510     return opt_fieldE_ref() ? std::addressof(opt_fieldE) : nullptr;
6511   }
6512 
6513   ::std::string* get_opt_fieldE() & {
6514     return opt_fieldE_ref() ? std::addressof(opt_fieldE) : nullptr;
6515   }
6516   ::std::string* get_opt_fieldE() && = delete;
6517 
6518   template <typename T_containerStruct_opt_fieldE_struct_setter = ::std::string>
6519   [[deprecated("Use `FOO.opt_fieldE_ref() = BAR;` instead of `FOO.set_opt_fieldE(BAR);`")]]
6520   ::std::string& set_opt_fieldE(T_containerStruct_opt_fieldE_struct_setter&& opt_fieldE_) {
6521     opt_fieldE_ref() = std::forward<T_containerStruct_opt_fieldE_struct_setter>(opt_fieldE_);
6522     return opt_fieldE;
6523   }
6524   const ::std::vector<::std::vector<::std::int32_t>>& get_fieldF() const&;
6525   ::std::vector<::std::vector<::std::int32_t>> get_fieldF() &&;
6526 
6527   template <typename T_containerStruct_fieldF_struct_setter = ::std::vector<::std::vector<::std::int32_t>>>
6528   [[deprecated("Use `FOO.fieldF_ref() = BAR;` instead of `FOO.set_fieldF(BAR);`")]]
6529   ::std::vector<::std::vector<::std::int32_t>>& set_fieldF(T_containerStruct_fieldF_struct_setter&& fieldF_) {
6530     fieldF_ref() = std::forward<T_containerStruct_fieldF_struct_setter>(fieldF_);
6531     return fieldF;
6532   }
6533   const ::std::map<::std::string, ::std::map<::std::string, ::std::map<::std::string, ::std::int32_t>>>& get_fieldG() const&;
6534   ::std::map<::std::string, ::std::map<::std::string, ::std::map<::std::string, ::std::int32_t>>> get_fieldG() &&;
6535 
6536   template <typename T_containerStruct_fieldG_struct_setter = ::std::map<::std::string, ::std::map<::std::string, ::std::map<::std::string, ::std::int32_t>>>>
6537   [[deprecated("Use `FOO.fieldG_ref() = BAR;` instead of `FOO.set_fieldG(BAR);`")]]
6538   ::std::map<::std::string, ::std::map<::std::string, ::std::map<::std::string, ::std::int32_t>>>& set_fieldG(T_containerStruct_fieldG_struct_setter&& fieldG_) {
6539     fieldG_ref() = std::forward<T_containerStruct_fieldG_struct_setter>(fieldG_);
6540     return fieldG;
6541   }
6542   const ::std::vector<::std::set<::std::int32_t>>& get_fieldH() const&;
6543   ::std::vector<::std::set<::std::int32_t>> get_fieldH() &&;
6544 
6545   template <typename T_containerStruct_fieldH_struct_setter = ::std::vector<::std::set<::std::int32_t>>>
6546   [[deprecated("Use `FOO.fieldH_ref() = BAR;` instead of `FOO.set_fieldH(BAR);`")]]
6547   ::std::vector<::std::set<::std::int32_t>>& set_fieldH(T_containerStruct_fieldH_struct_setter&& fieldH_) {
6548     fieldH_ref() = std::forward<T_containerStruct_fieldH_struct_setter>(fieldH_);
6549     return fieldH;
6550   }
6551 
6552   bool get_fieldI() const {
6553     return fieldI;
6554   }
6555 
6556   [[deprecated("Use `FOO.fieldI_ref() = BAR;` instead of `FOO.set_fieldI(BAR);`")]]
6557   bool& set_fieldI(bool fieldI_) {
6558     fieldI_ref() = fieldI_;
6559     return fieldI;
6560   }
6561   const ::std::map<::std::string, ::std::vector<::std::int32_t>>& get_fieldJ() const&;
6562   ::std::map<::std::string, ::std::vector<::std::int32_t>> get_fieldJ() &&;
6563 
6564   template <typename T_containerStruct_fieldJ_struct_setter = ::std::map<::std::string, ::std::vector<::std::int32_t>>>
6565   [[deprecated("Use `FOO.fieldJ_ref() = BAR;` instead of `FOO.set_fieldJ(BAR);`")]]
6566   ::std::map<::std::string, ::std::vector<::std::int32_t>>& set_fieldJ(T_containerStruct_fieldJ_struct_setter&& fieldJ_) {
6567     fieldJ_ref() = std::forward<T_containerStruct_fieldJ_struct_setter>(fieldJ_);
6568     return fieldJ;
6569   }
6570   const ::std::vector<::std::vector<::std::vector<::std::vector<::std::int32_t>>>>& get_fieldK() const&;
6571   ::std::vector<::std::vector<::std::vector<::std::vector<::std::int32_t>>>> get_fieldK() &&;
6572 
6573   template <typename T_containerStruct_fieldK_struct_setter = ::std::vector<::std::vector<::std::vector<::std::vector<::std::int32_t>>>>>
6574   [[deprecated("Use `FOO.fieldK_ref() = BAR;` instead of `FOO.set_fieldK(BAR);`")]]
6575   ::std::vector<::std::vector<::std::vector<::std::vector<::std::int32_t>>>>& set_fieldK(T_containerStruct_fieldK_struct_setter&& fieldK_) {
6576     fieldK_ref() = std::forward<T_containerStruct_fieldK_struct_setter>(fieldK_);
6577     return fieldK;
6578   }
6579   const ::std::set<::std::set<::std::set<bool>>>& get_fieldL() const&;
6580   ::std::set<::std::set<::std::set<bool>>> get_fieldL() &&;
6581 
6582   template <typename T_containerStruct_fieldL_struct_setter = ::std::set<::std::set<::std::set<bool>>>>
6583   [[deprecated("Use `FOO.fieldL_ref() = BAR;` instead of `FOO.set_fieldL(BAR);`")]]
6584   ::std::set<::std::set<::std::set<bool>>>& set_fieldL(T_containerStruct_fieldL_struct_setter&& fieldL_) {
6585     fieldL_ref() = std::forward<T_containerStruct_fieldL_struct_setter>(fieldL_);
6586     return fieldL;
6587   }
6588   const ::std::map<::std::set<::std::vector<::std::int32_t>>, ::std::map<::std::vector<::std::set<::std::string>>, ::std::string>>& get_fieldM() const&;
6589   ::std::map<::std::set<::std::vector<::std::int32_t>>, ::std::map<::std::vector<::std::set<::std::string>>, ::std::string>> get_fieldM() &&;
6590 
6591   template <typename T_containerStruct_fieldM_struct_setter = ::std::map<::std::set<::std::vector<::std::int32_t>>, ::std::map<::std::vector<::std::set<::std::string>>, ::std::string>>>
6592   [[deprecated("Use `FOO.fieldM_ref() = BAR;` instead of `FOO.set_fieldM(BAR);`")]]
6593   ::std::map<::std::set<::std::vector<::std::int32_t>>, ::std::map<::std::vector<::std::set<::std::string>>, ::std::string>>& set_fieldM(T_containerStruct_fieldM_struct_setter&& fieldM_) {
6594     fieldM_ref() = std::forward<T_containerStruct_fieldM_struct_setter>(fieldM_);
6595     return fieldM;
6596   }
6597 
6598   ::some::valid::ns::simpleTypeDef get_fieldN() const {
6599     return fieldN;
6600   }
6601 
6602   [[deprecated("Use `FOO.fieldN_ref() = BAR;` instead of `FOO.set_fieldN(BAR);`")]]
6603   ::some::valid::ns::simpleTypeDef& set_fieldN(::some::valid::ns::simpleTypeDef fieldN_) {
6604     fieldN_ref() = fieldN_;
6605     return fieldN;
6606   }
6607   const ::some::valid::ns::complexStructTypeDef& get_fieldO() const&;
6608   ::some::valid::ns::complexStructTypeDef get_fieldO() &&;
6609 
6610   template <typename T_containerStruct_fieldO_struct_setter = ::some::valid::ns::complexStructTypeDef>
6611   [[deprecated("Use `FOO.fieldO_ref() = BAR;` instead of `FOO.set_fieldO(BAR);`")]]
6612   ::some::valid::ns::complexStructTypeDef& set_fieldO(T_containerStruct_fieldO_struct_setter&& fieldO_) {
6613     fieldO_ref() = std::forward<T_containerStruct_fieldO_struct_setter>(fieldO_);
6614     return fieldO;
6615   }
6616   const ::std::vector<::some::valid::ns::mostComplexTypeDef>& get_fieldP() const&;
6617   ::std::vector<::some::valid::ns::mostComplexTypeDef> get_fieldP() &&;
6618 
6619   template <typename T_containerStruct_fieldP_struct_setter = ::std::vector<::some::valid::ns::mostComplexTypeDef>>
6620   [[deprecated("Use `FOO.fieldP_ref() = BAR;` instead of `FOO.set_fieldP(BAR);`")]]
6621   ::std::vector<::some::valid::ns::mostComplexTypeDef>& set_fieldP(T_containerStruct_fieldP_struct_setter&& fieldP_) {
6622     fieldP_ref() = std::forward<T_containerStruct_fieldP_struct_setter>(fieldP_);
6623     return fieldP;
6624   }
6625 
6626   ::some::valid::ns::MyEnumA get_fieldQ() const {
6627     return fieldQ;
6628   }
6629 
6630   [[deprecated("Use `FOO.fieldQ_ref() = BAR;` instead of `FOO.set_fieldQ(BAR);`")]]
6631   ::some::valid::ns::MyEnumA& set_fieldQ(::some::valid::ns::MyEnumA fieldQ_) {
6632     fieldQ_ref() = fieldQ_;
6633     return fieldQ;
6634   }
6635 
6636   ::some::valid::ns::MyEnumA get_fieldR() const {
6637     return fieldR;
6638   }
6639 
6640   [[deprecated("Use `FOO.fieldR_ref() = BAR;` instead of `FOO.set_fieldR(BAR);`")]]
6641   ::some::valid::ns::MyEnumA& set_fieldR(::some::valid::ns::MyEnumA fieldR_) {
6642     fieldR_ref() = fieldR_;
6643     return fieldR;
6644   }
6645 
6646   ::some::valid::ns::MyEnumA get_req_fieldR() const {
6647     return req_fieldR;
6648   }
6649 
6650   [[deprecated("Use `FOO.req_fieldR_ref() = BAR;` instead of `FOO.set_req_fieldR(BAR);`")]]
6651   ::some::valid::ns::MyEnumA& set_req_fieldR(::some::valid::ns::MyEnumA req_fieldR_) {
6652     req_fieldR_ref() = req_fieldR_;
6653     return req_fieldR;
6654   }
6655 
6656   const ::some::valid::ns::MyEnumA* get_opt_fieldR() const& {
6657     return opt_fieldR_ref() ? std::addressof(opt_fieldR) : nullptr;
6658   }
6659 
6660   ::some::valid::ns::MyEnumA* get_opt_fieldR() & {
6661     return opt_fieldR_ref() ? std::addressof(opt_fieldR) : nullptr;
6662   }
6663   ::some::valid::ns::MyEnumA* get_opt_fieldR() && = delete;
6664 
6665   [[deprecated("Use `FOO.opt_fieldR_ref() = BAR;` instead of `FOO.set_opt_fieldR(BAR);`")]]
6666   ::some::valid::ns::MyEnumA& set_opt_fieldR(::some::valid::ns::MyEnumA opt_fieldR_) {
6667     opt_fieldR_ref() = opt_fieldR_;
6668     return opt_fieldR;
6669   }
6670 
6671   ::some::valid::ns::MyEnumA get_fieldS() const {
6672     return fieldS;
6673   }
6674 
6675   [[deprecated("Use `FOO.fieldS_ref() = BAR;` instead of `FOO.set_fieldS(BAR);`")]]
6676   ::some::valid::ns::MyEnumA& set_fieldS(::some::valid::ns::MyEnumA fieldS_) {
6677     fieldS_ref() = fieldS_;
6678     return fieldS;
6679   }
6680   const ::std::vector<::some::valid::ns::MyEnumA>& get_fieldT() const&;
6681   ::std::vector<::some::valid::ns::MyEnumA> get_fieldT() &&;
6682 
6683   template <typename T_containerStruct_fieldT_struct_setter = ::std::vector<::some::valid::ns::MyEnumA>>
6684   [[deprecated("Use `FOO.fieldT_ref() = BAR;` instead of `FOO.set_fieldT(BAR);`")]]
6685   ::std::vector<::some::valid::ns::MyEnumA>& set_fieldT(T_containerStruct_fieldT_struct_setter&& fieldT_) {
6686     fieldT_ref() = std::forward<T_containerStruct_fieldT_struct_setter>(fieldT_);
6687     return fieldT;
6688   }
6689   const ::std::vector<::some::valid::ns::MyEnumA>& get_fieldU() const&;
6690   ::std::vector<::some::valid::ns::MyEnumA> get_fieldU() &&;
6691 
6692   template <typename T_containerStruct_fieldU_struct_setter = ::std::vector<::some::valid::ns::MyEnumA>>
6693   [[deprecated("Use `FOO.fieldU_ref() = BAR;` instead of `FOO.set_fieldU(BAR);`")]]
6694   ::std::vector<::some::valid::ns::MyEnumA>& set_fieldU(T_containerStruct_fieldU_struct_setter&& fieldU_) {
6695     fieldU_ref() = std::forward<T_containerStruct_fieldU_struct_setter>(fieldU_);
6696     return fieldU;
6697   }
6698   const ::some::valid::ns::MyStruct& get_fieldV() const&;
6699   ::some::valid::ns::MyStruct get_fieldV() &&;
6700 
6701   template <typename T_containerStruct_fieldV_struct_setter = ::some::valid::ns::MyStruct>
6702   [[deprecated("Use `FOO.fieldV_ref() = BAR;` instead of `FOO.set_fieldV(BAR);`")]]
6703   ::some::valid::ns::MyStruct& set_fieldV(T_containerStruct_fieldV_struct_setter&& fieldV_) {
6704     fieldV_ref() = std::forward<T_containerStruct_fieldV_struct_setter>(fieldV_);
6705     return fieldV;
6706   }
6707   const ::some::valid::ns::MyStruct& get_req_fieldV() const&;
6708   ::some::valid::ns::MyStruct get_req_fieldV() &&;
6709 
6710   template <typename T_containerStruct_req_fieldV_struct_setter = ::some::valid::ns::MyStruct>
6711   [[deprecated("Use `FOO.req_fieldV_ref() = BAR;` instead of `FOO.set_req_fieldV(BAR);`")]]
6712   ::some::valid::ns::MyStruct& set_req_fieldV(T_containerStruct_req_fieldV_struct_setter&& req_fieldV_) {
6713     req_fieldV_ref() = std::forward<T_containerStruct_req_fieldV_struct_setter>(req_fieldV_);
6714     return req_fieldV;
6715   }
6716   const ::some::valid::ns::MyStruct* get_opt_fieldV() const&;
6717   ::some::valid::ns::MyStruct* get_opt_fieldV() &;
6718   ::some::valid::ns::MyStruct* get_opt_fieldV() && = delete;
6719 
6720   template <typename T_containerStruct_opt_fieldV_struct_setter = ::some::valid::ns::MyStruct>
6721   [[deprecated("Use `FOO.opt_fieldV_ref() = BAR;` instead of `FOO.set_opt_fieldV(BAR);`")]]
6722   ::some::valid::ns::MyStruct& set_opt_fieldV(T_containerStruct_opt_fieldV_struct_setter&& opt_fieldV_) {
6723     opt_fieldV_ref() = std::forward<T_containerStruct_opt_fieldV_struct_setter>(opt_fieldV_);
6724     return opt_fieldV;
6725   }
6726   const ::std::set<::some::valid::ns::MyStruct>& get_fieldW() const&;
6727   ::std::set<::some::valid::ns::MyStruct> get_fieldW() &&;
6728 
6729   template <typename T_containerStruct_fieldW_struct_setter = ::std::set<::some::valid::ns::MyStruct>>
6730   [[deprecated("Use `FOO.fieldW_ref() = BAR;` instead of `FOO.set_fieldW(BAR);`")]]
6731   ::std::set<::some::valid::ns::MyStruct>& set_fieldW(T_containerStruct_fieldW_struct_setter&& fieldW_) {
6732     fieldW_ref() = std::forward<T_containerStruct_fieldW_struct_setter>(fieldW_);
6733     return fieldW;
6734   }
6735   const ::some::valid::ns::ComplexUnion& get_fieldX() const&;
6736   ::some::valid::ns::ComplexUnion get_fieldX() &&;
6737 
6738   template <typename T_containerStruct_fieldX_struct_setter = ::some::valid::ns::ComplexUnion>
6739   [[deprecated("Use `FOO.fieldX_ref() = BAR;` instead of `FOO.set_fieldX(BAR);`")]]
6740   ::some::valid::ns::ComplexUnion& set_fieldX(T_containerStruct_fieldX_struct_setter&& fieldX_) {
6741     fieldX_ref() = std::forward<T_containerStruct_fieldX_struct_setter>(fieldX_);
6742     return fieldX;
6743   }
6744   const ::some::valid::ns::ComplexUnion& get_req_fieldX() const&;
6745   ::some::valid::ns::ComplexUnion get_req_fieldX() &&;
6746 
6747   template <typename T_containerStruct_req_fieldX_struct_setter = ::some::valid::ns::ComplexUnion>
6748   [[deprecated("Use `FOO.req_fieldX_ref() = BAR;` instead of `FOO.set_req_fieldX(BAR);`")]]
6749   ::some::valid::ns::ComplexUnion& set_req_fieldX(T_containerStruct_req_fieldX_struct_setter&& req_fieldX_) {
6750     req_fieldX_ref() = std::forward<T_containerStruct_req_fieldX_struct_setter>(req_fieldX_);
6751     return req_fieldX;
6752   }
6753   const ::some::valid::ns::ComplexUnion* get_opt_fieldX() const&;
6754   ::some::valid::ns::ComplexUnion* get_opt_fieldX() &;
6755   ::some::valid::ns::ComplexUnion* get_opt_fieldX() && = delete;
6756 
6757   template <typename T_containerStruct_opt_fieldX_struct_setter = ::some::valid::ns::ComplexUnion>
6758   [[deprecated("Use `FOO.opt_fieldX_ref() = BAR;` instead of `FOO.set_opt_fieldX(BAR);`")]]
6759   ::some::valid::ns::ComplexUnion& set_opt_fieldX(T_containerStruct_opt_fieldX_struct_setter&& opt_fieldX_) {
6760     opt_fieldX_ref() = std::forward<T_containerStruct_opt_fieldX_struct_setter>(opt_fieldX_);
6761     return opt_fieldX;
6762   }
6763   const ::std::vector<::some::valid::ns::ComplexUnion>& get_fieldY() const&;
6764   ::std::vector<::some::valid::ns::ComplexUnion> get_fieldY() &&;
6765 
6766   template <typename T_containerStruct_fieldY_struct_setter = ::std::vector<::some::valid::ns::ComplexUnion>>
6767   [[deprecated("Use `FOO.fieldY_ref() = BAR;` instead of `FOO.set_fieldY(BAR);`")]]
6768   ::std::vector<::some::valid::ns::ComplexUnion>& set_fieldY(T_containerStruct_fieldY_struct_setter&& fieldY_) {
6769     fieldY_ref() = std::forward<T_containerStruct_fieldY_struct_setter>(fieldY_);
6770     return fieldY;
6771   }
6772   const ::some::valid::ns::unionTypeDef& get_fieldZ() const&;
6773   ::some::valid::ns::unionTypeDef get_fieldZ() &&;
6774 
6775   template <typename T_containerStruct_fieldZ_struct_setter = ::some::valid::ns::unionTypeDef>
6776   [[deprecated("Use `FOO.fieldZ_ref() = BAR;` instead of `FOO.set_fieldZ(BAR);`")]]
6777   ::some::valid::ns::unionTypeDef& set_fieldZ(T_containerStruct_fieldZ_struct_setter&& fieldZ_) {
6778     fieldZ_ref() = std::forward<T_containerStruct_fieldZ_struct_setter>(fieldZ_);
6779     return fieldZ;
6780   }
6781   const ::std::vector<::some::valid::ns::unionTypeDef>& get_fieldAA() const&;
6782   ::std::vector<::some::valid::ns::unionTypeDef> get_fieldAA() &&;
6783 
6784   template <typename T_containerStruct_fieldAA_struct_setter = ::std::vector<::some::valid::ns::unionTypeDef>>
6785   [[deprecated("Use `FOO.fieldAA_ref() = BAR;` instead of `FOO.set_fieldAA(BAR);`")]]
6786   ::std::vector<::some::valid::ns::unionTypeDef>& set_fieldAA(T_containerStruct_fieldAA_struct_setter&& fieldAA_) {
6787     fieldAA_ref() = std::forward<T_containerStruct_fieldAA_struct_setter>(fieldAA_);
6788     return fieldAA;
6789   }
6790   const ::std::map<::some::valid::ns::IndirectionB, ::some::valid::ns::IndirectionC>& get_fieldAB() const&;
6791   ::std::map<::some::valid::ns::IndirectionB, ::some::valid::ns::IndirectionC> get_fieldAB() &&;
6792 
6793   template <typename T_containerStruct_fieldAB_struct_setter = ::std::map<::some::valid::ns::IndirectionB, ::some::valid::ns::IndirectionC>>
6794   [[deprecated("Use `FOO.fieldAB_ref() = BAR;` instead of `FOO.set_fieldAB(BAR);`")]]
6795   ::std::map<::some::valid::ns::IndirectionB, ::some::valid::ns::IndirectionC>& set_fieldAB(T_containerStruct_fieldAB_struct_setter&& fieldAB_) {
6796     fieldAB_ref() = std::forward<T_containerStruct_fieldAB_struct_setter>(fieldAB_);
6797     return fieldAB;
6798   }
6799 
6800   ::some::valid::ns::MyEnumB get_fieldAC() const {
6801     return fieldAC;
6802   }
6803 
6804   [[deprecated("Use `FOO.fieldAC_ref() = BAR;` instead of `FOO.set_fieldAC(BAR);`")]]
6805   ::some::valid::ns::MyEnumB& set_fieldAC(::some::valid::ns::MyEnumB fieldAC_) {
6806     fieldAC_ref() = fieldAC_;
6807     return fieldAC;
6808   }
6809 
6810   ::a::different::ns::AnEnum get_fieldAD() const {
6811     return fieldAD;
6812   }
6813 
6814   [[deprecated("Use `FOO.fieldAD_ref() = BAR;` instead of `FOO.set_fieldAD(BAR);`")]]
6815   ::a::different::ns::AnEnum& set_fieldAD(::a::different::ns::AnEnum fieldAD_) {
6816     fieldAD_ref() = fieldAD_;
6817     return fieldAD;
6818   }
6819   const ::std::map<::std::string, ::std::int32_t>& get_fieldAE() const&;
6820   ::std::map<::std::string, ::std::int32_t> get_fieldAE() &&;
6821 
6822   template <typename T_containerStruct_fieldAE_struct_setter = ::std::map<::std::string, ::std::int32_t>>
6823   [[deprecated("Use `FOO.fieldAE_ref() = BAR;` instead of `FOO.set_fieldAE(BAR);`")]]
6824   ::std::map<::std::string, ::std::int32_t>& set_fieldAE(T_containerStruct_fieldAE_struct_setter&& fieldAE_) {
6825     fieldAE_ref() = std::forward<T_containerStruct_fieldAE_struct_setter>(fieldAE_);
6826     return fieldAE;
6827   }
6828 
6829   const ::some::valid::ns::IndirectionD& get_fieldSD() const& {
6830     return fieldSD;
6831   }
6832 
6833   ::some::valid::ns::IndirectionD get_fieldSD() && {
6834     return std::move(fieldSD);
6835   }
6836 
6837   template <typename T_containerStruct_fieldSD_struct_setter = ::some::valid::ns::IndirectionD>
6838   [[deprecated("Use `FOO.fieldSD_ref() = BAR;` instead of `FOO.set_fieldSD(BAR);`")]]
6839   ::some::valid::ns::IndirectionD& set_fieldSD(T_containerStruct_fieldSD_struct_setter&& fieldSD_) {
6840     fieldSD_ref() = std::forward<T_containerStruct_fieldSD_struct_setter>(fieldSD_);
6841     return fieldSD;
6842   }
6843 
6844   template <class Protocol_>
6845   uint32_t read(Protocol_* iprot);
6846   template <class Protocol_>
6847   uint32_t serializedSize(Protocol_ const* prot_) const;
6848   template <class Protocol_>
6849   uint32_t serializedSizeZC(Protocol_ const* prot_) const;
6850   template <class Protocol_>
6851   uint32_t write(Protocol_* prot_) const;
6852   // user defined code (cpp2.methods = ...)
6853   void foo(const std::string& bar) {}
6854 
6855  private:
6856   template <class Protocol_>
6857   void readNoXfer(Protocol_* iprot);
6858 
6859   friend class ::apache::thrift::Cpp2Ops<containerStruct>;
6860   friend void swap(containerStruct& a, containerStruct& b);
6861 };
6862 
6863 template <class Protocol_>
6864 uint32_t containerStruct::read(Protocol_* iprot) {
6865   auto _xferStart = iprot->getCursorPosition();
6866   readNoXfer(iprot);
6867   return iprot->getCursorPosition() - _xferStart;
6868 }
6869 
6870 }}} // some::valid::ns
6871 namespace some { namespace valid { namespace ns {
6872 class MyIncludedStruct final  {
6873  private:
6874   friend struct ::apache::thrift::detail::st::struct_private_access;
6875 
6876   //  used by a static_assert in the corresponding source
6877   static constexpr bool __fbthrift_cpp2_gen_json = true;
6878   static constexpr bool __fbthrift_cpp2_gen_nimble = false;
6879   static constexpr bool __fbthrift_cpp2_gen_has_thrift_uri = false;
6880 
6881   void __fbthrift_clear();
6882 
6883  public:
6884   using __fbthrift_cpp2_type = MyIncludedStruct;
6885   static constexpr bool __fbthrift_cpp2_is_union =
6886     false;
6887 
6888 
6889  public:
6890 
6891   MyIncludedStruct() :
6892       __fbthrift_field_MyIncludedInt(static_cast<::a::different::ns::IncludedInt64>(42)),
6893       ARefField(std::make_unique<::some::valid::ns::AStruct>()) {
6894   }
6895   // FragileConstructor for use in initialization lists only.
6896   [[deprecated("This constructor is deprecated")]]
6897   MyIncludedStruct(apache::thrift::FragileConstructor, ::a::different::ns::IncludedInt64 MyIncludedInt__arg, ::some::valid::ns::AStruct MyIncludedStruct__arg, ::std::unique_ptr<::some::valid::ns::AStruct> ARefField__arg, ::some::valid::ns::AStruct ARequiredField__arg);
6898 
6899   MyIncludedStruct(MyIncludedStruct&&) noexcept;
6900   MyIncludedStruct(const MyIncludedStruct& src);
6901 
6902 
6903   MyIncludedStruct& operator=(MyIncludedStruct&&) noexcept;
6904   MyIncludedStruct& operator=(const MyIncludedStruct& src);
6905  private:
6906   ::a::different::ns::IncludedInt64 __fbthrift_field_MyIncludedInt;
6907  private:
6908   ::some::valid::ns::AStruct __fbthrift_field_MyIncludedStruct;
6909  public:
6910   ::std::unique_ptr<::some::valid::ns::AStruct> ARefField;
6911  public:
6912   ::some::valid::ns::AStruct ARequiredField;
6913  private:
6914   apache::thrift::detail::isset_bitset<2, false> __isset;
6915 
6916  public:
6917 
6918   bool operator==(const MyIncludedStruct&) const;
6919   bool operator<(const MyIncludedStruct&) const;
6920 
6921   template <typename..., typename T = ::a::different::ns::IncludedInt64>
6922   FOLLY_ERASE ::apache::thrift::field_ref<const T&> MyIncludedInt_ref() const& {
6923     return {this->__fbthrift_field_MyIncludedInt, __isset.at(0), __isset.bit(0)};
6924   }
6925 
6926   template <typename..., typename T = ::a::different::ns::IncludedInt64>
6927   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> MyIncludedInt_ref() const&& {
6928     return {static_cast<const T&&>(this->__fbthrift_field_MyIncludedInt), __isset.at(0), __isset.bit(0)};
6929   }
6930 
6931   template <typename..., typename T = ::a::different::ns::IncludedInt64>
6932   FOLLY_ERASE ::apache::thrift::field_ref<T&> MyIncludedInt_ref() & {
6933     return {this->__fbthrift_field_MyIncludedInt, __isset.at(0), __isset.bit(0)};
6934   }
6935 
6936   template <typename..., typename T = ::a::different::ns::IncludedInt64>
6937   FOLLY_ERASE ::apache::thrift::field_ref<T&&> MyIncludedInt_ref() && {
6938     return {static_cast<T&&>(this->__fbthrift_field_MyIncludedInt), __isset.at(0), __isset.bit(0)};
6939   }
6940 
6941   template <typename..., typename T = ::a::different::ns::IncludedInt64>
6942   FOLLY_ERASE ::apache::thrift::field_ref<const T&> MyIncludedInt() const& {
6943     return {this->__fbthrift_field_MyIncludedInt, __isset.at(0), __isset.bit(0)};
6944   }
6945 
6946   template <typename..., typename T = ::a::different::ns::IncludedInt64>
6947   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> MyIncludedInt() const&& {
6948     return {static_cast<const T&&>(this->__fbthrift_field_MyIncludedInt), __isset.at(0), __isset.bit(0)};
6949   }
6950 
6951   template <typename..., typename T = ::a::different::ns::IncludedInt64>
6952   FOLLY_ERASE ::apache::thrift::field_ref<T&> MyIncludedInt() & {
6953     return {this->__fbthrift_field_MyIncludedInt, __isset.at(0), __isset.bit(0)};
6954   }
6955 
6956   template <typename..., typename T = ::a::different::ns::IncludedInt64>
6957   FOLLY_ERASE ::apache::thrift::field_ref<T&&> MyIncludedInt() && {
6958     return {static_cast<T&&>(this->__fbthrift_field_MyIncludedInt), __isset.at(0), __isset.bit(0)};
6959   }
6960 
6961   template <typename..., typename T = ::some::valid::ns::AStruct>
6962   FOLLY_ERASE ::apache::thrift::field_ref<const T&> MyIncludedStruct_ref() const& {
6963     return {this->__fbthrift_field_MyIncludedStruct, __isset.at(1), __isset.bit(1)};
6964   }
6965 
6966   template <typename..., typename T = ::some::valid::ns::AStruct>
6967   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> MyIncludedStruct_ref() const&& {
6968     return {static_cast<const T&&>(this->__fbthrift_field_MyIncludedStruct), __isset.at(1), __isset.bit(1)};
6969   }
6970 
6971   template <typename..., typename T = ::some::valid::ns::AStruct>
6972   FOLLY_ERASE ::apache::thrift::field_ref<T&> MyIncludedStruct_ref() & {
6973     return {this->__fbthrift_field_MyIncludedStruct, __isset.at(1), __isset.bit(1)};
6974   }
6975 
6976   template <typename..., typename T = ::some::valid::ns::AStruct>
6977   FOLLY_ERASE ::apache::thrift::field_ref<T&&> MyIncludedStruct_ref() && {
6978     return {static_cast<T&&>(this->__fbthrift_field_MyIncludedStruct), __isset.at(1), __isset.bit(1)};
6979   }
6980 
6981   template <typename..., typename T = ::some::valid::ns::AStruct>
6982   FOLLY_ERASE ::apache::thrift::field_ref<const T&> MyIncludedStruct() const& {
6983     return {this->__fbthrift_field_MyIncludedStruct, __isset.at(1), __isset.bit(1)};
6984   }
6985 
6986   template <typename..., typename T = ::some::valid::ns::AStruct>
6987   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> MyIncludedStruct() const&& {
6988     return {static_cast<const T&&>(this->__fbthrift_field_MyIncludedStruct), __isset.at(1), __isset.bit(1)};
6989   }
6990 
6991   template <typename..., typename T = ::some::valid::ns::AStruct>
6992   FOLLY_ERASE ::apache::thrift::field_ref<T&> MyIncludedStruct() & {
6993     return {this->__fbthrift_field_MyIncludedStruct, __isset.at(1), __isset.bit(1)};
6994   }
6995 
6996   template <typename..., typename T = ::some::valid::ns::AStruct>
6997   FOLLY_ERASE ::apache::thrift::field_ref<T&&> MyIncludedStruct() && {
6998     return {static_cast<T&&>(this->__fbthrift_field_MyIncludedStruct), __isset.at(1), __isset.bit(1)};
6999   }
7000   template <typename ..., typename T = ::std::unique_ptr<::some::valid::ns::AStruct>>
7001   FOLLY_ERASE T& ARefField_ref() & { return ARefField; }
7002 
7003   template <typename ..., typename T = ::std::unique_ptr<::some::valid::ns::AStruct>>
7004   FOLLY_ERASE const T& ARefField_ref() const& { return ARefField; }
7005 
7006   template <typename ..., typename T = ::std::unique_ptr<::some::valid::ns::AStruct>>
7007   FOLLY_ERASE T&& ARefField_ref() && { return static_cast<T&&>(ARefField); }
7008 
7009   template <typename ..., typename T = ::std::unique_ptr<::some::valid::ns::AStruct>>
7010   FOLLY_ERASE const T&& ARefField_ref() const&& { return static_cast<const T&&>(ARefField); }
7011 
7012   template <typename..., typename T = ::some::valid::ns::AStruct>
7013   FOLLY_ERASE ::apache::thrift::required_field_ref<const T&> ARequiredField_ref() const& {
7014     return ::apache::thrift::required_field_ref<const T&>{this->ARequiredField};
7015   }
7016 
7017   template <typename..., typename T = ::some::valid::ns::AStruct>
7018   FOLLY_ERASE ::apache::thrift::required_field_ref<const T&&> ARequiredField_ref() const&& {
7019     return ::apache::thrift::required_field_ref<const T&&>{static_cast<const T&&>(this->ARequiredField)};
7020   }
7021 
7022   template <typename..., typename T = ::some::valid::ns::AStruct>
7023   FOLLY_ERASE ::apache::thrift::required_field_ref<T&> ARequiredField_ref() & {
7024     return ::apache::thrift::required_field_ref<T&>{this->ARequiredField};
7025   }
7026 
7027   template <typename..., typename T = ::some::valid::ns::AStruct>
7028   FOLLY_ERASE ::apache::thrift::required_field_ref<T&&> ARequiredField_ref() && {
7029     return ::apache::thrift::required_field_ref<T&&>{static_cast<T&&>(this->ARequiredField)};
7030   }
7031 
7032   ::a::different::ns::IncludedInt64 get_MyIncludedInt() const {
7033     return __fbthrift_field_MyIncludedInt;
7034   }
7035 
7036   [[deprecated("Use `FOO.MyIncludedInt_ref() = BAR;` instead of `FOO.set_MyIncludedInt(BAR);`")]]
7037   ::a::different::ns::IncludedInt64& set_MyIncludedInt(::a::different::ns::IncludedInt64 MyIncludedInt_) {
7038     MyIncludedInt_ref() = MyIncludedInt_;
7039     return __fbthrift_field_MyIncludedInt;
7040   }
7041   const ::some::valid::ns::AStruct& get_MyIncludedStruct() const&;
7042   ::some::valid::ns::AStruct get_MyIncludedStruct() &&;
7043 
7044   template <typename T_MyIncludedStruct_MyIncludedStruct_struct_setter = ::some::valid::ns::AStruct>
7045   [[deprecated("Use `FOO.MyIncludedStruct_ref() = BAR;` instead of `FOO.set_MyIncludedStruct(BAR);`")]]
7046   ::some::valid::ns::AStruct& set_MyIncludedStruct(T_MyIncludedStruct_MyIncludedStruct_struct_setter&& MyIncludedStruct_) {
7047     MyIncludedStruct_ref() = std::forward<T_MyIncludedStruct_MyIncludedStruct_struct_setter>(MyIncludedStruct_);
7048     return __fbthrift_field_MyIncludedStruct;
7049   }
7050   const ::some::valid::ns::AStruct& get_ARequiredField() const&;
7051   ::some::valid::ns::AStruct get_ARequiredField() &&;
7052 
7053   template <typename T_MyIncludedStruct_ARequiredField_struct_setter = ::some::valid::ns::AStruct>
7054   [[deprecated("Use `FOO.ARequiredField_ref() = BAR;` instead of `FOO.set_ARequiredField(BAR);`")]]
7055   ::some::valid::ns::AStruct& set_ARequiredField(T_MyIncludedStruct_ARequiredField_struct_setter&& ARequiredField_) {
7056     ARequiredField_ref() = std::forward<T_MyIncludedStruct_ARequiredField_struct_setter>(ARequiredField_);
7057     return ARequiredField;
7058   }
7059 
7060   template <class Protocol_>
7061   uint32_t read(Protocol_* iprot);
7062   template <class Protocol_>
7063   uint32_t serializedSize(Protocol_ const* prot_) const;
7064   template <class Protocol_>
7065   uint32_t serializedSizeZC(Protocol_ const* prot_) const;
7066   template <class Protocol_>
7067   uint32_t write(Protocol_* prot_) const;
7068 
7069  private:
7070   template <class Protocol_>
7071   void readNoXfer(Protocol_* iprot);
7072 
7073   friend class ::apache::thrift::Cpp2Ops<MyIncludedStruct>;
7074   friend void swap(MyIncludedStruct& a, MyIncludedStruct& b);
7075 };
7076 
7077 template <class Protocol_>
7078 uint32_t MyIncludedStruct::read(Protocol_* iprot) {
7079   auto _xferStart = iprot->getCursorPosition();
7080   readNoXfer(iprot);
7081   return iprot->getCursorPosition() - _xferStart;
7082 }
7083 
7084 }}} // some::valid::ns
7085 namespace some { namespace valid { namespace ns {
7086 class AnnotatedStruct  {
7087  private:
7088   friend struct ::apache::thrift::detail::st::struct_private_access;
7089 
7090   //  used by a static_assert in the corresponding source
7091   static constexpr bool __fbthrift_cpp2_gen_json = true;
7092   static constexpr bool __fbthrift_cpp2_gen_nimble = false;
7093   static constexpr bool __fbthrift_cpp2_gen_has_thrift_uri = false;
7094 
7095   void __fbthrift_clear();
7096 
7097  public:
7098   using __fbthrift_cpp2_type = AnnotatedStruct;
7099   static constexpr bool __fbthrift_cpp2_is_union =
7100     false;
7101 
7102 
7103  public:
7104 
7105   AnnotatedStruct();
7106 
7107   // FragileConstructor for use in initialization lists only.
7108   [[deprecated("This constructor is deprecated")]]
7109   AnnotatedStruct(apache::thrift::FragileConstructor, ::some::valid::ns::containerStruct no_annotation__arg, ::std::unique_ptr<::some::valid::ns::containerStruct> cpp_unique_ref__arg, ::std::unique_ptr<::some::valid::ns::containerStruct> cpp2_unique_ref__arg, ::std::unique_ptr<::std::map<::std::int32_t, ::std::vector<::std::string>>> container_with_ref__arg, ::std::unique_ptr<::some::valid::ns::containerStruct> req_cpp_unique_ref__arg, ::std::unique_ptr<::some::valid::ns::containerStruct> req_cpp2_unique_ref__arg, ::std::unique_ptr<::std::vector<::std::string>> req_container_with_ref__arg, ::std::unique_ptr<::some::valid::ns::containerStruct> opt_cpp_unique_ref__arg, ::std::unique_ptr<::some::valid::ns::containerStruct> opt_cpp2_unique_ref__arg, ::std::unique_ptr<::std::set<::std::int32_t>> opt_container_with_ref__arg, ::std::unique_ptr<::some::valid::ns::containerStruct> ref_type_unique__arg, ::std::shared_ptr<::some::valid::ns::containerStruct> ref_type_shared__arg, ::std::shared_ptr<const ::std::map<::std::int32_t, ::std::vector<::std::string>>> ref_type_const__arg, ::std::shared_ptr<::some::valid::ns::containerStruct> req_ref_type_shared__arg, ::std::shared_ptr<const ::some::valid::ns::containerStruct> req_ref_type_const__arg, ::std::unique_ptr<::std::vector<::std::string>> req_ref_type_unique__arg, ::std::shared_ptr<const ::some::valid::ns::containerStruct> opt_ref_type_const__arg, ::std::unique_ptr<::some::valid::ns::containerStruct> opt_ref_type_unique__arg, ::std::shared_ptr<::std::set<::std::int32_t>> opt_ref_type_shared__arg, ::some::valid::ns::CppFakeI32 base_type__arg, ::some::valid::ns::FollySmallVectorI64 list_type__arg, ::some::valid::ns::SortedVectorSetString set_type__arg, ::some::valid::ns::FakeMap map_type__arg, ::some::valid::ns::UnorderedMapStruct map_struct_type__arg, ::some::valid::ns::IOBuf iobuf_type__arg, ::some::valid::ns::IOBufPtr iobuf_ptr__arg, std::list<::std::int32_t> list_i32_template__arg, std::deque<::std::string> list_string_template__arg, folly::sorted_vector_set<::std::string> set_template__arg, folly::sorted_vector_map<::std::int64_t, ::std::string> map_template__arg, ::some::valid::ns::std_list typedef_list_template__arg, ::some::valid::ns::std_deque typedef_deque_template__arg, ::some::valid::ns::folly_set typedef_set_template__arg, ::some::valid::ns::folly_map typedef_map_template__arg, ::some::valid::ns::IndirectionA indirection_a__arg, ::std::vector<::some::valid::ns::IndirectionB> indirection_b__arg, ::std::set<::some::valid::ns::IndirectionC> indirection_c__arg, ::some::valid::ns::IOBuf iobuf_type_val__arg, ::some::valid::ns::IOBufPtr iobuf_ptr_val__arg, ::some::valid::ns::containerStruct struct_struct__arg);
7110 
7111   AnnotatedStruct(AnnotatedStruct&&) = default;
7112 
7113 
7114   AnnotatedStruct& operator=(AnnotatedStruct&&) = default;
7115 
7116   virtual ~AnnotatedStruct();
7117 
7118  private:
7119   ::some::valid::ns::containerStruct no_annotation;
7120  public:
7121   ::std::unique_ptr<::some::valid::ns::containerStruct> cpp_unique_ref;
7122  public:
7123   ::std::unique_ptr<::some::valid::ns::containerStruct> cpp2_unique_ref;
7124  public:
7125   ::std::unique_ptr<::std::map<::std::int32_t, ::std::vector<::std::string>>> container_with_ref;
7126  public:
7127   ::std::unique_ptr<::some::valid::ns::containerStruct> req_cpp_unique_ref;
7128  public:
7129   ::std::unique_ptr<::some::valid::ns::containerStruct> req_cpp2_unique_ref;
7130  public:
7131   ::std::unique_ptr<::std::vector<::std::string>> req_container_with_ref;
7132  public:
7133   ::std::unique_ptr<::some::valid::ns::containerStruct> opt_cpp_unique_ref;
7134  public:
7135   ::std::unique_ptr<::some::valid::ns::containerStruct> opt_cpp2_unique_ref;
7136  public:
7137   ::std::unique_ptr<::std::set<::std::int32_t>> opt_container_with_ref;
7138  public:
7139   ::std::unique_ptr<::some::valid::ns::containerStruct> ref_type_unique;
7140  public:
7141   ::std::shared_ptr<::some::valid::ns::containerStruct> ref_type_shared;
7142  public:
7143   ::std::shared_ptr<const ::std::map<::std::int32_t, ::std::vector<::std::string>>> ref_type_const;
7144  public:
7145   ::std::shared_ptr<::some::valid::ns::containerStruct> req_ref_type_shared;
7146  public:
7147   ::std::shared_ptr<const ::some::valid::ns::containerStruct> req_ref_type_const;
7148  public:
7149   ::std::unique_ptr<::std::vector<::std::string>> req_ref_type_unique;
7150  public:
7151   ::std::shared_ptr<const ::some::valid::ns::containerStruct> opt_ref_type_const;
7152  public:
7153   ::std::unique_ptr<::some::valid::ns::containerStruct> opt_ref_type_unique;
7154  public:
7155   ::std::shared_ptr<::std::set<::std::int32_t>> opt_ref_type_shared;
7156  private:
7157   ::some::valid::ns::CppFakeI32 base_type;
7158  private:
7159   ::some::valid::ns::FollySmallVectorI64 list_type;
7160  private:
7161   ::some::valid::ns::SortedVectorSetString set_type;
7162  private:
7163   ::some::valid::ns::FakeMap map_type;
7164  private:
7165   ::some::valid::ns::UnorderedMapStruct map_struct_type;
7166  private:
7167   ::some::valid::ns::IOBuf iobuf_type;
7168  public:
7169   ::some::valid::ns::IOBufPtr iobuf_ptr;
7170  private:
7171   std::list<::std::int32_t> list_i32_template;
7172  private:
7173   std::deque<::std::string> list_string_template;
7174  private:
7175   folly::sorted_vector_set<::std::string> set_template;
7176  private:
7177   folly::sorted_vector_map<::std::int64_t, ::std::string> map_template;
7178  private:
7179   ::some::valid::ns::std_list typedef_list_template;
7180  private:
7181   ::some::valid::ns::std_deque typedef_deque_template;
7182  private:
7183   ::some::valid::ns::folly_set typedef_set_template;
7184  private:
7185   ::some::valid::ns::folly_map typedef_map_template;
7186  private:
7187   ::some::valid::ns::IndirectionA indirection_a;
7188  private:
7189   ::std::vector<::some::valid::ns::IndirectionB> indirection_b;
7190  private:
7191   ::std::set<::some::valid::ns::IndirectionC> indirection_c;
7192  private:
7193   ::some::valid::ns::IOBuf iobuf_type_val;
7194  public:
7195   ::some::valid::ns::IOBufPtr iobuf_ptr_val;
7196  private:
7197   ::some::valid::ns::containerStruct struct_struct;
7198  private:
7199   apache::thrift::detail::isset_bitset<22, false> __isset;
7200 
7201  public:
7202 
7203   bool operator==(const AnnotatedStruct&) const;
7204   bool operator<(const AnnotatedStruct&) const;
7205 
7206   template <typename..., typename T = ::some::valid::ns::containerStruct>
7207   FOLLY_ERASE ::apache::thrift::field_ref<const T&> no_annotation_ref() const& {
7208     return {this->no_annotation, __isset.at(0), __isset.bit(0)};
7209   }
7210 
7211   template <typename..., typename T = ::some::valid::ns::containerStruct>
7212   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> no_annotation_ref() const&& {
7213     return {static_cast<const T&&>(this->no_annotation), __isset.at(0), __isset.bit(0)};
7214   }
7215 
7216   template <typename..., typename T = ::some::valid::ns::containerStruct>
7217   FOLLY_ERASE ::apache::thrift::field_ref<T&> no_annotation_ref() & {
7218     return {this->no_annotation, __isset.at(0), __isset.bit(0)};
7219   }
7220 
7221   template <typename..., typename T = ::some::valid::ns::containerStruct>
7222   FOLLY_ERASE ::apache::thrift::field_ref<T&&> no_annotation_ref() && {
7223     return {static_cast<T&&>(this->no_annotation), __isset.at(0), __isset.bit(0)};
7224   }
7225   template <typename ..., typename T = ::std::unique_ptr<::some::valid::ns::containerStruct>>
7226   FOLLY_ERASE T& cpp_unique_ref_ref() & { return cpp_unique_ref; }
7227 
7228   template <typename ..., typename T = ::std::unique_ptr<::some::valid::ns::containerStruct>>
7229   FOLLY_ERASE const T& cpp_unique_ref_ref() const& { return cpp_unique_ref; }
7230 
7231   template <typename ..., typename T = ::std::unique_ptr<::some::valid::ns::containerStruct>>
7232   FOLLY_ERASE T&& cpp_unique_ref_ref() && { return static_cast<T&&>(cpp_unique_ref); }
7233 
7234   template <typename ..., typename T = ::std::unique_ptr<::some::valid::ns::containerStruct>>
7235   FOLLY_ERASE const T&& cpp_unique_ref_ref() const&& { return static_cast<const T&&>(cpp_unique_ref); }
7236   template <typename ..., typename T = ::std::unique_ptr<::some::valid::ns::containerStruct>>
7237   FOLLY_ERASE T& cpp2_unique_ref_ref() & { return cpp2_unique_ref; }
7238 
7239   template <typename ..., typename T = ::std::unique_ptr<::some::valid::ns::containerStruct>>
7240   FOLLY_ERASE const T& cpp2_unique_ref_ref() const& { return cpp2_unique_ref; }
7241 
7242   template <typename ..., typename T = ::std::unique_ptr<::some::valid::ns::containerStruct>>
7243   FOLLY_ERASE T&& cpp2_unique_ref_ref() && { return static_cast<T&&>(cpp2_unique_ref); }
7244 
7245   template <typename ..., typename T = ::std::unique_ptr<::some::valid::ns::containerStruct>>
7246   FOLLY_ERASE const T&& cpp2_unique_ref_ref() const&& { return static_cast<const T&&>(cpp2_unique_ref); }
7247   template <typename ..., typename T = ::std::unique_ptr<::std::map<::std::int32_t, ::std::vector<::std::string>>>>
7248   FOLLY_ERASE T& container_with_ref_ref() & { return container_with_ref; }
7249 
7250   template <typename ..., typename T = ::std::unique_ptr<::std::map<::std::int32_t, ::std::vector<::std::string>>>>
7251   FOLLY_ERASE const T& container_with_ref_ref() const& { return container_with_ref; }
7252 
7253   template <typename ..., typename T = ::std::unique_ptr<::std::map<::std::int32_t, ::std::vector<::std::string>>>>
7254   FOLLY_ERASE T&& container_with_ref_ref() && { return static_cast<T&&>(container_with_ref); }
7255 
7256   template <typename ..., typename T = ::std::unique_ptr<::std::map<::std::int32_t, ::std::vector<::std::string>>>>
7257   FOLLY_ERASE const T&& container_with_ref_ref() const&& { return static_cast<const T&&>(container_with_ref); }
7258   template <typename ..., typename T = ::std::unique_ptr<::some::valid::ns::containerStruct>>
7259   FOLLY_ERASE T& req_cpp_unique_ref_ref() & { return req_cpp_unique_ref; }
7260 
7261   template <typename ..., typename T = ::std::unique_ptr<::some::valid::ns::containerStruct>>
7262   FOLLY_ERASE const T& req_cpp_unique_ref_ref() const& { return req_cpp_unique_ref; }
7263 
7264   template <typename ..., typename T = ::std::unique_ptr<::some::valid::ns::containerStruct>>
7265   FOLLY_ERASE T&& req_cpp_unique_ref_ref() && { return static_cast<T&&>(req_cpp_unique_ref); }
7266 
7267   template <typename ..., typename T = ::std::unique_ptr<::some::valid::ns::containerStruct>>
7268   FOLLY_ERASE const T&& req_cpp_unique_ref_ref() const&& { return static_cast<const T&&>(req_cpp_unique_ref); }
7269   template <typename ..., typename T = ::std::unique_ptr<::some::valid::ns::containerStruct>>
7270   FOLLY_ERASE T& req_cpp2_unique_ref_ref() & { return req_cpp2_unique_ref; }
7271 
7272   template <typename ..., typename T = ::std::unique_ptr<::some::valid::ns::containerStruct>>
7273   FOLLY_ERASE const T& req_cpp2_unique_ref_ref() const& { return req_cpp2_unique_ref; }
7274 
7275   template <typename ..., typename T = ::std::unique_ptr<::some::valid::ns::containerStruct>>
7276   FOLLY_ERASE T&& req_cpp2_unique_ref_ref() && { return static_cast<T&&>(req_cpp2_unique_ref); }
7277 
7278   template <typename ..., typename T = ::std::unique_ptr<::some::valid::ns::containerStruct>>
7279   FOLLY_ERASE const T&& req_cpp2_unique_ref_ref() const&& { return static_cast<const T&&>(req_cpp2_unique_ref); }
7280   template <typename ..., typename T = ::std::unique_ptr<::std::vector<::std::string>>>
7281   FOLLY_ERASE T& req_container_with_ref_ref() & { return req_container_with_ref; }
7282 
7283   template <typename ..., typename T = ::std::unique_ptr<::std::vector<::std::string>>>
7284   FOLLY_ERASE const T& req_container_with_ref_ref() const& { return req_container_with_ref; }
7285 
7286   template <typename ..., typename T = ::std::unique_ptr<::std::vector<::std::string>>>
7287   FOLLY_ERASE T&& req_container_with_ref_ref() && { return static_cast<T&&>(req_container_with_ref); }
7288 
7289   template <typename ..., typename T = ::std::unique_ptr<::std::vector<::std::string>>>
7290   FOLLY_ERASE const T&& req_container_with_ref_ref() const&& { return static_cast<const T&&>(req_container_with_ref); }
7291   template <typename ..., typename T = ::std::unique_ptr<::some::valid::ns::containerStruct>>
7292   FOLLY_ERASE T& opt_cpp_unique_ref_ref() & { return opt_cpp_unique_ref; }
7293 
7294   template <typename ..., typename T = ::std::unique_ptr<::some::valid::ns::containerStruct>>
7295   FOLLY_ERASE const T& opt_cpp_unique_ref_ref() const& { return opt_cpp_unique_ref; }
7296 
7297   template <typename ..., typename T = ::std::unique_ptr<::some::valid::ns::containerStruct>>
7298   FOLLY_ERASE T&& opt_cpp_unique_ref_ref() && { return static_cast<T&&>(opt_cpp_unique_ref); }
7299 
7300   template <typename ..., typename T = ::std::unique_ptr<::some::valid::ns::containerStruct>>
7301   FOLLY_ERASE const T&& opt_cpp_unique_ref_ref() const&& { return static_cast<const T&&>(opt_cpp_unique_ref); }
7302   template <typename ..., typename T = ::std::unique_ptr<::some::valid::ns::containerStruct>>
7303   FOLLY_ERASE T& opt_cpp2_unique_ref_ref() & { return opt_cpp2_unique_ref; }
7304 
7305   template <typename ..., typename T = ::std::unique_ptr<::some::valid::ns::containerStruct>>
7306   FOLLY_ERASE const T& opt_cpp2_unique_ref_ref() const& { return opt_cpp2_unique_ref; }
7307 
7308   template <typename ..., typename T = ::std::unique_ptr<::some::valid::ns::containerStruct>>
7309   FOLLY_ERASE T&& opt_cpp2_unique_ref_ref() && { return static_cast<T&&>(opt_cpp2_unique_ref); }
7310 
7311   template <typename ..., typename T = ::std::unique_ptr<::some::valid::ns::containerStruct>>
7312   FOLLY_ERASE const T&& opt_cpp2_unique_ref_ref() const&& { return static_cast<const T&&>(opt_cpp2_unique_ref); }
7313   template <typename ..., typename T = ::std::unique_ptr<::std::set<::std::int32_t>>>
7314   FOLLY_ERASE T& opt_container_with_ref_ref() & { return opt_container_with_ref; }
7315 
7316   template <typename ..., typename T = ::std::unique_ptr<::std::set<::std::int32_t>>>
7317   FOLLY_ERASE const T& opt_container_with_ref_ref() const& { return opt_container_with_ref; }
7318 
7319   template <typename ..., typename T = ::std::unique_ptr<::std::set<::std::int32_t>>>
7320   FOLLY_ERASE T&& opt_container_with_ref_ref() && { return static_cast<T&&>(opt_container_with_ref); }
7321 
7322   template <typename ..., typename T = ::std::unique_ptr<::std::set<::std::int32_t>>>
7323   FOLLY_ERASE const T&& opt_container_with_ref_ref() const&& { return static_cast<const T&&>(opt_container_with_ref); }
7324   template <typename ..., typename T = ::std::unique_ptr<::some::valid::ns::containerStruct>>
7325   FOLLY_ERASE T& ref_type_unique_ref() & { return ref_type_unique; }
7326 
7327   template <typename ..., typename T = ::std::unique_ptr<::some::valid::ns::containerStruct>>
7328   FOLLY_ERASE const T& ref_type_unique_ref() const& { return ref_type_unique; }
7329 
7330   template <typename ..., typename T = ::std::unique_ptr<::some::valid::ns::containerStruct>>
7331   FOLLY_ERASE T&& ref_type_unique_ref() && { return static_cast<T&&>(ref_type_unique); }
7332 
7333   template <typename ..., typename T = ::std::unique_ptr<::some::valid::ns::containerStruct>>
7334   FOLLY_ERASE const T&& ref_type_unique_ref() const&& { return static_cast<const T&&>(ref_type_unique); }
7335   template <typename ..., typename T = ::std::shared_ptr<::some::valid::ns::containerStruct>>
7336   FOLLY_ERASE T& ref_type_shared_ref() & { return ref_type_shared; }
7337 
7338   template <typename ..., typename T = ::std::shared_ptr<::some::valid::ns::containerStruct>>
7339   FOLLY_ERASE const T& ref_type_shared_ref() const& { return ref_type_shared; }
7340 
7341   template <typename ..., typename T = ::std::shared_ptr<::some::valid::ns::containerStruct>>
7342   FOLLY_ERASE T&& ref_type_shared_ref() && { return static_cast<T&&>(ref_type_shared); }
7343 
7344   template <typename ..., typename T = ::std::shared_ptr<::some::valid::ns::containerStruct>>
7345   FOLLY_ERASE const T&& ref_type_shared_ref() const&& { return static_cast<const T&&>(ref_type_shared); }
7346   template <typename ..., typename T = ::std::shared_ptr<const ::std::map<::std::int32_t, ::std::vector<::std::string>>>>
7347   FOLLY_ERASE T& ref_type_const_ref() & { return ref_type_const; }
7348 
7349   template <typename ..., typename T = ::std::shared_ptr<const ::std::map<::std::int32_t, ::std::vector<::std::string>>>>
7350   FOLLY_ERASE const T& ref_type_const_ref() const& { return ref_type_const; }
7351 
7352   template <typename ..., typename T = ::std::shared_ptr<const ::std::map<::std::int32_t, ::std::vector<::std::string>>>>
7353   FOLLY_ERASE T&& ref_type_const_ref() && { return static_cast<T&&>(ref_type_const); }
7354 
7355   template <typename ..., typename T = ::std::shared_ptr<const ::std::map<::std::int32_t, ::std::vector<::std::string>>>>
7356   FOLLY_ERASE const T&& ref_type_const_ref() const&& { return static_cast<const T&&>(ref_type_const); }
7357   template <typename ..., typename T = ::std::shared_ptr<::some::valid::ns::containerStruct>>
7358   FOLLY_ERASE T& req_ref_type_shared_ref() & { return req_ref_type_shared; }
7359 
7360   template <typename ..., typename T = ::std::shared_ptr<::some::valid::ns::containerStruct>>
7361   FOLLY_ERASE const T& req_ref_type_shared_ref() const& { return req_ref_type_shared; }
7362 
7363   template <typename ..., typename T = ::std::shared_ptr<::some::valid::ns::containerStruct>>
7364   FOLLY_ERASE T&& req_ref_type_shared_ref() && { return static_cast<T&&>(req_ref_type_shared); }
7365 
7366   template <typename ..., typename T = ::std::shared_ptr<::some::valid::ns::containerStruct>>
7367   FOLLY_ERASE const T&& req_ref_type_shared_ref() const&& { return static_cast<const T&&>(req_ref_type_shared); }
7368   template <typename ..., typename T = ::std::shared_ptr<const ::some::valid::ns::containerStruct>>
7369   FOLLY_ERASE T& req_ref_type_const_ref() & { return req_ref_type_const; }
7370 
7371   template <typename ..., typename T = ::std::shared_ptr<const ::some::valid::ns::containerStruct>>
7372   FOLLY_ERASE const T& req_ref_type_const_ref() const& { return req_ref_type_const; }
7373 
7374   template <typename ..., typename T = ::std::shared_ptr<const ::some::valid::ns::containerStruct>>
7375   FOLLY_ERASE T&& req_ref_type_const_ref() && { return static_cast<T&&>(req_ref_type_const); }
7376 
7377   template <typename ..., typename T = ::std::shared_ptr<const ::some::valid::ns::containerStruct>>
7378   FOLLY_ERASE const T&& req_ref_type_const_ref() const&& { return static_cast<const T&&>(req_ref_type_const); }
7379   template <typename ..., typename T = ::std::unique_ptr<::std::vector<::std::string>>>
7380   FOLLY_ERASE T& req_ref_type_unique_ref() & { return req_ref_type_unique; }
7381 
7382   template <typename ..., typename T = ::std::unique_ptr<::std::vector<::std::string>>>
7383   FOLLY_ERASE const T& req_ref_type_unique_ref() const& { return req_ref_type_unique; }
7384 
7385   template <typename ..., typename T = ::std::unique_ptr<::std::vector<::std::string>>>
7386   FOLLY_ERASE T&& req_ref_type_unique_ref() && { return static_cast<T&&>(req_ref_type_unique); }
7387 
7388   template <typename ..., typename T = ::std::unique_ptr<::std::vector<::std::string>>>
7389   FOLLY_ERASE const T&& req_ref_type_unique_ref() const&& { return static_cast<const T&&>(req_ref_type_unique); }
7390   template <typename ..., typename T = ::std::shared_ptr<const ::some::valid::ns::containerStruct>>
7391   FOLLY_ERASE T& opt_ref_type_const_ref() & { return opt_ref_type_const; }
7392 
7393   template <typename ..., typename T = ::std::shared_ptr<const ::some::valid::ns::containerStruct>>
7394   FOLLY_ERASE const T& opt_ref_type_const_ref() const& { return opt_ref_type_const; }
7395 
7396   template <typename ..., typename T = ::std::shared_ptr<const ::some::valid::ns::containerStruct>>
7397   FOLLY_ERASE T&& opt_ref_type_const_ref() && { return static_cast<T&&>(opt_ref_type_const); }
7398 
7399   template <typename ..., typename T = ::std::shared_ptr<const ::some::valid::ns::containerStruct>>
7400   FOLLY_ERASE const T&& opt_ref_type_const_ref() const&& { return static_cast<const T&&>(opt_ref_type_const); }
7401   template <typename ..., typename T = ::std::unique_ptr<::some::valid::ns::containerStruct>>
7402   FOLLY_ERASE T& opt_ref_type_unique_ref() & { return opt_ref_type_unique; }
7403 
7404   template <typename ..., typename T = ::std::unique_ptr<::some::valid::ns::containerStruct>>
7405   FOLLY_ERASE const T& opt_ref_type_unique_ref() const& { return opt_ref_type_unique; }
7406 
7407   template <typename ..., typename T = ::std::unique_ptr<::some::valid::ns::containerStruct>>
7408   FOLLY_ERASE T&& opt_ref_type_unique_ref() && { return static_cast<T&&>(opt_ref_type_unique); }
7409 
7410   template <typename ..., typename T = ::std::unique_ptr<::some::valid::ns::containerStruct>>
7411   FOLLY_ERASE const T&& opt_ref_type_unique_ref() const&& { return static_cast<const T&&>(opt_ref_type_unique); }
7412   template <typename ..., typename T = ::std::shared_ptr<::std::set<::std::int32_t>>>
7413   FOLLY_ERASE T& opt_ref_type_shared_ref() & { return opt_ref_type_shared; }
7414 
7415   template <typename ..., typename T = ::std::shared_ptr<::std::set<::std::int32_t>>>
7416   FOLLY_ERASE const T& opt_ref_type_shared_ref() const& { return opt_ref_type_shared; }
7417 
7418   template <typename ..., typename T = ::std::shared_ptr<::std::set<::std::int32_t>>>
7419   FOLLY_ERASE T&& opt_ref_type_shared_ref() && { return static_cast<T&&>(opt_ref_type_shared); }
7420 
7421   template <typename ..., typename T = ::std::shared_ptr<::std::set<::std::int32_t>>>
7422   FOLLY_ERASE const T&& opt_ref_type_shared_ref() const&& { return static_cast<const T&&>(opt_ref_type_shared); }
7423 
7424   template <typename..., typename T = ::some::valid::ns::CppFakeI32>
7425   FOLLY_ERASE ::apache::thrift::field_ref<const T&> base_type_ref() const& {
7426     return {this->base_type, __isset.at(1), __isset.bit(1)};
7427   }
7428 
7429   template <typename..., typename T = ::some::valid::ns::CppFakeI32>
7430   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> base_type_ref() const&& {
7431     return {static_cast<const T&&>(this->base_type), __isset.at(1), __isset.bit(1)};
7432   }
7433 
7434   template <typename..., typename T = ::some::valid::ns::CppFakeI32>
7435   FOLLY_ERASE ::apache::thrift::field_ref<T&> base_type_ref() & {
7436     return {this->base_type, __isset.at(1), __isset.bit(1)};
7437   }
7438 
7439   template <typename..., typename T = ::some::valid::ns::CppFakeI32>
7440   FOLLY_ERASE ::apache::thrift::field_ref<T&&> base_type_ref() && {
7441     return {static_cast<T&&>(this->base_type), __isset.at(1), __isset.bit(1)};
7442   }
7443 
7444   template <typename..., typename T = ::some::valid::ns::FollySmallVectorI64>
7445   FOLLY_ERASE ::apache::thrift::field_ref<const T&> list_type_ref() const& {
7446     return {this->list_type, __isset.at(2), __isset.bit(2)};
7447   }
7448 
7449   template <typename..., typename T = ::some::valid::ns::FollySmallVectorI64>
7450   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> list_type_ref() const&& {
7451     return {static_cast<const T&&>(this->list_type), __isset.at(2), __isset.bit(2)};
7452   }
7453 
7454   template <typename..., typename T = ::some::valid::ns::FollySmallVectorI64>
7455   FOLLY_ERASE ::apache::thrift::field_ref<T&> list_type_ref() & {
7456     return {this->list_type, __isset.at(2), __isset.bit(2)};
7457   }
7458 
7459   template <typename..., typename T = ::some::valid::ns::FollySmallVectorI64>
7460   FOLLY_ERASE ::apache::thrift::field_ref<T&&> list_type_ref() && {
7461     return {static_cast<T&&>(this->list_type), __isset.at(2), __isset.bit(2)};
7462   }
7463 
7464   template <typename..., typename T = ::some::valid::ns::SortedVectorSetString>
7465   FOLLY_ERASE ::apache::thrift::field_ref<const T&> set_type_ref() const& {
7466     return {this->set_type, __isset.at(3), __isset.bit(3)};
7467   }
7468 
7469   template <typename..., typename T = ::some::valid::ns::SortedVectorSetString>
7470   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> set_type_ref() const&& {
7471     return {static_cast<const T&&>(this->set_type), __isset.at(3), __isset.bit(3)};
7472   }
7473 
7474   template <typename..., typename T = ::some::valid::ns::SortedVectorSetString>
7475   FOLLY_ERASE ::apache::thrift::field_ref<T&> set_type_ref() & {
7476     return {this->set_type, __isset.at(3), __isset.bit(3)};
7477   }
7478 
7479   template <typename..., typename T = ::some::valid::ns::SortedVectorSetString>
7480   FOLLY_ERASE ::apache::thrift::field_ref<T&&> set_type_ref() && {
7481     return {static_cast<T&&>(this->set_type), __isset.at(3), __isset.bit(3)};
7482   }
7483 
7484   template <typename..., typename T = ::some::valid::ns::FakeMap>
7485   FOLLY_ERASE ::apache::thrift::field_ref<const T&> map_type_ref() const& {
7486     return {this->map_type, __isset.at(4), __isset.bit(4)};
7487   }
7488 
7489   template <typename..., typename T = ::some::valid::ns::FakeMap>
7490   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> map_type_ref() const&& {
7491     return {static_cast<const T&&>(this->map_type), __isset.at(4), __isset.bit(4)};
7492   }
7493 
7494   template <typename..., typename T = ::some::valid::ns::FakeMap>
7495   FOLLY_ERASE ::apache::thrift::field_ref<T&> map_type_ref() & {
7496     return {this->map_type, __isset.at(4), __isset.bit(4)};
7497   }
7498 
7499   template <typename..., typename T = ::some::valid::ns::FakeMap>
7500   FOLLY_ERASE ::apache::thrift::field_ref<T&&> map_type_ref() && {
7501     return {static_cast<T&&>(this->map_type), __isset.at(4), __isset.bit(4)};
7502   }
7503 
7504   template <typename..., typename T = ::some::valid::ns::UnorderedMapStruct>
7505   FOLLY_ERASE ::apache::thrift::field_ref<const T&> map_struct_type_ref() const& {
7506     return {this->map_struct_type, __isset.at(5), __isset.bit(5)};
7507   }
7508 
7509   template <typename..., typename T = ::some::valid::ns::UnorderedMapStruct>
7510   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> map_struct_type_ref() const&& {
7511     return {static_cast<const T&&>(this->map_struct_type), __isset.at(5), __isset.bit(5)};
7512   }
7513 
7514   template <typename..., typename T = ::some::valid::ns::UnorderedMapStruct>
7515   FOLLY_ERASE ::apache::thrift::field_ref<T&> map_struct_type_ref() & {
7516     return {this->map_struct_type, __isset.at(5), __isset.bit(5)};
7517   }
7518 
7519   template <typename..., typename T = ::some::valid::ns::UnorderedMapStruct>
7520   FOLLY_ERASE ::apache::thrift::field_ref<T&&> map_struct_type_ref() && {
7521     return {static_cast<T&&>(this->map_struct_type), __isset.at(5), __isset.bit(5)};
7522   }
7523 
7524   template <typename..., typename T = ::some::valid::ns::IOBuf>
7525   FOLLY_ERASE ::apache::thrift::field_ref<const T&> iobuf_type_ref() const& {
7526     return {this->iobuf_type, __isset.at(6), __isset.bit(6)};
7527   }
7528 
7529   template <typename..., typename T = ::some::valid::ns::IOBuf>
7530   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> iobuf_type_ref() const&& {
7531     return {static_cast<const T&&>(this->iobuf_type), __isset.at(6), __isset.bit(6)};
7532   }
7533 
7534   template <typename..., typename T = ::some::valid::ns::IOBuf>
7535   FOLLY_ERASE ::apache::thrift::field_ref<T&> iobuf_type_ref() & {
7536     return {this->iobuf_type, __isset.at(6), __isset.bit(6)};
7537   }
7538 
7539   template <typename..., typename T = ::some::valid::ns::IOBuf>
7540   FOLLY_ERASE ::apache::thrift::field_ref<T&&> iobuf_type_ref() && {
7541     return {static_cast<T&&>(this->iobuf_type), __isset.at(6), __isset.bit(6)};
7542   }
7543 
7544   template <typename..., typename T = ::some::valid::ns::IOBufPtr>
7545   FOLLY_ERASE ::apache::thrift::field_ref<const T&> iobuf_ptr_ref() const& {
7546     return {this->iobuf_ptr, __isset.at(7), __isset.bit(7)};
7547   }
7548 
7549   template <typename..., typename T = ::some::valid::ns::IOBufPtr>
7550   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> iobuf_ptr_ref() const&& {
7551     return {static_cast<const T&&>(this->iobuf_ptr), __isset.at(7), __isset.bit(7)};
7552   }
7553 
7554   template <typename..., typename T = ::some::valid::ns::IOBufPtr>
7555   FOLLY_ERASE ::apache::thrift::field_ref<T&> iobuf_ptr_ref() & {
7556     return {this->iobuf_ptr, __isset.at(7), __isset.bit(7)};
7557   }
7558 
7559   template <typename..., typename T = ::some::valid::ns::IOBufPtr>
7560   FOLLY_ERASE ::apache::thrift::field_ref<T&&> iobuf_ptr_ref() && {
7561     return {static_cast<T&&>(this->iobuf_ptr), __isset.at(7), __isset.bit(7)};
7562   }
7563 
7564   template <typename..., typename T = std::list<::std::int32_t>>
7565   FOLLY_ERASE ::apache::thrift::field_ref<const T&> list_i32_template_ref() const& {
7566     return {this->list_i32_template, __isset.at(8), __isset.bit(8)};
7567   }
7568 
7569   template <typename..., typename T = std::list<::std::int32_t>>
7570   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> list_i32_template_ref() const&& {
7571     return {static_cast<const T&&>(this->list_i32_template), __isset.at(8), __isset.bit(8)};
7572   }
7573 
7574   template <typename..., typename T = std::list<::std::int32_t>>
7575   FOLLY_ERASE ::apache::thrift::field_ref<T&> list_i32_template_ref() & {
7576     return {this->list_i32_template, __isset.at(8), __isset.bit(8)};
7577   }
7578 
7579   template <typename..., typename T = std::list<::std::int32_t>>
7580   FOLLY_ERASE ::apache::thrift::field_ref<T&&> list_i32_template_ref() && {
7581     return {static_cast<T&&>(this->list_i32_template), __isset.at(8), __isset.bit(8)};
7582   }
7583 
7584   template <typename..., typename T = std::deque<::std::string>>
7585   FOLLY_ERASE ::apache::thrift::field_ref<const T&> list_string_template_ref() const& {
7586     return {this->list_string_template, __isset.at(9), __isset.bit(9)};
7587   }
7588 
7589   template <typename..., typename T = std::deque<::std::string>>
7590   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> list_string_template_ref() const&& {
7591     return {static_cast<const T&&>(this->list_string_template), __isset.at(9), __isset.bit(9)};
7592   }
7593 
7594   template <typename..., typename T = std::deque<::std::string>>
7595   FOLLY_ERASE ::apache::thrift::field_ref<T&> list_string_template_ref() & {
7596     return {this->list_string_template, __isset.at(9), __isset.bit(9)};
7597   }
7598 
7599   template <typename..., typename T = std::deque<::std::string>>
7600   FOLLY_ERASE ::apache::thrift::field_ref<T&&> list_string_template_ref() && {
7601     return {static_cast<T&&>(this->list_string_template), __isset.at(9), __isset.bit(9)};
7602   }
7603 
7604   template <typename..., typename T = folly::sorted_vector_set<::std::string>>
7605   FOLLY_ERASE ::apache::thrift::field_ref<const T&> set_template_ref() const& {
7606     return {this->set_template, __isset.at(10), __isset.bit(10)};
7607   }
7608 
7609   template <typename..., typename T = folly::sorted_vector_set<::std::string>>
7610   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> set_template_ref() const&& {
7611     return {static_cast<const T&&>(this->set_template), __isset.at(10), __isset.bit(10)};
7612   }
7613 
7614   template <typename..., typename T = folly::sorted_vector_set<::std::string>>
7615   FOLLY_ERASE ::apache::thrift::field_ref<T&> set_template_ref() & {
7616     return {this->set_template, __isset.at(10), __isset.bit(10)};
7617   }
7618 
7619   template <typename..., typename T = folly::sorted_vector_set<::std::string>>
7620   FOLLY_ERASE ::apache::thrift::field_ref<T&&> set_template_ref() && {
7621     return {static_cast<T&&>(this->set_template), __isset.at(10), __isset.bit(10)};
7622   }
7623 
7624   template <typename..., typename T = folly::sorted_vector_map<::std::int64_t, ::std::string>>
7625   FOLLY_ERASE ::apache::thrift::field_ref<const T&> map_template_ref() const& {
7626     return {this->map_template, __isset.at(11), __isset.bit(11)};
7627   }
7628 
7629   template <typename..., typename T = folly::sorted_vector_map<::std::int64_t, ::std::string>>
7630   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> map_template_ref() const&& {
7631     return {static_cast<const T&&>(this->map_template), __isset.at(11), __isset.bit(11)};
7632   }
7633 
7634   template <typename..., typename T = folly::sorted_vector_map<::std::int64_t, ::std::string>>
7635   FOLLY_ERASE ::apache::thrift::field_ref<T&> map_template_ref() & {
7636     return {this->map_template, __isset.at(11), __isset.bit(11)};
7637   }
7638 
7639   template <typename..., typename T = folly::sorted_vector_map<::std::int64_t, ::std::string>>
7640   FOLLY_ERASE ::apache::thrift::field_ref<T&&> map_template_ref() && {
7641     return {static_cast<T&&>(this->map_template), __isset.at(11), __isset.bit(11)};
7642   }
7643 
7644   template <typename..., typename T = ::some::valid::ns::std_list>
7645   FOLLY_ERASE ::apache::thrift::field_ref<const T&> typedef_list_template_ref() const& {
7646     return {this->typedef_list_template, __isset.at(12), __isset.bit(12)};
7647   }
7648 
7649   template <typename..., typename T = ::some::valid::ns::std_list>
7650   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> typedef_list_template_ref() const&& {
7651     return {static_cast<const T&&>(this->typedef_list_template), __isset.at(12), __isset.bit(12)};
7652   }
7653 
7654   template <typename..., typename T = ::some::valid::ns::std_list>
7655   FOLLY_ERASE ::apache::thrift::field_ref<T&> typedef_list_template_ref() & {
7656     return {this->typedef_list_template, __isset.at(12), __isset.bit(12)};
7657   }
7658 
7659   template <typename..., typename T = ::some::valid::ns::std_list>
7660   FOLLY_ERASE ::apache::thrift::field_ref<T&&> typedef_list_template_ref() && {
7661     return {static_cast<T&&>(this->typedef_list_template), __isset.at(12), __isset.bit(12)};
7662   }
7663 
7664   template <typename..., typename T = ::some::valid::ns::std_deque>
7665   FOLLY_ERASE ::apache::thrift::field_ref<const T&> typedef_deque_template_ref() const& {
7666     return {this->typedef_deque_template, __isset.at(13), __isset.bit(13)};
7667   }
7668 
7669   template <typename..., typename T = ::some::valid::ns::std_deque>
7670   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> typedef_deque_template_ref() const&& {
7671     return {static_cast<const T&&>(this->typedef_deque_template), __isset.at(13), __isset.bit(13)};
7672   }
7673 
7674   template <typename..., typename T = ::some::valid::ns::std_deque>
7675   FOLLY_ERASE ::apache::thrift::field_ref<T&> typedef_deque_template_ref() & {
7676     return {this->typedef_deque_template, __isset.at(13), __isset.bit(13)};
7677   }
7678 
7679   template <typename..., typename T = ::some::valid::ns::std_deque>
7680   FOLLY_ERASE ::apache::thrift::field_ref<T&&> typedef_deque_template_ref() && {
7681     return {static_cast<T&&>(this->typedef_deque_template), __isset.at(13), __isset.bit(13)};
7682   }
7683 
7684   template <typename..., typename T = ::some::valid::ns::folly_set>
7685   FOLLY_ERASE ::apache::thrift::field_ref<const T&> typedef_set_template_ref() const& {
7686     return {this->typedef_set_template, __isset.at(14), __isset.bit(14)};
7687   }
7688 
7689   template <typename..., typename T = ::some::valid::ns::folly_set>
7690   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> typedef_set_template_ref() const&& {
7691     return {static_cast<const T&&>(this->typedef_set_template), __isset.at(14), __isset.bit(14)};
7692   }
7693 
7694   template <typename..., typename T = ::some::valid::ns::folly_set>
7695   FOLLY_ERASE ::apache::thrift::field_ref<T&> typedef_set_template_ref() & {
7696     return {this->typedef_set_template, __isset.at(14), __isset.bit(14)};
7697   }
7698 
7699   template <typename..., typename T = ::some::valid::ns::folly_set>
7700   FOLLY_ERASE ::apache::thrift::field_ref<T&&> typedef_set_template_ref() && {
7701     return {static_cast<T&&>(this->typedef_set_template), __isset.at(14), __isset.bit(14)};
7702   }
7703 
7704   template <typename..., typename T = ::some::valid::ns::folly_map>
7705   FOLLY_ERASE ::apache::thrift::field_ref<const T&> typedef_map_template_ref() const& {
7706     return {this->typedef_map_template, __isset.at(15), __isset.bit(15)};
7707   }
7708 
7709   template <typename..., typename T = ::some::valid::ns::folly_map>
7710   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> typedef_map_template_ref() const&& {
7711     return {static_cast<const T&&>(this->typedef_map_template), __isset.at(15), __isset.bit(15)};
7712   }
7713 
7714   template <typename..., typename T = ::some::valid::ns::folly_map>
7715   FOLLY_ERASE ::apache::thrift::field_ref<T&> typedef_map_template_ref() & {
7716     return {this->typedef_map_template, __isset.at(15), __isset.bit(15)};
7717   }
7718 
7719   template <typename..., typename T = ::some::valid::ns::folly_map>
7720   FOLLY_ERASE ::apache::thrift::field_ref<T&&> typedef_map_template_ref() && {
7721     return {static_cast<T&&>(this->typedef_map_template), __isset.at(15), __isset.bit(15)};
7722   }
7723 
7724   template <typename..., typename T = ::some::valid::ns::IndirectionA>
7725   FOLLY_ERASE ::apache::thrift::field_ref<const T&> indirection_a_ref() const& {
7726     return {this->indirection_a, __isset.at(16), __isset.bit(16)};
7727   }
7728 
7729   template <typename..., typename T = ::some::valid::ns::IndirectionA>
7730   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> indirection_a_ref() const&& {
7731     return {static_cast<const T&&>(this->indirection_a), __isset.at(16), __isset.bit(16)};
7732   }
7733 
7734   template <typename..., typename T = ::some::valid::ns::IndirectionA>
7735   FOLLY_ERASE ::apache::thrift::field_ref<T&> indirection_a_ref() & {
7736     return {this->indirection_a, __isset.at(16), __isset.bit(16)};
7737   }
7738 
7739   template <typename..., typename T = ::some::valid::ns::IndirectionA>
7740   FOLLY_ERASE ::apache::thrift::field_ref<T&&> indirection_a_ref() && {
7741     return {static_cast<T&&>(this->indirection_a), __isset.at(16), __isset.bit(16)};
7742   }
7743 
7744   template <typename..., typename T = ::std::vector<::some::valid::ns::IndirectionB>>
7745   FOLLY_ERASE ::apache::thrift::field_ref<const T&> indirection_b_ref() const& {
7746     return {this->indirection_b, __isset.at(17), __isset.bit(17)};
7747   }
7748 
7749   template <typename..., typename T = ::std::vector<::some::valid::ns::IndirectionB>>
7750   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> indirection_b_ref() const&& {
7751     return {static_cast<const T&&>(this->indirection_b), __isset.at(17), __isset.bit(17)};
7752   }
7753 
7754   template <typename..., typename T = ::std::vector<::some::valid::ns::IndirectionB>>
7755   FOLLY_ERASE ::apache::thrift::field_ref<T&> indirection_b_ref() & {
7756     return {this->indirection_b, __isset.at(17), __isset.bit(17)};
7757   }
7758 
7759   template <typename..., typename T = ::std::vector<::some::valid::ns::IndirectionB>>
7760   FOLLY_ERASE ::apache::thrift::field_ref<T&&> indirection_b_ref() && {
7761     return {static_cast<T&&>(this->indirection_b), __isset.at(17), __isset.bit(17)};
7762   }
7763 
7764   template <typename..., typename T = ::std::set<::some::valid::ns::IndirectionC>>
7765   FOLLY_ERASE ::apache::thrift::field_ref<const T&> indirection_c_ref() const& {
7766     return {this->indirection_c, __isset.at(18), __isset.bit(18)};
7767   }
7768 
7769   template <typename..., typename T = ::std::set<::some::valid::ns::IndirectionC>>
7770   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> indirection_c_ref() const&& {
7771     return {static_cast<const T&&>(this->indirection_c), __isset.at(18), __isset.bit(18)};
7772   }
7773 
7774   template <typename..., typename T = ::std::set<::some::valid::ns::IndirectionC>>
7775   FOLLY_ERASE ::apache::thrift::field_ref<T&> indirection_c_ref() & {
7776     return {this->indirection_c, __isset.at(18), __isset.bit(18)};
7777   }
7778 
7779   template <typename..., typename T = ::std::set<::some::valid::ns::IndirectionC>>
7780   FOLLY_ERASE ::apache::thrift::field_ref<T&&> indirection_c_ref() && {
7781     return {static_cast<T&&>(this->indirection_c), __isset.at(18), __isset.bit(18)};
7782   }
7783 
7784   template <typename..., typename T = ::some::valid::ns::IOBuf>
7785   FOLLY_ERASE ::apache::thrift::field_ref<const T&> iobuf_type_val_ref() const& {
7786     return {this->iobuf_type_val, __isset.at(19), __isset.bit(19)};
7787   }
7788 
7789   template <typename..., typename T = ::some::valid::ns::IOBuf>
7790   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> iobuf_type_val_ref() const&& {
7791     return {static_cast<const T&&>(this->iobuf_type_val), __isset.at(19), __isset.bit(19)};
7792   }
7793 
7794   template <typename..., typename T = ::some::valid::ns::IOBuf>
7795   FOLLY_ERASE ::apache::thrift::field_ref<T&> iobuf_type_val_ref() & {
7796     return {this->iobuf_type_val, __isset.at(19), __isset.bit(19)};
7797   }
7798 
7799   template <typename..., typename T = ::some::valid::ns::IOBuf>
7800   FOLLY_ERASE ::apache::thrift::field_ref<T&&> iobuf_type_val_ref() && {
7801     return {static_cast<T&&>(this->iobuf_type_val), __isset.at(19), __isset.bit(19)};
7802   }
7803 
7804   template <typename..., typename T = ::some::valid::ns::IOBufPtr>
7805   FOLLY_ERASE ::apache::thrift::field_ref<const T&> iobuf_ptr_val_ref() const& {
7806     return {this->iobuf_ptr_val, __isset.at(20), __isset.bit(20)};
7807   }
7808 
7809   template <typename..., typename T = ::some::valid::ns::IOBufPtr>
7810   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> iobuf_ptr_val_ref() const&& {
7811     return {static_cast<const T&&>(this->iobuf_ptr_val), __isset.at(20), __isset.bit(20)};
7812   }
7813 
7814   template <typename..., typename T = ::some::valid::ns::IOBufPtr>
7815   FOLLY_ERASE ::apache::thrift::field_ref<T&> iobuf_ptr_val_ref() & {
7816     return {this->iobuf_ptr_val, __isset.at(20), __isset.bit(20)};
7817   }
7818 
7819   template <typename..., typename T = ::some::valid::ns::IOBufPtr>
7820   FOLLY_ERASE ::apache::thrift::field_ref<T&&> iobuf_ptr_val_ref() && {
7821     return {static_cast<T&&>(this->iobuf_ptr_val), __isset.at(20), __isset.bit(20)};
7822   }
7823 
7824   template <typename..., typename T = ::some::valid::ns::containerStruct>
7825   FOLLY_ERASE ::apache::thrift::field_ref<const T&> struct_struct_ref() const& {
7826     return {this->struct_struct, __isset.at(21), __isset.bit(21)};
7827   }
7828 
7829   template <typename..., typename T = ::some::valid::ns::containerStruct>
7830   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> struct_struct_ref() const&& {
7831     return {static_cast<const T&&>(this->struct_struct), __isset.at(21), __isset.bit(21)};
7832   }
7833 
7834   template <typename..., typename T = ::some::valid::ns::containerStruct>
7835   FOLLY_ERASE ::apache::thrift::field_ref<T&> struct_struct_ref() & {
7836     return {this->struct_struct, __isset.at(21), __isset.bit(21)};
7837   }
7838 
7839   template <typename..., typename T = ::some::valid::ns::containerStruct>
7840   FOLLY_ERASE ::apache::thrift::field_ref<T&&> struct_struct_ref() && {
7841     return {static_cast<T&&>(this->struct_struct), __isset.at(21), __isset.bit(21)};
7842   }
7843   const ::some::valid::ns::containerStruct& get_no_annotation() const&;
7844   ::some::valid::ns::containerStruct get_no_annotation() &&;
7845 
7846   template <typename T_AnnotatedStruct_no_annotation_struct_setter = ::some::valid::ns::containerStruct>
7847   [[deprecated("Use `FOO.no_annotation_ref() = BAR;` instead of `FOO.set_no_annotation(BAR);`")]]
7848   ::some::valid::ns::containerStruct& set_no_annotation(T_AnnotatedStruct_no_annotation_struct_setter&& no_annotation_) {
7849     no_annotation_ref() = std::forward<T_AnnotatedStruct_no_annotation_struct_setter>(no_annotation_);
7850     return no_annotation;
7851   }
7852 
7853   ::some::valid::ns::CppFakeI32 get_base_type() const {
7854     return base_type;
7855   }
7856 
7857   [[deprecated("Use `FOO.base_type_ref() = BAR;` instead of `FOO.set_base_type(BAR);`")]]
7858   ::some::valid::ns::CppFakeI32& set_base_type(::some::valid::ns::CppFakeI32 base_type_) {
7859     base_type_ref() = base_type_;
7860     return base_type;
7861   }
7862   const ::some::valid::ns::FollySmallVectorI64& get_list_type() const&;
7863   ::some::valid::ns::FollySmallVectorI64 get_list_type() &&;
7864 
7865   template <typename T_AnnotatedStruct_list_type_struct_setter = ::some::valid::ns::FollySmallVectorI64>
7866   [[deprecated("Use `FOO.list_type_ref() = BAR;` instead of `FOO.set_list_type(BAR);`")]]
7867   ::some::valid::ns::FollySmallVectorI64& set_list_type(T_AnnotatedStruct_list_type_struct_setter&& list_type_) {
7868     list_type_ref() = std::forward<T_AnnotatedStruct_list_type_struct_setter>(list_type_);
7869     return list_type;
7870   }
7871   const ::some::valid::ns::SortedVectorSetString& get_set_type() const&;
7872   ::some::valid::ns::SortedVectorSetString get_set_type() &&;
7873 
7874   template <typename T_AnnotatedStruct_set_type_struct_setter = ::some::valid::ns::SortedVectorSetString>
7875   [[deprecated("Use `FOO.set_type_ref() = BAR;` instead of `FOO.set_set_type(BAR);`")]]
7876   ::some::valid::ns::SortedVectorSetString& set_set_type(T_AnnotatedStruct_set_type_struct_setter&& set_type_) {
7877     set_type_ref() = std::forward<T_AnnotatedStruct_set_type_struct_setter>(set_type_);
7878     return set_type;
7879   }
7880   const ::some::valid::ns::FakeMap& get_map_type() const&;
7881   ::some::valid::ns::FakeMap get_map_type() &&;
7882 
7883   template <typename T_AnnotatedStruct_map_type_struct_setter = ::some::valid::ns::FakeMap>
7884   [[deprecated("Use `FOO.map_type_ref() = BAR;` instead of `FOO.set_map_type(BAR);`")]]
7885   ::some::valid::ns::FakeMap& set_map_type(T_AnnotatedStruct_map_type_struct_setter&& map_type_) {
7886     map_type_ref() = std::forward<T_AnnotatedStruct_map_type_struct_setter>(map_type_);
7887     return map_type;
7888   }
7889   const ::some::valid::ns::UnorderedMapStruct& get_map_struct_type() const&;
7890   ::some::valid::ns::UnorderedMapStruct get_map_struct_type() &&;
7891 
7892   template <typename T_AnnotatedStruct_map_struct_type_struct_setter = ::some::valid::ns::UnorderedMapStruct>
7893   [[deprecated("Use `FOO.map_struct_type_ref() = BAR;` instead of `FOO.set_map_struct_type(BAR);`")]]
7894   ::some::valid::ns::UnorderedMapStruct& set_map_struct_type(T_AnnotatedStruct_map_struct_type_struct_setter&& map_struct_type_) {
7895     map_struct_type_ref() = std::forward<T_AnnotatedStruct_map_struct_type_struct_setter>(map_struct_type_);
7896     return map_struct_type;
7897   }
7898 
7899   const ::some::valid::ns::IOBuf& get_iobuf_type() const& {
7900     return iobuf_type;
7901   }
7902 
7903   ::some::valid::ns::IOBuf get_iobuf_type() && {
7904     return std::move(iobuf_type);
7905   }
7906 
7907   template <typename T_AnnotatedStruct_iobuf_type_struct_setter = ::some::valid::ns::IOBuf>
7908   [[deprecated("Use `FOO.iobuf_type_ref() = BAR;` instead of `FOO.set_iobuf_type(BAR);`")]]
7909   ::some::valid::ns::IOBuf& set_iobuf_type(T_AnnotatedStruct_iobuf_type_struct_setter&& iobuf_type_) {
7910     iobuf_type_ref() = std::forward<T_AnnotatedStruct_iobuf_type_struct_setter>(iobuf_type_);
7911     return iobuf_type;
7912   }
7913 
7914   const ::some::valid::ns::IOBufPtr& get_iobuf_ptr() const& {
7915     return iobuf_ptr;
7916   }
7917 
7918   ::some::valid::ns::IOBufPtr get_iobuf_ptr() && {
7919     return std::move(iobuf_ptr);
7920   }
7921 
7922   template <typename T_AnnotatedStruct_iobuf_ptr_struct_setter = ::some::valid::ns::IOBufPtr>
7923   [[deprecated("Use `FOO.iobuf_ptr_ref() = BAR;` instead of `FOO.set_iobuf_ptr(BAR);`")]]
7924   ::some::valid::ns::IOBufPtr& set_iobuf_ptr(T_AnnotatedStruct_iobuf_ptr_struct_setter&& iobuf_ptr_) {
7925     iobuf_ptr_ref() = std::forward<T_AnnotatedStruct_iobuf_ptr_struct_setter>(iobuf_ptr_);
7926     return iobuf_ptr;
7927   }
7928   const std::list<::std::int32_t>& get_list_i32_template() const&;
7929   std::list<::std::int32_t> get_list_i32_template() &&;
7930 
7931   template <typename T_AnnotatedStruct_list_i32_template_struct_setter = std::list<::std::int32_t>>
7932   [[deprecated("Use `FOO.list_i32_template_ref() = BAR;` instead of `FOO.set_list_i32_template(BAR);`")]]
7933   std::list<::std::int32_t>& set_list_i32_template(T_AnnotatedStruct_list_i32_template_struct_setter&& list_i32_template_) {
7934     list_i32_template_ref() = std::forward<T_AnnotatedStruct_list_i32_template_struct_setter>(list_i32_template_);
7935     return list_i32_template;
7936   }
7937   const std::deque<::std::string>& get_list_string_template() const&;
7938   std::deque<::std::string> get_list_string_template() &&;
7939 
7940   template <typename T_AnnotatedStruct_list_string_template_struct_setter = std::deque<::std::string>>
7941   [[deprecated("Use `FOO.list_string_template_ref() = BAR;` instead of `FOO.set_list_string_template(BAR);`")]]
7942   std::deque<::std::string>& set_list_string_template(T_AnnotatedStruct_list_string_template_struct_setter&& list_string_template_) {
7943     list_string_template_ref() = std::forward<T_AnnotatedStruct_list_string_template_struct_setter>(list_string_template_);
7944     return list_string_template;
7945   }
7946   const folly::sorted_vector_set<::std::string>& get_set_template() const&;
7947   folly::sorted_vector_set<::std::string> get_set_template() &&;
7948 
7949   template <typename T_AnnotatedStruct_set_template_struct_setter = folly::sorted_vector_set<::std::string>>
7950   [[deprecated("Use `FOO.set_template_ref() = BAR;` instead of `FOO.set_set_template(BAR);`")]]
7951   folly::sorted_vector_set<::std::string>& set_set_template(T_AnnotatedStruct_set_template_struct_setter&& set_template_) {
7952     set_template_ref() = std::forward<T_AnnotatedStruct_set_template_struct_setter>(set_template_);
7953     return set_template;
7954   }
7955   const folly::sorted_vector_map<::std::int64_t, ::std::string>& get_map_template() const&;
7956   folly::sorted_vector_map<::std::int64_t, ::std::string> get_map_template() &&;
7957 
7958   template <typename T_AnnotatedStruct_map_template_struct_setter = folly::sorted_vector_map<::std::int64_t, ::std::string>>
7959   [[deprecated("Use `FOO.map_template_ref() = BAR;` instead of `FOO.set_map_template(BAR);`")]]
7960   folly::sorted_vector_map<::std::int64_t, ::std::string>& set_map_template(T_AnnotatedStruct_map_template_struct_setter&& map_template_) {
7961     map_template_ref() = std::forward<T_AnnotatedStruct_map_template_struct_setter>(map_template_);
7962     return map_template;
7963   }
7964   const ::some::valid::ns::std_list& get_typedef_list_template() const&;
7965   ::some::valid::ns::std_list get_typedef_list_template() &&;
7966 
7967   template <typename T_AnnotatedStruct_typedef_list_template_struct_setter = ::some::valid::ns::std_list>
7968   [[deprecated("Use `FOO.typedef_list_template_ref() = BAR;` instead of `FOO.set_typedef_list_template(BAR);`")]]
7969   ::some::valid::ns::std_list& set_typedef_list_template(T_AnnotatedStruct_typedef_list_template_struct_setter&& typedef_list_template_) {
7970     typedef_list_template_ref() = std::forward<T_AnnotatedStruct_typedef_list_template_struct_setter>(typedef_list_template_);
7971     return typedef_list_template;
7972   }
7973   const ::some::valid::ns::std_deque& get_typedef_deque_template() const&;
7974   ::some::valid::ns::std_deque get_typedef_deque_template() &&;
7975 
7976   template <typename T_AnnotatedStruct_typedef_deque_template_struct_setter = ::some::valid::ns::std_deque>
7977   [[deprecated("Use `FOO.typedef_deque_template_ref() = BAR;` instead of `FOO.set_typedef_deque_template(BAR);`")]]
7978   ::some::valid::ns::std_deque& set_typedef_deque_template(T_AnnotatedStruct_typedef_deque_template_struct_setter&& typedef_deque_template_) {
7979     typedef_deque_template_ref() = std::forward<T_AnnotatedStruct_typedef_deque_template_struct_setter>(typedef_deque_template_);
7980     return typedef_deque_template;
7981   }
7982   const ::some::valid::ns::folly_set& get_typedef_set_template() const&;
7983   ::some::valid::ns::folly_set get_typedef_set_template() &&;
7984 
7985   template <typename T_AnnotatedStruct_typedef_set_template_struct_setter = ::some::valid::ns::folly_set>
7986   [[deprecated("Use `FOO.typedef_set_template_ref() = BAR;` instead of `FOO.set_typedef_set_template(BAR);`")]]
7987   ::some::valid::ns::folly_set& set_typedef_set_template(T_AnnotatedStruct_typedef_set_template_struct_setter&& typedef_set_template_) {
7988     typedef_set_template_ref() = std::forward<T_AnnotatedStruct_typedef_set_template_struct_setter>(typedef_set_template_);
7989     return typedef_set_template;
7990   }
7991   const ::some::valid::ns::folly_map& get_typedef_map_template() const&;
7992   ::some::valid::ns::folly_map get_typedef_map_template() &&;
7993 
7994   template <typename T_AnnotatedStruct_typedef_map_template_struct_setter = ::some::valid::ns::folly_map>
7995   [[deprecated("Use `FOO.typedef_map_template_ref() = BAR;` instead of `FOO.set_typedef_map_template(BAR);`")]]
7996   ::some::valid::ns::folly_map& set_typedef_map_template(T_AnnotatedStruct_typedef_map_template_struct_setter&& typedef_map_template_) {
7997     typedef_map_template_ref() = std::forward<T_AnnotatedStruct_typedef_map_template_struct_setter>(typedef_map_template_);
7998     return typedef_map_template;
7999   }
8000 
8001   ::some::valid::ns::IndirectionA get_indirection_a() const {
8002     return indirection_a;
8003   }
8004 
8005   [[deprecated("Use `FOO.indirection_a_ref() = BAR;` instead of `FOO.set_indirection_a(BAR);`")]]
8006   ::some::valid::ns::IndirectionA& set_indirection_a(::some::valid::ns::IndirectionA indirection_a_) {
8007     indirection_a_ref() = indirection_a_;
8008     return indirection_a;
8009   }
8010   const ::std::vector<::some::valid::ns::IndirectionB>& get_indirection_b() const&;
8011   ::std::vector<::some::valid::ns::IndirectionB> get_indirection_b() &&;
8012 
8013   template <typename T_AnnotatedStruct_indirection_b_struct_setter = ::std::vector<::some::valid::ns::IndirectionB>>
8014   [[deprecated("Use `FOO.indirection_b_ref() = BAR;` instead of `FOO.set_indirection_b(BAR);`")]]
8015   ::std::vector<::some::valid::ns::IndirectionB>& set_indirection_b(T_AnnotatedStruct_indirection_b_struct_setter&& indirection_b_) {
8016     indirection_b_ref() = std::forward<T_AnnotatedStruct_indirection_b_struct_setter>(indirection_b_);
8017     return indirection_b;
8018   }
8019   const ::std::set<::some::valid::ns::IndirectionC>& get_indirection_c() const&;
8020   ::std::set<::some::valid::ns::IndirectionC> get_indirection_c() &&;
8021 
8022   template <typename T_AnnotatedStruct_indirection_c_struct_setter = ::std::set<::some::valid::ns::IndirectionC>>
8023   [[deprecated("Use `FOO.indirection_c_ref() = BAR;` instead of `FOO.set_indirection_c(BAR);`")]]
8024   ::std::set<::some::valid::ns::IndirectionC>& set_indirection_c(T_AnnotatedStruct_indirection_c_struct_setter&& indirection_c_) {
8025     indirection_c_ref() = std::forward<T_AnnotatedStruct_indirection_c_struct_setter>(indirection_c_);
8026     return indirection_c;
8027   }
8028 
8029   const ::some::valid::ns::IOBuf& get_iobuf_type_val() const& {
8030     return iobuf_type_val;
8031   }
8032 
8033   ::some::valid::ns::IOBuf get_iobuf_type_val() && {
8034     return std::move(iobuf_type_val);
8035   }
8036 
8037   template <typename T_AnnotatedStruct_iobuf_type_val_struct_setter = ::some::valid::ns::IOBuf>
8038   [[deprecated("Use `FOO.iobuf_type_val_ref() = BAR;` instead of `FOO.set_iobuf_type_val(BAR);`")]]
8039   ::some::valid::ns::IOBuf& set_iobuf_type_val(T_AnnotatedStruct_iobuf_type_val_struct_setter&& iobuf_type_val_) {
8040     iobuf_type_val_ref() = std::forward<T_AnnotatedStruct_iobuf_type_val_struct_setter>(iobuf_type_val_);
8041     return iobuf_type_val;
8042   }
8043 
8044   const ::some::valid::ns::IOBufPtr& get_iobuf_ptr_val() const& {
8045     return iobuf_ptr_val;
8046   }
8047 
8048   ::some::valid::ns::IOBufPtr get_iobuf_ptr_val() && {
8049     return std::move(iobuf_ptr_val);
8050   }
8051 
8052   template <typename T_AnnotatedStruct_iobuf_ptr_val_struct_setter = ::some::valid::ns::IOBufPtr>
8053   [[deprecated("Use `FOO.iobuf_ptr_val_ref() = BAR;` instead of `FOO.set_iobuf_ptr_val(BAR);`")]]
8054   ::some::valid::ns::IOBufPtr& set_iobuf_ptr_val(T_AnnotatedStruct_iobuf_ptr_val_struct_setter&& iobuf_ptr_val_) {
8055     iobuf_ptr_val_ref() = std::forward<T_AnnotatedStruct_iobuf_ptr_val_struct_setter>(iobuf_ptr_val_);
8056     return iobuf_ptr_val;
8057   }
8058   const ::some::valid::ns::containerStruct& get_struct_struct() const&;
8059   ::some::valid::ns::containerStruct get_struct_struct() &&;
8060 
8061   template <typename T_AnnotatedStruct_struct_struct_struct_setter = ::some::valid::ns::containerStruct>
8062   [[deprecated("Use `FOO.struct_struct_ref() = BAR;` instead of `FOO.set_struct_struct(BAR);`")]]
8063   ::some::valid::ns::containerStruct& set_struct_struct(T_AnnotatedStruct_struct_struct_struct_setter&& struct_struct_) {
8064     struct_struct_ref() = std::forward<T_AnnotatedStruct_struct_struct_struct_setter>(struct_struct_);
8065     return struct_struct;
8066   }
8067 
8068   template <class Protocol_>
8069   uint32_t read(Protocol_* iprot);
8070   template <class Protocol_>
8071   uint32_t serializedSize(Protocol_ const* prot_) const;
8072   template <class Protocol_>
8073   uint32_t serializedSizeZC(Protocol_ const* prot_) const;
8074   template <class Protocol_>
8075   uint32_t write(Protocol_* prot_) const;
8076   // user defined code (cpp2.methods = ...)
8077   void foo(const std::string& bar) {}
8078 
8079  private:
8080   template <class Protocol_>
8081   void readNoXfer(Protocol_* iprot);
8082 
8083   friend class ::apache::thrift::Cpp2Ops<AnnotatedStruct>;
8084   friend void swap(AnnotatedStruct& a, AnnotatedStruct& b);
8085 };
8086 
8087 template <class Protocol_>
8088 uint32_t AnnotatedStruct::read(Protocol_* iprot) {
8089   auto _xferStart = iprot->getCursorPosition();
8090   readNoXfer(iprot);
8091   return iprot->getCursorPosition() - _xferStart;
8092 }
8093 
8094 }}} // some::valid::ns
8095 namespace some { namespace valid { namespace ns {
8096 class ComplexContainerStruct final  {
8097  private:
8098   friend struct ::apache::thrift::detail::st::struct_private_access;
8099 
8100   //  used by a static_assert in the corresponding source
8101   static constexpr bool __fbthrift_cpp2_gen_json = true;
8102   static constexpr bool __fbthrift_cpp2_gen_nimble = false;
8103   static constexpr bool __fbthrift_cpp2_gen_has_thrift_uri = false;
8104 
8105   void __fbthrift_clear();
8106 
8107  public:
8108   using __fbthrift_cpp2_type = ComplexContainerStruct;
8109   static constexpr bool __fbthrift_cpp2_is_union =
8110     false;
8111 
8112 
8113  public:
8114 
8115   ComplexContainerStruct() {
8116   }
8117   // FragileConstructor for use in initialization lists only.
8118   [[deprecated("This constructor is deprecated")]]
8119   ComplexContainerStruct(apache::thrift::FragileConstructor, ::std::map<::std::string, ::some::valid::ns::IOBuf> map_of_iobufs__arg, ::std::map<::std::string, ::some::valid::ns::IOBufPtr> map_of_iobuf_ptrs__arg);
8120 
8121   ComplexContainerStruct(ComplexContainerStruct&&) noexcept;
8122   ComplexContainerStruct(const ComplexContainerStruct& src);
8123 
8124 
8125   ComplexContainerStruct& operator=(ComplexContainerStruct&&) noexcept;
8126   ComplexContainerStruct& operator=(const ComplexContainerStruct& src);
8127  private:
8128   ::std::map<::std::string, ::some::valid::ns::IOBuf> __fbthrift_field_map_of_iobufs;
8129  private:
8130   ::std::map<::std::string, ::some::valid::ns::IOBufPtr> __fbthrift_field_map_of_iobuf_ptrs;
8131  private:
8132   apache::thrift::detail::isset_bitset<2, false> __isset;
8133 
8134  public:
8135 
8136   bool operator==(const ComplexContainerStruct&) const;
8137   bool operator<(const ComplexContainerStruct&) const;
8138 
8139   template <typename..., typename T = ::std::map<::std::string, ::some::valid::ns::IOBuf>>
8140   FOLLY_ERASE ::apache::thrift::field_ref<const T&> map_of_iobufs_ref() const& {
8141     return {this->__fbthrift_field_map_of_iobufs, __isset.at(0), __isset.bit(0)};
8142   }
8143 
8144   template <typename..., typename T = ::std::map<::std::string, ::some::valid::ns::IOBuf>>
8145   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> map_of_iobufs_ref() const&& {
8146     return {static_cast<const T&&>(this->__fbthrift_field_map_of_iobufs), __isset.at(0), __isset.bit(0)};
8147   }
8148 
8149   template <typename..., typename T = ::std::map<::std::string, ::some::valid::ns::IOBuf>>
8150   FOLLY_ERASE ::apache::thrift::field_ref<T&> map_of_iobufs_ref() & {
8151     return {this->__fbthrift_field_map_of_iobufs, __isset.at(0), __isset.bit(0)};
8152   }
8153 
8154   template <typename..., typename T = ::std::map<::std::string, ::some::valid::ns::IOBuf>>
8155   FOLLY_ERASE ::apache::thrift::field_ref<T&&> map_of_iobufs_ref() && {
8156     return {static_cast<T&&>(this->__fbthrift_field_map_of_iobufs), __isset.at(0), __isset.bit(0)};
8157   }
8158 
8159   template <typename..., typename T = ::std::map<::std::string, ::some::valid::ns::IOBuf>>
8160   FOLLY_ERASE ::apache::thrift::field_ref<const T&> map_of_iobufs() const& {
8161     return {this->__fbthrift_field_map_of_iobufs, __isset.at(0), __isset.bit(0)};
8162   }
8163 
8164   template <typename..., typename T = ::std::map<::std::string, ::some::valid::ns::IOBuf>>
8165   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> map_of_iobufs() const&& {
8166     return {static_cast<const T&&>(this->__fbthrift_field_map_of_iobufs), __isset.at(0), __isset.bit(0)};
8167   }
8168 
8169   template <typename..., typename T = ::std::map<::std::string, ::some::valid::ns::IOBuf>>
8170   FOLLY_ERASE ::apache::thrift::field_ref<T&> map_of_iobufs() & {
8171     return {this->__fbthrift_field_map_of_iobufs, __isset.at(0), __isset.bit(0)};
8172   }
8173 
8174   template <typename..., typename T = ::std::map<::std::string, ::some::valid::ns::IOBuf>>
8175   FOLLY_ERASE ::apache::thrift::field_ref<T&&> map_of_iobufs() && {
8176     return {static_cast<T&&>(this->__fbthrift_field_map_of_iobufs), __isset.at(0), __isset.bit(0)};
8177   }
8178 
8179   template <typename..., typename T = ::std::map<::std::string, ::some::valid::ns::IOBufPtr>>
8180   FOLLY_ERASE ::apache::thrift::field_ref<const T&> map_of_iobuf_ptrs_ref() const& {
8181     return {this->__fbthrift_field_map_of_iobuf_ptrs, __isset.at(1), __isset.bit(1)};
8182   }
8183 
8184   template <typename..., typename T = ::std::map<::std::string, ::some::valid::ns::IOBufPtr>>
8185   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> map_of_iobuf_ptrs_ref() const&& {
8186     return {static_cast<const T&&>(this->__fbthrift_field_map_of_iobuf_ptrs), __isset.at(1), __isset.bit(1)};
8187   }
8188 
8189   template <typename..., typename T = ::std::map<::std::string, ::some::valid::ns::IOBufPtr>>
8190   FOLLY_ERASE ::apache::thrift::field_ref<T&> map_of_iobuf_ptrs_ref() & {
8191     return {this->__fbthrift_field_map_of_iobuf_ptrs, __isset.at(1), __isset.bit(1)};
8192   }
8193 
8194   template <typename..., typename T = ::std::map<::std::string, ::some::valid::ns::IOBufPtr>>
8195   FOLLY_ERASE ::apache::thrift::field_ref<T&&> map_of_iobuf_ptrs_ref() && {
8196     return {static_cast<T&&>(this->__fbthrift_field_map_of_iobuf_ptrs), __isset.at(1), __isset.bit(1)};
8197   }
8198 
8199   template <typename..., typename T = ::std::map<::std::string, ::some::valid::ns::IOBufPtr>>
8200   FOLLY_ERASE ::apache::thrift::field_ref<const T&> map_of_iobuf_ptrs() const& {
8201     return {this->__fbthrift_field_map_of_iobuf_ptrs, __isset.at(1), __isset.bit(1)};
8202   }
8203 
8204   template <typename..., typename T = ::std::map<::std::string, ::some::valid::ns::IOBufPtr>>
8205   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> map_of_iobuf_ptrs() const&& {
8206     return {static_cast<const T&&>(this->__fbthrift_field_map_of_iobuf_ptrs), __isset.at(1), __isset.bit(1)};
8207   }
8208 
8209   template <typename..., typename T = ::std::map<::std::string, ::some::valid::ns::IOBufPtr>>
8210   FOLLY_ERASE ::apache::thrift::field_ref<T&> map_of_iobuf_ptrs() & {
8211     return {this->__fbthrift_field_map_of_iobuf_ptrs, __isset.at(1), __isset.bit(1)};
8212   }
8213 
8214   template <typename..., typename T = ::std::map<::std::string, ::some::valid::ns::IOBufPtr>>
8215   FOLLY_ERASE ::apache::thrift::field_ref<T&&> map_of_iobuf_ptrs() && {
8216     return {static_cast<T&&>(this->__fbthrift_field_map_of_iobuf_ptrs), __isset.at(1), __isset.bit(1)};
8217   }
8218   const ::std::map<::std::string, ::some::valid::ns::IOBuf>& get_map_of_iobufs() const&;
8219   ::std::map<::std::string, ::some::valid::ns::IOBuf> get_map_of_iobufs() &&;
8220 
8221   template <typename T_ComplexContainerStruct_map_of_iobufs_struct_setter = ::std::map<::std::string, ::some::valid::ns::IOBuf>>
8222   [[deprecated("Use `FOO.map_of_iobufs_ref() = BAR;` instead of `FOO.set_map_of_iobufs(BAR);`")]]
8223   ::std::map<::std::string, ::some::valid::ns::IOBuf>& set_map_of_iobufs(T_ComplexContainerStruct_map_of_iobufs_struct_setter&& map_of_iobufs_) {
8224     map_of_iobufs_ref() = std::forward<T_ComplexContainerStruct_map_of_iobufs_struct_setter>(map_of_iobufs_);
8225     return __fbthrift_field_map_of_iobufs;
8226   }
8227   const ::std::map<::std::string, ::some::valid::ns::IOBufPtr>& get_map_of_iobuf_ptrs() const&;
8228   ::std::map<::std::string, ::some::valid::ns::IOBufPtr> get_map_of_iobuf_ptrs() &&;
8229 
8230   template <typename T_ComplexContainerStruct_map_of_iobuf_ptrs_struct_setter = ::std::map<::std::string, ::some::valid::ns::IOBufPtr>>
8231   [[deprecated("Use `FOO.map_of_iobuf_ptrs_ref() = BAR;` instead of `FOO.set_map_of_iobuf_ptrs(BAR);`")]]
8232   ::std::map<::std::string, ::some::valid::ns::IOBufPtr>& set_map_of_iobuf_ptrs(T_ComplexContainerStruct_map_of_iobuf_ptrs_struct_setter&& map_of_iobuf_ptrs_) {
8233     map_of_iobuf_ptrs_ref() = std::forward<T_ComplexContainerStruct_map_of_iobuf_ptrs_struct_setter>(map_of_iobuf_ptrs_);
8234     return __fbthrift_field_map_of_iobuf_ptrs;
8235   }
8236 
8237   template <class Protocol_>
8238   uint32_t read(Protocol_* iprot);
8239   template <class Protocol_>
8240   uint32_t serializedSize(Protocol_ const* prot_) const;
8241   template <class Protocol_>
8242   uint32_t serializedSizeZC(Protocol_ const* prot_) const;
8243   template <class Protocol_>
8244   uint32_t write(Protocol_* prot_) const;
8245 
8246  private:
8247   template <class Protocol_>
8248   void readNoXfer(Protocol_* iprot);
8249 
8250   friend class ::apache::thrift::Cpp2Ops<ComplexContainerStruct>;
8251   friend void swap(ComplexContainerStruct& a, ComplexContainerStruct& b);
8252 };
8253 
8254 template <class Protocol_>
8255 uint32_t ComplexContainerStruct::read(Protocol_* iprot) {
8256   auto _xferStart = iprot->getCursorPosition();
8257   readNoXfer(iprot);
8258   return iprot->getCursorPosition() - _xferStart;
8259 }
8260 
8261 }}} // some::valid::ns
8262 namespace some { namespace valid { namespace ns {
8263 class FloatStruct final  {
8264  private:
8265   friend struct ::apache::thrift::detail::st::struct_private_access;
8266 
8267   //  used by a static_assert in the corresponding source
8268   static constexpr bool __fbthrift_cpp2_gen_json = true;
8269   static constexpr bool __fbthrift_cpp2_gen_nimble = false;
8270   static constexpr bool __fbthrift_cpp2_gen_has_thrift_uri = false;
8271 
8272   void __fbthrift_clear();
8273 
8274  public:
8275   using __fbthrift_cpp2_type = FloatStruct;
8276   static constexpr bool __fbthrift_cpp2_is_union =
8277     false;
8278 
8279 
8280  public:
8281 
8282   FloatStruct() :
8283       __fbthrift_field_floatField(),
8284       __fbthrift_field_doubleField() {
8285   }
8286   // FragileConstructor for use in initialization lists only.
8287   [[deprecated("This constructor is deprecated")]]
8288   FloatStruct(apache::thrift::FragileConstructor, float floatField__arg, double doubleField__arg);
8289 
8290   FloatStruct(FloatStruct&&) = default;
8291 
8292   FloatStruct(const FloatStruct&) = default;
8293 
8294 
8295   FloatStruct& operator=(FloatStruct&&) = default;
8296 
8297   FloatStruct& operator=(const FloatStruct&) = default;
8298  private:
8299   float __fbthrift_field_floatField;
8300  private:
8301   double __fbthrift_field_doubleField;
8302  private:
8303   apache::thrift::detail::isset_bitset<2, false> __isset;
8304 
8305  public:
8306 
8307   bool operator==(const FloatStruct&) const;
8308   bool operator<(const FloatStruct&) const;
8309 
8310   template <typename..., typename T = float>
8311   FOLLY_ERASE ::apache::thrift::field_ref<const T&> floatField_ref() const& {
8312     return {this->__fbthrift_field_floatField, __isset.at(0), __isset.bit(0)};
8313   }
8314 
8315   template <typename..., typename T = float>
8316   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> floatField_ref() const&& {
8317     return {static_cast<const T&&>(this->__fbthrift_field_floatField), __isset.at(0), __isset.bit(0)};
8318   }
8319 
8320   template <typename..., typename T = float>
8321   FOLLY_ERASE ::apache::thrift::field_ref<T&> floatField_ref() & {
8322     return {this->__fbthrift_field_floatField, __isset.at(0), __isset.bit(0)};
8323   }
8324 
8325   template <typename..., typename T = float>
8326   FOLLY_ERASE ::apache::thrift::field_ref<T&&> floatField_ref() && {
8327     return {static_cast<T&&>(this->__fbthrift_field_floatField), __isset.at(0), __isset.bit(0)};
8328   }
8329 
8330   template <typename..., typename T = float>
8331   FOLLY_ERASE ::apache::thrift::field_ref<const T&> floatField() const& {
8332     return {this->__fbthrift_field_floatField, __isset.at(0), __isset.bit(0)};
8333   }
8334 
8335   template <typename..., typename T = float>
8336   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> floatField() const&& {
8337     return {static_cast<const T&&>(this->__fbthrift_field_floatField), __isset.at(0), __isset.bit(0)};
8338   }
8339 
8340   template <typename..., typename T = float>
8341   FOLLY_ERASE ::apache::thrift::field_ref<T&> floatField() & {
8342     return {this->__fbthrift_field_floatField, __isset.at(0), __isset.bit(0)};
8343   }
8344 
8345   template <typename..., typename T = float>
8346   FOLLY_ERASE ::apache::thrift::field_ref<T&&> floatField() && {
8347     return {static_cast<T&&>(this->__fbthrift_field_floatField), __isset.at(0), __isset.bit(0)};
8348   }
8349 
8350   template <typename..., typename T = double>
8351   FOLLY_ERASE ::apache::thrift::field_ref<const T&> doubleField_ref() const& {
8352     return {this->__fbthrift_field_doubleField, __isset.at(1), __isset.bit(1)};
8353   }
8354 
8355   template <typename..., typename T = double>
8356   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> doubleField_ref() const&& {
8357     return {static_cast<const T&&>(this->__fbthrift_field_doubleField), __isset.at(1), __isset.bit(1)};
8358   }
8359 
8360   template <typename..., typename T = double>
8361   FOLLY_ERASE ::apache::thrift::field_ref<T&> doubleField_ref() & {
8362     return {this->__fbthrift_field_doubleField, __isset.at(1), __isset.bit(1)};
8363   }
8364 
8365   template <typename..., typename T = double>
8366   FOLLY_ERASE ::apache::thrift::field_ref<T&&> doubleField_ref() && {
8367     return {static_cast<T&&>(this->__fbthrift_field_doubleField), __isset.at(1), __isset.bit(1)};
8368   }
8369 
8370   template <typename..., typename T = double>
8371   FOLLY_ERASE ::apache::thrift::field_ref<const T&> doubleField() const& {
8372     return {this->__fbthrift_field_doubleField, __isset.at(1), __isset.bit(1)};
8373   }
8374 
8375   template <typename..., typename T = double>
8376   FOLLY_ERASE ::apache::thrift::field_ref<const T&&> doubleField() const&& {
8377     return {static_cast<const T&&>(this->__fbthrift_field_doubleField), __isset.at(1), __isset.bit(1)};
8378   }
8379 
8380   template <typename..., typename T = double>
8381   FOLLY_ERASE ::apache::thrift::field_ref<T&> doubleField() & {
8382     return {this->__fbthrift_field_doubleField, __isset.at(1), __isset.bit(1)};
8383   }
8384 
8385   template <typename..., typename T = double>
8386   FOLLY_ERASE ::apache::thrift::field_ref<T&&> doubleField() && {
8387     return {static_cast<T&&>(this->__fbthrift_field_doubleField), __isset.at(1), __isset.bit(1)};
8388   }
8389 
8390   float get_floatField() const {
8391     return __fbthrift_field_floatField;
8392   }
8393 
8394   [[deprecated("Use `FOO.floatField_ref() = BAR;` instead of `FOO.set_floatField(BAR);`")]]
8395   float& set_floatField(float floatField_) {
8396     floatField_ref() = floatField_;
8397     return __fbthrift_field_floatField;
8398   }
8399 
8400   double get_doubleField() const {
8401     return __fbthrift_field_doubleField;
8402   }
8403 
8404   [[deprecated("Use `FOO.doubleField_ref() = BAR;` instead of `FOO.set_doubleField(BAR);`")]]
8405   double& set_doubleField(double doubleField_) {
8406     doubleField_ref() = doubleField_;
8407     return __fbthrift_field_doubleField;
8408   }
8409 
8410   template <class Protocol_>
8411   uint32_t read(Protocol_* iprot);
8412   template <class Protocol_>
8413   uint32_t serializedSize(Protocol_ const* prot_) const;
8414   template <class Protocol_>
8415   uint32_t serializedSizeZC(Protocol_ const* prot_) const;
8416   template <class Protocol_>
8417   uint32_t write(Protocol_* prot_) const;
8418 
8419  private:
8420   template <class Protocol_>
8421   void readNoXfer(Protocol_* iprot);
8422 
8423   friend class ::apache::thrift::Cpp2Ops<FloatStruct>;
8424   friend void swap(FloatStruct& a, FloatStruct& b);
8425 };
8426 
8427 template <class Protocol_>
8428 uint32_t FloatStruct::read(Protocol_* iprot) {
8429   auto _xferStart = iprot->getCursorPosition();
8430   readNoXfer(iprot);
8431   return iprot->getCursorPosition() - _xferStart;
8432 }
8433 
8434 }}} // some::valid::ns
8435 namespace some { namespace valid { namespace ns {
8436 class FloatUnion final  {
8437  private:
8438   friend struct ::apache::thrift::detail::st::struct_private_access;
8439 
8440   //  used by a static_assert in the corresponding source
8441   static constexpr bool __fbthrift_cpp2_gen_json = true;
8442   static constexpr bool __fbthrift_cpp2_gen_nimble = false;
8443   static constexpr bool __fbthrift_cpp2_gen_has_thrift_uri = false;
8444 
8445   void __fbthrift_clear();
8446 
8447  public:
8448   using __fbthrift_cpp2_type = FloatUnion;
8449   static constexpr bool __fbthrift_cpp2_is_union =
8450     true;
8451 
8452 
8453  public:
8454   enum Type : int {
8455     __EMPTY__ = 0,
8456     floatSide = 1,
8457     doubleSide = 2,
8458   } ;
8459 
8460   FloatUnion()
8461       : type_(Type::__EMPTY__) {}
8462 
8463   FloatUnion(FloatUnion&& rhs) noexcept
8464       : type_(Type::__EMPTY__) {
8465     if (this == &rhs) { return; }
8466     if (rhs.type_ == Type::__EMPTY__) { return; }
8467     switch (rhs.type_) {
8468       case Type::floatSide:
8469       {
8470         set_floatSide(std::move(rhs.value_.floatSide));
8471         break;
8472       }
8473       case Type::doubleSide:
8474       {
8475         set_doubleSide(std::move(rhs.value_.doubleSide));
8476         break;
8477       }
8478       default:
8479       {
8480         assert(false);
8481         break;
8482       }
8483     }
8484     apache::thrift::clear(rhs);
8485   }
8486 
8487   FloatUnion(const FloatUnion& rhs)
8488       : type_(Type::__EMPTY__) {
8489     if (this == &rhs) { return; }
8490     if (rhs.type_ == Type::__EMPTY__) { return; }
8491     switch (rhs.type_) {
8492       case Type::floatSide:
8493       {
8494         set_floatSide(rhs.value_.floatSide);
8495         break;
8496       }
8497       case Type::doubleSide:
8498       {
8499         set_doubleSide(rhs.value_.doubleSide);
8500         break;
8501       }
8502       default:
8503       {
8504         assert(false);
8505         break;
8506       }
8507     }
8508   }
8509 
8510   FloatUnion& operator=(FloatUnion&& rhs) noexcept {
8511     if (this == &rhs) { return *this; }
8512     __fbthrift_clear();
8513     if (rhs.type_ == Type::__EMPTY__) { return *this; }
8514     switch (rhs.type_) {
8515       case Type::floatSide:
8516       {
8517         set_floatSide(std::move(rhs.value_.floatSide));
8518         break;
8519       }
8520       case Type::doubleSide:
8521       {
8522         set_doubleSide(std::move(rhs.value_.doubleSide));
8523         break;
8524       }
8525       default:
8526       {
8527         assert(false);
8528         break;
8529       }
8530     }
8531     apache::thrift::clear(rhs);
8532     return *this;
8533   }
8534 
8535   FloatUnion& operator=(const FloatUnion& rhs) {
8536     if (this == &rhs) { return *this; }
8537     __fbthrift_clear();
8538     if (rhs.type_ == Type::__EMPTY__) { return *this; }
8539     switch (rhs.type_) {
8540       case Type::floatSide:
8541       {
8542         set_floatSide(rhs.value_.floatSide);
8543         break;
8544       }
8545       case Type::doubleSide:
8546       {
8547         set_doubleSide(rhs.value_.doubleSide);
8548         break;
8549       }
8550       default:
8551       {
8552         assert(false);
8553         break;
8554       }
8555     }
8556     return *this;
8557   }
8558 
8559   ~FloatUnion() {
8560     apache::thrift::clear(*this);
8561   }
8562   union storage_type {
8563     float floatSide;
8564     double doubleSide;
8565 
8566     storage_type() {}
8567     ~storage_type() {}
8568   } ;
8569 
8570   bool operator==(const FloatUnion&) const;
8571   bool operator<(const FloatUnion&) const;
8572 
8573   float& set_floatSide(float t = float()) {
8574     __fbthrift_clear();
8575     type_ = Type::floatSide;
8576     ::new (std::addressof(value_.floatSide)) float(t);
8577     return value_.floatSide;
8578   }
8579 
8580   double& set_doubleSide(double t = double()) {
8581     __fbthrift_clear();
8582     type_ = Type::doubleSide;
8583     ::new (std::addressof(value_.doubleSide)) double(t);
8584     return value_.doubleSide;
8585   }
8586 
8587   float const& get_floatSide() const {
8588     if (type_ != Type::floatSide) {
8589       ::apache::thrift::detail::throw_on_bad_field_access();
8590     }
8591     return value_.floatSide;
8592   }
8593 
8594   double const& get_doubleSide() const {
8595     if (type_ != Type::doubleSide) {
8596       ::apache::thrift::detail::throw_on_bad_field_access();
8597     }
8598     return value_.doubleSide;
8599   }
8600 
8601   float& mutable_floatSide() {
8602     assert(type_ == Type::floatSide);
8603     return value_.floatSide;
8604   }
8605 
8606   double& mutable_doubleSide() {
8607     assert(type_ == Type::doubleSide);
8608     return value_.doubleSide;
8609   }
8610 
8611   float move_floatSide() {
8612     assert(type_ == Type::floatSide);
8613     return std::move(value_.floatSide);
8614   }
8615 
8616   double move_doubleSide() {
8617     assert(type_ == Type::doubleSide);
8618     return std::move(value_.doubleSide);
8619   }
8620 
8621   template <typename..., typename T = float>
8622   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> floatSide_ref() const& {
8623     return {value_.floatSide, type_, floatSide, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
8624   }
8625 
8626   template <typename..., typename T = float>
8627   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> floatSide_ref() const&& {
8628     return {std::move(value_.floatSide), type_, floatSide, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
8629   }
8630 
8631   template <typename..., typename T = float>
8632   FOLLY_ERASE ::apache::thrift::union_field_ref<T&> floatSide_ref() & {
8633     return {value_.floatSide, type_, floatSide, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
8634   }
8635 
8636   template <typename..., typename T = float>
8637   FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> floatSide_ref() && {
8638     return {std::move(value_.floatSide), type_, floatSide, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
8639   }
8640   template <typename..., typename T = double>
8641   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&> doubleSide_ref() const& {
8642     return {value_.doubleSide, type_, doubleSide, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
8643   }
8644 
8645   template <typename..., typename T = double>
8646   FOLLY_ERASE ::apache::thrift::union_field_ref<const T&&> doubleSide_ref() const&& {
8647     return {std::move(value_.doubleSide), type_, doubleSide, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
8648   }
8649 
8650   template <typename..., typename T = double>
8651   FOLLY_ERASE ::apache::thrift::union_field_ref<T&> doubleSide_ref() & {
8652     return {value_.doubleSide, type_, doubleSide, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
8653   }
8654 
8655   template <typename..., typename T = double>
8656   FOLLY_ERASE ::apache::thrift::union_field_ref<T&&> doubleSide_ref() && {
8657     return {std::move(value_.doubleSide), type_, doubleSide, this, ::apache::thrift::detail::union_field_ref_owner_vtable_for<decltype(*this)>};
8658   }
8659   Type getType() const { return static_cast<Type>(type_); }
8660 
8661   template <class Protocol_>
8662   uint32_t read(Protocol_* iprot);
8663   template <class Protocol_>
8664   uint32_t serializedSize(Protocol_ const* prot_) const;
8665   template <class Protocol_>
8666   uint32_t serializedSizeZC(Protocol_ const* prot_) const;
8667   template <class Protocol_>
8668   uint32_t write(Protocol_* prot_) const;
8669  protected:
8670   template <class T>
8671   void destruct(T &val) {
8672     (&val)->~T();
8673   }
8674 
8675   storage_type value_;
8676   std::underlying_type_t<Type> type_;
8677 
8678  private:
8679   template <class Protocol_>
8680   void readNoXfer(Protocol_* iprot);
8681 
8682   friend class ::apache::thrift::Cpp2Ops<FloatUnion>;
8683   friend void swap(FloatUnion& a, FloatUnion& b);
8684 };
8685 
8686 template <class Protocol_>
8687 uint32_t FloatUnion::read(Protocol_* iprot) {
8688   auto _xferStart = iprot->getCursorPosition();
8689   readNoXfer(iprot);
8690   return iprot->getCursorPosition() - _xferStart;
8691 }
8692 
8693 }}} // some::valid::ns
8694 namespace some { namespace valid { namespace ns {
8695 class AllRequiredNoExceptMoveCtrStruct final  {
8696  private:
8697   friend struct ::apache::thrift::detail::st::struct_private_access;
8698 
8699   //  used by a static_assert in the corresponding source
8700   static constexpr bool __fbthrift_cpp2_gen_json = true;
8701   static constexpr bool __fbthrift_cpp2_gen_nimble = false;
8702   static constexpr bool __fbthrift_cpp2_gen_has_thrift_uri = false;
8703 
8704   void __fbthrift_clear();
8705 
8706  public:
8707   using __fbthrift_cpp2_type = AllRequiredNoExceptMoveCtrStruct;
8708   static constexpr bool __fbthrift_cpp2_is_union =
8709     false;
8710 
8711 
8712  public:
8713 
8714   AllRequiredNoExceptMoveCtrStruct() :
8715       intField() {
8716   }
8717   // FragileConstructor for use in initialization lists only.
8718   [[deprecated("This constructor is deprecated")]]
8719   AllRequiredNoExceptMoveCtrStruct(apache::thrift::FragileConstructor, ::std::int64_t intField__arg);
8720 
8721   AllRequiredNoExceptMoveCtrStruct(AllRequiredNoExceptMoveCtrStruct&&) = default;
8722 
8723   AllRequiredNoExceptMoveCtrStruct(const AllRequiredNoExceptMoveCtrStruct&) = default;
8724 
8725 
8726   AllRequiredNoExceptMoveCtrStruct& operator=(AllRequiredNoExceptMoveCtrStruct&&) = default;
8727 
8728   AllRequiredNoExceptMoveCtrStruct& operator=(const AllRequiredNoExceptMoveCtrStruct&) = default;
8729  public:
8730   ::std::int64_t intField;
8731 
8732  public:
8733 
8734   bool operator==(const AllRequiredNoExceptMoveCtrStruct&) const;
8735   bool operator<(const AllRequiredNoExceptMoveCtrStruct&) const;
8736 
8737   template <typename..., typename T = ::std::int64_t>
8738   FOLLY_ERASE ::apache::thrift::required_field_ref<const T&> intField_ref() const& {
8739     return ::apache::thrift::required_field_ref<const T&>{this->intField};
8740   }
8741 
8742   template <typename..., typename T = ::std::int64_t>
8743   FOLLY_ERASE ::apache::thrift::required_field_ref<const T&&> intField_ref() const&& {
8744     return ::apache::thrift::required_field_ref<const T&&>{static_cast<const T&&>(this->intField)};
8745   }
8746 
8747   template <typename..., typename T = ::std::int64_t>
8748   FOLLY_ERASE ::apache::thrift::required_field_ref<T&> intField_ref() & {
8749     return ::apache::thrift::required_field_ref<T&>{this->intField};
8750   }
8751 
8752   template <typename..., typename T = ::std::int64_t>
8753   FOLLY_ERASE ::apache::thrift::required_field_ref<T&&> intField_ref() && {
8754     return ::apache::thrift::required_field_ref<T&&>{static_cast<T&&>(this->intField)};
8755   }
8756 
8757   ::std::int64_t get_intField() const {
8758     return intField;
8759   }
8760 
8761   [[deprecated("Use `FOO.intField_ref() = BAR;` instead of `FOO.set_intField(BAR);`")]]
8762   ::std::int64_t& set_intField(::std::int64_t intField_) {
8763     intField_ref() = intField_;
8764     return intField;
8765   }
8766 
8767   template <class Protocol_>
8768   uint32_t read(Protocol_* iprot);
8769   template <class Protocol_>
8770   uint32_t serializedSize(Protocol_ const* prot_) const;
8771   template <class Protocol_>
8772   uint32_t serializedSizeZC(Protocol_ const* prot_) const;
8773   template <class Protocol_>
8774   uint32_t write(Protocol_* prot_) const;
8775 
8776  private:
8777   template <class Protocol_>
8778   void readNoXfer(Protocol_* iprot);
8779 
8780   friend class ::apache::thrift::Cpp2Ops<AllRequiredNoExceptMoveCtrStruct>;
8781   friend void swap(AllRequiredNoExceptMoveCtrStruct& a, AllRequiredNoExceptMoveCtrStruct& b);
8782 };
8783 
8784 template <class Protocol_>
8785 uint32_t AllRequiredNoExceptMoveCtrStruct::read(Protocol_* iprot) {
8786   auto _xferStart = iprot->getCursorPosition();
8787   readNoXfer(iprot);
8788   return iprot->getCursorPosition() - _xferStart;
8789 }
8790 
8791 }}} // some::valid::ns
8792 
8793 namespace apache { namespace thrift {
8794 
8795 template <> struct TEnumDataStorage<::some::valid::ns::SimpleUnion::Type>;
8796 
8797 template <> struct TEnumTraits<::some::valid::ns::SimpleUnion::Type> {
8798   using type = ::some::valid::ns::SimpleUnion::Type;
8799 
8800   static constexpr std::size_t const size = 2;
8801   static folly::Range<type const*> const values;
8802   static folly::Range<folly::StringPiece const*> const names;
8803 
8804   static char const* findName(type value);
8805   static bool findValue(char const* name, type* out);
8806 
8807 };
8808 
8809 template <> struct TEnumDataStorage<::some::valid::ns::ComplexUnion::Type>;
8810 
8811 template <> struct TEnumTraits<::some::valid::ns::ComplexUnion::Type> {
8812   using type = ::some::valid::ns::ComplexUnion::Type;
8813 
8814   static constexpr std::size_t const size = 28;
8815   static folly::Range<type const*> const values;
8816   static folly::Range<folly::StringPiece const*> const names;
8817 
8818   static char const* findName(type value);
8819   static bool findValue(char const* name, type* out);
8820 
8821 };
8822 
8823 template <> struct TEnumDataStorage<::some::valid::ns::FloatUnion::Type>;
8824 
8825 template <> struct TEnumTraits<::some::valid::ns::FloatUnion::Type> {
8826   using type = ::some::valid::ns::FloatUnion::Type;
8827 
8828   static constexpr std::size_t const size = 2;
8829   static folly::Range<type const*> const values;
8830   static folly::Range<folly::StringPiece const*> const names;
8831 
8832   static char const* findName(type value);
8833   static bool findValue(char const* name, type* out);
8834 
8835 };
8836 }} // apache::thrift
8837