Where Online Learning is simpler!
The C and C++ Include Header Files
/usr/include/c++/11/tr1/type_traits
$ cat -n /usr/include/c++/11/tr1/type_traits 1 // TR1 type_traits -*- C++ -*- 2 3 // Copyright (C) 2004-2021 Free Software Foundation, Inc. 4 // 5 // This file is part of the GNU ISO C++ Library. This library is free 6 // software; you can redistribute it and/or modify it under the 7 // terms of the GNU General Public License as published by the 8 // Free Software Foundation; either version 3, or (at your option) 9 // any later version. 10 11 // This library is distributed in the hope that it will be useful, 12 // but WITHOUT ANY WARRANTY; without even the implied warranty of 13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 // GNU General Public License for more details. 15 16 // Under Section 7 of GPL version 3, you are granted additional 17 // permissions described in the GCC Runtime Library Exception, version 18 // 3.1, as published by the Free Software Foundation. 19 20 // You should have received a copy of the GNU General Public License and 21 // a copy of the GCC Runtime Library Exception along with this program; 22 // see the files COPYING3 and COPYING.RUNTIME respectively. If not, see 23 //
. 24 25 /** @file tr1/type_traits 26 * This is a TR1 C++ Library header. 27 */ 28 29 #ifndef _GLIBCXX_TR1_TYPE_TRAITS 30 #define _GLIBCXX_TR1_TYPE_TRAITS 1 31 32 #pragma GCC system_header 33 34 #include
35 36 namespace std _GLIBCXX_VISIBILITY(default) 37 { 38 _GLIBCXX_BEGIN_NAMESPACE_VERSION 39 40 namespace tr1 41 { 42 /** 43 * @addtogroup metaprogramming 44 * @{ 45 */ 46 47 struct __sfinae_types 48 { 49 typedef char __one; 50 typedef struct { char __arr[2]; } __two; 51 }; 52 53 #define _DEFINE_SPEC_0_HELPER \ 54 template<> 55 56 #define _DEFINE_SPEC_1_HELPER \ 57 template
58 59 #define _DEFINE_SPEC_2_HELPER \ 60 template
61 62 #define _DEFINE_SPEC(_Order, _Trait, _Type, _Value) \ 63 _DEFINE_SPEC_##_Order##_HELPER \ 64 struct _Trait<_Type> \ 65 : public integral_constant
{ }; 66 67 // helper classes [4.3]. 68 69 /// integral_constant 70 template
71 struct integral_constant 72 { 73 static const _Tp value = __v; 74 typedef _Tp value_type; 75 typedef integral_constant<_Tp, __v> type; 76 }; 77 78 /// typedef for true_type 79 typedef integral_constant
true_type; 80 81 /// typedef for false_type 82 typedef integral_constant
false_type; 83 84 template
85 const _Tp integral_constant<_Tp, __v>::value; 86 87 /// remove_cv 88 template
89 struct remove_cv; 90 91 template
92 struct __is_void_helper 93 : public false_type { }; 94 _DEFINE_SPEC(0, __is_void_helper, void, true) 95 96 // primary type categories [4.5.1]. 97 98 /// is_void 99 template
100 struct is_void 101 : public integral_constant
::type>::value)> 103 { }; 104 105 template
106 struct __is_integral_helper 107 : public false_type { }; 108 _DEFINE_SPEC(0, __is_integral_helper, bool, true) 109 _DEFINE_SPEC(0, __is_integral_helper, char, true) 110 _DEFINE_SPEC(0, __is_integral_helper, signed char, true) 111 _DEFINE_SPEC(0, __is_integral_helper, unsigned char, true) 112 #ifdef _GLIBCXX_USE_WCHAR_T 113 _DEFINE_SPEC(0, __is_integral_helper, wchar_t, true) 114 #endif 115 _DEFINE_SPEC(0, __is_integral_helper, short, true) 116 _DEFINE_SPEC(0, __is_integral_helper, unsigned short, true) 117 _DEFINE_SPEC(0, __is_integral_helper, int, true) 118 _DEFINE_SPEC(0, __is_integral_helper, unsigned int, true) 119 _DEFINE_SPEC(0, __is_integral_helper, long, true) 120 _DEFINE_SPEC(0, __is_integral_helper, unsigned long, true) 121 _DEFINE_SPEC(0, __is_integral_helper, long long, true) 122 _DEFINE_SPEC(0, __is_integral_helper, unsigned long long, true) 123 124 /// is_integral 125 template
126 struct is_integral 127 : public integral_constant
::type>::value)> 129 { }; 130 131 template
132 struct __is_floating_point_helper 133 : public false_type { }; 134 _DEFINE_SPEC(0, __is_floating_point_helper, float, true) 135 _DEFINE_SPEC(0, __is_floating_point_helper, double, true) 136 _DEFINE_SPEC(0, __is_floating_point_helper, long double, true) 137 138 /// is_floating_point 139 template
140 struct is_floating_point 141 : public integral_constant
::type>::value)> 143 { }; 144 145 /// is_array 146 template
147 struct is_array 148 : public false_type { }; 149 150 template
151 struct is_array<_Tp[_Size]> 152 : public true_type { }; 153 154 template
155 struct is_array<_Tp[]> 156 : public true_type { }; 157 158 template
159 struct __is_pointer_helper 160 : public false_type { }; 161 _DEFINE_SPEC(1, __is_pointer_helper, _Tp*, true) 162 163 /// is_pointer 164 template
165 struct is_pointer 166 : public integral_constant
::type>::value)> 168 { }; 169 170 /// is_reference 171 template
172 struct is_reference; 173 174 /// is_function 175 template
176 struct is_function; 177 178 template
179 struct __is_member_object_pointer_helper 180 : public false_type { }; 181 _DEFINE_SPEC(2, __is_member_object_pointer_helper, _Tp _Cp::*, 182 !is_function<_Tp>::value) 183 184 /// is_member_object_pointer 185 template
186 struct is_member_object_pointer 187 : public integral_constant
::type>::value)> 189 { }; 190 191 template
192 struct __is_member_function_pointer_helper 193 : public false_type { }; 194 _DEFINE_SPEC(2, __is_member_function_pointer_helper, _Tp _Cp::*, 195 is_function<_Tp>::value) 196 197 /// is_member_function_pointer 198 template
199 struct is_member_function_pointer 200 : public integral_constant
::type>::value)> 202 { }; 203 204 /// is_enum 205 template
206 struct is_enum 207 : public integral_constant
208 { }; 209 210 /// is_union 211 template
212 struct is_union 213 : public integral_constant
214 { }; 215 216 /// is_class 217 template
218 struct is_class 219 : public integral_constant
220 { }; 221 222 /// is_function 223 template
224 struct is_function 225 : public false_type { }; 226 template
227 struct is_function<_Res(_ArgTypes...)> 228 : public true_type { }; 229 template
230 struct is_function<_Res(_ArgTypes......)> 231 : public true_type { }; 232 template
233 struct is_function<_Res(_ArgTypes...) const> 234 : public true_type { }; 235 template
236 struct is_function<_Res(_ArgTypes......) const> 237 : public true_type { }; 238 template
239 struct is_function<_Res(_ArgTypes...) volatile> 240 : public true_type { }; 241 template
242 struct is_function<_Res(_ArgTypes......) volatile> 243 : public true_type { }; 244 template
245 struct is_function<_Res(_ArgTypes...) const volatile> 246 : public true_type { }; 247 template
248 struct is_function<_Res(_ArgTypes......) const volatile> 249 : public true_type { }; 250 251 // composite type traits [4.5.2]. 252 253 /// is_arithmetic 254 template
255 struct is_arithmetic 256 : public integral_constant
::value 257 || is_floating_point<_Tp>::value)> 258 { }; 259 260 /// is_fundamental 261 template
262 struct is_fundamental 263 : public integral_constant
::value 264 || is_void<_Tp>::value)> 265 { }; 266 267 /// is_object 268 template
269 struct is_object 270 : public integral_constant
::value 271 || is_reference<_Tp>::value 272 || is_void<_Tp>::value)> 273 { }; 274 275 /// is_member_pointer 276 template
277 struct is_member_pointer; 278 279 /// is_scalar 280 template
281 struct is_scalar 282 : public integral_constant
::value 283 || is_enum<_Tp>::value 284 || is_pointer<_Tp>::value 285 || is_member_pointer<_Tp>::value)> 286 { }; 287 288 /// is_compound 289 template
290 struct is_compound 291 : public integral_constant
::value> { }; 292 293 /// is_member_pointer 294 template
295 struct __is_member_pointer_helper 296 : public false_type { }; 297 _DEFINE_SPEC(2, __is_member_pointer_helper, _Tp _Cp::*, true) 298 299 template
300 struct is_member_pointer 301 : public integral_constant
::type>::value)> 303 { }; 304 305 // type properties [4.5.3]. 306 /// is_const 307 template
308 struct is_const 309 : public false_type { }; 310 311 template
312 struct is_const<_Tp const> 313 : public true_type { }; 314 315 /// is_volatile 316 template
317 struct is_volatile 318 : public false_type { }; 319 320 template
321 struct is_volatile<_Tp volatile> 322 : public true_type { }; 323 324 /// is_empty 325 template
326 struct is_empty 327 : public integral_constant
328 { }; 329 330 /// is_polymorphic 331 template
332 struct is_polymorphic 333 : public integral_constant
334 { }; 335 336 /// is_abstract 337 template
338 struct is_abstract 339 : public integral_constant
340 { }; 341 342 /// has_virtual_destructor 343 template
344 struct has_virtual_destructor 345 : public integral_constant
346 { }; 347 348 /// alignment_of 349 template
350 struct alignment_of 351 : public integral_constant
{ }; 352 353 /// rank 354 template
355 struct rank 356 : public integral_constant
{ }; 357 358 template
359 struct rank<_Tp[_Size]> 360 : public integral_constant
::value> { }; 361 362 template
363 struct rank<_Tp[]> 364 : public integral_constant
::value> { }; 365 366 /// extent 367 template
368 struct extent 369 : public integral_constant
{ }; 370 371 template
372 struct extent<_Tp[_Size], _Uint> 373 : public integral_constant
::value> 376 { }; 377 378 template
379 struct extent<_Tp[], _Uint> 380 : public integral_constant
::value> 383 { }; 384 385 // relationships between types [4.6]. 386 387 /// is_same 388 template
389 struct is_same 390 : public false_type { }; 391 392 template
393 struct is_same<_Tp, _Tp> 394 : public true_type { }; 395 396 // const-volatile modifications [4.7.1]. 397 398 /// remove_const 399 template
400 struct remove_const 401 { typedef _Tp type; }; 402 403 template
404 struct remove_const<_Tp const> 405 { typedef _Tp type; }; 406 407 /// remove_volatile 408 template
409 struct remove_volatile 410 { typedef _Tp type; }; 411 412 template
413 struct remove_volatile<_Tp volatile> 414 { typedef _Tp type; }; 415 416 /// remove_cv 417 template
418 struct remove_cv 419 { 420 typedef typename 421 remove_const
::type>::type type; 422 }; 423 424 /// add_const 425 template
426 struct add_const 427 { typedef _Tp const type; }; 428 429 /// add_volatile 430 template
431 struct add_volatile 432 { typedef _Tp volatile type; }; 433 434 /// add_cv 435 template
436 struct add_cv 437 { 438 typedef typename 439 add_const
::type>::type type; 440 }; 441 442 // array modifications [4.7.3]. 443 444 /// remove_extent 445 template
446 struct remove_extent 447 { typedef _Tp type; }; 448 449 template
450 struct remove_extent<_Tp[_Size]> 451 { typedef _Tp type; }; 452 453 template
454 struct remove_extent<_Tp[]> 455 { typedef _Tp type; }; 456 457 /// remove_all_extents 458 template
459 struct remove_all_extents 460 { typedef _Tp type; }; 461 462 template
463 struct remove_all_extents<_Tp[_Size]> 464 { typedef typename remove_all_extents<_Tp>::type type; }; 465 466 template
467 struct remove_all_extents<_Tp[]> 468 { typedef typename remove_all_extents<_Tp>::type type; }; 469 470 // pointer modifications [4.7.4]. 471 472 template
473 struct __remove_pointer_helper 474 { typedef _Tp type; }; 475 476 template
477 struct __remove_pointer_helper<_Tp, _Up*> 478 { typedef _Up type; }; 479 480 /// remove_pointer 481 template
482 struct remove_pointer 483 : public __remove_pointer_helper<_Tp, typename remove_cv<_Tp>::type> 484 { }; 485 486 template
487 struct remove_reference; 488 489 /// add_pointer 490 template
491 struct add_pointer 492 { typedef typename remove_reference<_Tp>::type* type; }; 493 494 template
495 struct is_reference 496 : public false_type { }; 497 498 template
499 struct is_reference<_Tp&> 500 : public true_type { }; 501 502 template
503 struct is_pod 504 : public integral_constant
::value> 505 { }; 506 507 template
508 struct has_trivial_constructor 509 : public integral_constant
::value> 510 { }; 511 512 template
513 struct has_trivial_copy 514 : public integral_constant
::value> 515 { }; 516 517 template
518 struct has_trivial_assign 519 : public integral_constant
::value> 520 { }; 521 522 template
523 struct has_trivial_destructor 524 : public integral_constant
::value> 525 { }; 526 527 template
528 struct has_nothrow_constructor 529 : public integral_constant
::value> 530 { }; 531 532 template
533 struct has_nothrow_copy 534 : public integral_constant
::value> 535 { }; 536 537 template
538 struct has_nothrow_assign 539 : public integral_constant
::value> 540 { }; 541 542 template
543 struct __is_signed_helper 544 : public false_type { }; 545 _DEFINE_SPEC(0, __is_signed_helper, signed char, true) 546 _DEFINE_SPEC(0, __is_signed_helper, short, true) 547 _DEFINE_SPEC(0, __is_signed_helper, int, true) 548 _DEFINE_SPEC(0, __is_signed_helper, long, true) 549 _DEFINE_SPEC(0, __is_signed_helper, long long, true) 550 551 template
552 struct is_signed 553 : public integral_constant
::type>::value)> 555 { }; 556 557 template
558 struct __is_unsigned_helper 559 : public false_type { }; 560 _DEFINE_SPEC(0, __is_unsigned_helper, unsigned char, true) 561 _DEFINE_SPEC(0, __is_unsigned_helper, unsigned short, true) 562 _DEFINE_SPEC(0, __is_unsigned_helper, unsigned int, true) 563 _DEFINE_SPEC(0, __is_unsigned_helper, unsigned long, true) 564 _DEFINE_SPEC(0, __is_unsigned_helper, unsigned long long, true) 565 566 template
567 struct is_unsigned 568 : public integral_constant
::type>::value)> 570 { }; 571 572 template
573 struct __is_base_of_helper 574 { 575 typedef typename remove_cv<_Base>::type _NoCv_Base; 576 typedef typename remove_cv<_Derived>::type _NoCv_Derived; 577 static const bool __value = (is_same<_Base, _Derived>::value 578 || (__is_base_of(_Base, _Derived) 579 && !is_same<_NoCv_Base, 580 _NoCv_Derived>::value)); 581 }; 582 583 template
584 struct is_base_of 585 : public integral_constant
::__value> 587 { }; 588 589 template
590 struct __is_convertible_simple 591 : public __sfinae_types 592 { 593 private: 594 static __one __test(_To); 595 static __two __test(...); 596 static _From __makeFrom(); 597 598 public: 599 static const bool __value = sizeof(__test(__makeFrom())) == 1; 600 }; 601 602 template
603 struct add_reference; 604 605 template
606 struct __is_int_or_cref 607 { 608 typedef typename remove_reference<_Tp>::type __rr_Tp; 609 static const bool __value = (is_integral<_Tp>::value 610 || (is_integral<__rr_Tp>::value 611 && is_const<__rr_Tp>::value 612 && !is_volatile<__rr_Tp>::value)); 613 }; 614 615 template
::value || is_void<_To>::value 617 || is_function<_To>::value || is_array<_To>::value 618 // This special case is here only to avoid warnings. 619 || (is_floating_point
::type>::value 621 && __is_int_or_cref<_To>::__value))> 622 struct __is_convertible_helper 623 { 624 // "An imaginary lvalue of type From...". 625 static const bool __value = (__is_convertible_simple
::type, _To>::__value); 627 }; 628 629 template
630 struct __is_convertible_helper<_From, _To, true> 631 { static const bool __value = (is_void<_To>::value 632 || (__is_int_or_cref<_To>::__value 633 && !is_void<_From>::value)); }; 634 635 template
636 struct is_convertible 637 : public integral_constant
::__value> 639 { }; 640 641 // reference modifications [4.7.2]. 642 template
643 struct remove_reference 644 { typedef _Tp type; }; 645 646 template
647 struct remove_reference<_Tp&> 648 { typedef _Tp type; }; 649 650 // NB: Careful with reference to void. 651 template
::value 652 || is_reference<_Tp>::value)> 653 struct __add_reference_helper 654 { typedef _Tp& type; }; 655 656 template
657 struct __add_reference_helper<_Tp, true> 658 { typedef _Tp type; }; 659 660 template
661 struct add_reference 662 : public __add_reference_helper<_Tp> 663 { }; 664 665 // other transformations [4.8]. 666 template
667 struct aligned_storage 668 { 669 union type 670 { 671 unsigned char __data[_Len]; 672 struct __attribute__((__aligned__((_Align)))) { } __align; 673 }; 674 }; 675 676 #undef _DEFINE_SPEC_0_HELPER 677 #undef _DEFINE_SPEC_1_HELPER 678 #undef _DEFINE_SPEC_2_HELPER 679 #undef _DEFINE_SPEC 680 681 /// @} group metaprogramming 682 } 683 684 _GLIBCXX_END_NAMESPACE_VERSION 685 } 686 687 #endif // _GLIBCXX_TR1_TYPE_TRAITS
Contact us
|
About us
|
Term of use
|
Copyright © 2000-2025 MyWebUniversity.com ™