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
41namespace 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