1 // TR1 type_traits -*- C++ -*-
2 
3 // Copyright (C) 2004, 2005, 2006 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 2, 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 // You should have received a copy of the GNU General Public License along
17 // with this library; see the file COPYING.  If not, write to the Free
18 // Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
19 // USA.
20 
21 // As a special exception, you may use this file as part of a free software
22 // library without restriction.  Specifically, if other files instantiate
23 // templates or use macros or inline functions from this file, or you compile
24 // this file and link it with other files to produce an executable, this
25 // file does not by itself cause the resulting executable to be covered by
26 // the GNU General Public License.  This exception does not however
27 // invalidate any other reasons why the executable file might be covered by
28 // the GNU General Public License.
29 
30 /** @file tr1/type_traits_fwd.h
31  *  This is an internal header file, included by other library headers.
32  *  You should not attempt to use it directly.
33  */
34 
35 #ifndef _TYPE_TRAITS_FWD_H
36 #define _TYPE_TRAITS_FWD_H 1
37 
38 #include <cstddef>
39 
40 // namespace std::tr1
41 namespace std
42 {
43 _GLIBCXX_BEGIN_NAMESPACE(tr1)
44 
45   /// @brief  helper classes [4.3].
46   template<typename _Tp, _Tp __v>
47     struct integral_constant;
48   typedef integral_constant<bool, true>     true_type;
49   typedef integral_constant<bool, false>    false_type;
50 
51   /// @brief  primary type categories [4.5.1].
52   template<typename _Tp>
53     struct is_void;
54 
55   template<typename _Tp>
56     struct is_integral;
57 
58   template<typename _Tp>
59     struct is_floating_point;
60 
61   template<typename _Tp>
62     struct is_array;
63 
64   template<typename _Tp>
65     struct is_pointer;
66 
67   template<typename _Tp>
68     struct is_reference;
69 
70   template<typename _Tp>
71     struct is_member_object_pointer;
72 
73   template<typename _Tp>
74     struct is_member_function_pointer;
75 
76   template<typename _Tp>
77     struct is_enum;
78 
79   template<typename _Tp>
80     struct is_union;
81 
82   template<typename _Tp>
83     struct is_class;
84 
85   template<typename _Tp>
86     struct is_function;
87 
88   /// @brief  composite type traits [4.5.2].
89   template<typename _Tp>
90     struct is_arithmetic;
91 
92   template<typename _Tp>
93     struct is_fundamental;
94 
95   template<typename _Tp>
96     struct is_object;
97 
98   template<typename _Tp>
99     struct is_scalar;
100 
101   template<typename _Tp>
102     struct is_compound;
103 
104   template<typename _Tp>
105     struct is_member_pointer;
106 
107   // Extension.
108   template<typename _Tp>
109     struct __is_union_or_class;
110 
111   /// @brief  type properties [4.5.3].
112   template<typename _Tp>
113     struct is_const;
114 
115   template<typename _Tp>
116     struct is_volatile;
117 
118   template<typename _Tp>
119     struct is_pod;
120 
121   template<typename _Tp>
122     struct is_empty;
123 
124   template<typename _Tp>
125     struct is_polymorphic;
126 
127   template<typename _Tp>
128     struct is_abstract;
129 
130   template<typename _Tp>
131     struct has_trivial_constructor;
132 
133   template<typename _Tp>
134     struct has_trivial_copy;
135 
136   template<typename _Tp>
137     struct has_trivial_assign;
138 
139   template<typename _Tp>
140     struct has_trivial_destructor;
141 
142   template<typename _Tp>
143     struct has_nothrow_constructor;
144 
145   template<typename _Tp>
146     struct has_nothrow_copy;
147 
148   template<typename _Tp>
149     struct has_nothrow_assign;
150 
151   template<typename _Tp>
152     struct has_virtual_destructor;
153 
154   template<typename _Tp>
155     struct is_signed;
156 
157   template<typename _Tp>
158     struct is_unsigned;
159 
160   template<typename _Tp>
161     struct alignment_of;
162 
163   template<typename _Tp>
164     struct rank;
165 
166   template<typename _Tp, unsigned _Uint = 0>
167     struct extent;
168 
169   /// @brief  relationships between types [4.6].
170   template<typename _Tp, typename _Up>
171     struct is_same;
172 
173   template<typename _From, typename _To>
174     struct is_convertible;
175 
176   template<typename _Base, typename _Derived>
177     struct is_base_of;
178 
179   /// @brief  const-volatile modifications [4.7.1].
180   template<typename _Tp>
181     struct remove_const;
182 
183   template<typename _Tp>
184     struct remove_volatile;
185 
186   template<typename _Tp>
187     struct remove_cv;
188 
189   template<typename _Tp>
190     struct add_const;
191 
192   template<typename _Tp>
193     struct add_volatile;
194 
195   template<typename _Tp>
196     struct add_cv;
197 
198   /// @brief  reference modifications [4.7.2].
199   template<typename _Tp>
200     struct remove_reference;
201 
202   template<typename _Tp>
203     struct add_reference;
204 
205   /// @brief  array modifications [4.7.3].
206   template<typename _Tp>
207     struct remove_extent;
208 
209   template<typename _Tp>
210     struct remove_all_extents;
211 
212   /// @brief  pointer modifications [4.7.4].
213   template<typename _Tp>
214     struct remove_pointer;
215 
216   template<typename _Tp>
217     struct add_pointer;
218 
219   /// @brief  other transformations [4.8].
220   template<std::size_t _Len, std::size_t _Align>
221     struct aligned_storage;
222 
223 _GLIBCXX_END_NAMESPACE
224 }
225 
226 #endif
227