3 // 2007-02-04 Benjamin Kosnik <bkoz@redhat.com>
5 // Copyright (C) 2007-2018 Free Software Foundation, Inc.
7 // This file is part of the GNU ISO C++ Library. This library is free
8 // software; you can redistribute it and/or modify it under the
9 // terms of the GNU General Public License as published by the
10 // Free Software Foundation; either version 3, or (at your option)
13 // This library is distributed in the hope that it will be useful,
14 // but WITHOUT ANY WARRANTY; without even the implied warranty of
15 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 // GNU General Public License for more details.
18 // You should have received a copy of the GNU General Public License
19 // along with this library; see the file COPYING3. If not see
20 // <http://www.gnu.org/licenses/>.
22 #include <tr1/type_traits>
27 // [4.3] helper class:
28 template <class T
, T v
> struct integral_constant
;
29 typedef integral_constant
<bool, true> true_type
;
30 typedef integral_constant
<bool, false> false_type
;
32 // [4.5.1] primary type categories:
33 template <class T
> struct is_void
;
34 template <class T
> struct is_integral
;
35 template <class T
> struct is_floating_point
;
36 template <class T
> struct is_array
;
37 template <class T
> struct is_pointer
;
38 template <class T
> struct is_reference
;
39 template <class T
> struct is_member_object_pointer
;
40 template <class T
> struct is_member_function_pointer
;
41 template <class T
> struct is_enum
;
42 template <class T
> struct is_union
;
43 template <class T
> struct is_class
;
44 template <class T
> struct is_function
;
46 // [4.5.2] composite type categories:
47 template <class T
> struct is_arithmetic
;
48 template <class T
> struct is_fundamental
;
49 template <class T
> struct is_object
;
50 template <class T
> struct is_scalar
;
51 template <class T
> struct is_compound
;
52 template <class T
> struct is_member_pointer
;
54 // [4.5.3] type properties:
55 template <class T
> struct is_const
;
56 template <class T
> struct is_volatile
;
57 template <class T
> struct is_pod
;
58 template <class T
> struct is_empty
;
59 template <class T
> struct is_polymorphic
;
60 template <class T
> struct is_abstract
;
61 template <class T
> struct has_trivial_constructor
;
62 template <class T
> struct has_trivial_copy
;
63 template <class T
> struct has_trivial_assign
;
64 template <class T
> struct has_trivial_destructor
;
65 template <class T
> struct has_nothrow_constructor
;
66 template <class T
> struct has_nothrow_copy
;
67 template <class T
> struct has_nothrow_assign
;
68 template <class T
> struct has_virtual_destructor
;
69 template <class T
> struct is_signed
;
70 template <class T
> struct is_unsigned
;
71 template <class T
> struct alignment_of
;
72 template <class T
> struct rank
;
73 template <class T
, unsigned I
> struct extent
;
75 // [4.6] type relations:
76 template <class T
, class U
> struct is_same
;
77 template <class Base
, class Derived
> struct is_base_of
;
78 template <class From
, class To
> struct is_convertible
;
80 // [4.7.1] const-volatile modifications:
81 template <class T
> struct remove_const
;
82 template <class T
> struct remove_volatile
;
83 template <class T
> struct remove_cv
;
84 template <class T
> struct add_const
;
85 template <class T
> struct add_volatile
;
86 template <class T
> struct add_cv
;
88 // [4.7.2] reference modifications:
89 template <class T
> struct remove_reference
;
90 template <class T
> struct add_reference
;
92 // [4.7.3] array modifications:
93 template <class T
> struct remove_extent
;
94 template <class T
> struct remove_all_extents
;
96 // [4.7.4] pointer modifications:
97 template <class T
> struct remove_pointer
;
98 template <class T
> struct add_pointer
;
100 // [4.8] other transformations:
101 template <std::size_t Len
, std::size_t Align
> struct aligned_storage
;