00001 // TR1 type_traits -*- C++ -*- 00002 00003 // Copyright (C) 2004, 2005, 2006 Free Software Foundation, Inc. 00004 // 00005 // This file is part of the GNU ISO C++ Library. This library is free 00006 // software; you can redistribute it and/or modify it under the 00007 // terms of the GNU General Public License as published by the 00008 // Free Software Foundation; either version 2, or (at your option) 00009 // any later version. 00010 00011 // This library is distributed in the hope that it will be useful, 00012 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00013 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00014 // GNU General Public License for more details. 00015 00016 // You should have received a copy of the GNU General Public License along 00017 // with this library; see the file COPYING. If not, write to the Free 00018 // Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 00019 // USA. 00020 00021 // As a special exception, you may use this file as part of a free software 00022 // library without restriction. Specifically, if other files instantiate 00023 // templates or use macros or inline functions from this file, or you compile 00024 // this file and link it with other files to produce an executable, this 00025 // file does not by itself cause the resulting executable to be covered by 00026 // the GNU General Public License. This exception does not however 00027 // invalidate any other reasons why the executable file might be covered by 00028 // the GNU General Public License. 00029 00030 /** @file tr1/type_traits_fwd.h 00031 * This is an internal header file, included by other library headers. 00032 * You should not attempt to use it directly. 00033 */ 00034 00035 #ifndef _TYPE_TRAITS_FWD_H 00036 #define _TYPE_TRAITS_FWD_H 1 00037 00038 #include <cstddef> 00039 00040 // namespace std::tr1 00041 namespace std 00042 { 00043 _GLIBCXX_BEGIN_NAMESPACE(tr1) 00044 00045 /// @brief helper classes [4.3]. 00046 template<typename _Tp, _Tp __v> 00047 struct integral_constant; 00048 typedef integral_constant<bool, true> true_type; 00049 typedef integral_constant<bool, false> false_type; 00050 00051 /// @brief primary type categories [4.5.1]. 00052 template<typename _Tp> 00053 struct is_void; 00054 00055 template<typename _Tp> 00056 struct is_integral; 00057 00058 template<typename _Tp> 00059 struct is_floating_point; 00060 00061 template<typename _Tp> 00062 struct is_array; 00063 00064 template<typename _Tp> 00065 struct is_pointer; 00066 00067 template<typename _Tp> 00068 struct is_reference; 00069 00070 template<typename _Tp> 00071 struct is_member_object_pointer; 00072 00073 template<typename _Tp> 00074 struct is_member_function_pointer; 00075 00076 template<typename _Tp> 00077 struct is_enum; 00078 00079 template<typename _Tp> 00080 struct is_union; 00081 00082 template<typename _Tp> 00083 struct is_class; 00084 00085 template<typename _Tp> 00086 struct is_function; 00087 00088 /// @brief composite type traits [4.5.2]. 00089 template<typename _Tp> 00090 struct is_arithmetic; 00091 00092 template<typename _Tp> 00093 struct is_fundamental; 00094 00095 template<typename _Tp> 00096 struct is_object; 00097 00098 template<typename _Tp> 00099 struct is_scalar; 00100 00101 template<typename _Tp> 00102 struct is_compound; 00103 00104 template<typename _Tp> 00105 struct is_member_pointer; 00106 00107 // Extension. 00108 template<typename _Tp> 00109 struct __is_union_or_class; 00110 00111 /// @brief type properties [4.5.3]. 00112 template<typename _Tp> 00113 struct is_const; 00114 00115 template<typename _Tp> 00116 struct is_volatile; 00117 00118 template<typename _Tp> 00119 struct is_pod; 00120 00121 template<typename _Tp> 00122 struct is_empty; 00123 00124 template<typename _Tp> 00125 struct is_polymorphic; 00126 00127 template<typename _Tp> 00128 struct is_abstract; 00129 00130 template<typename _Tp> 00131 struct has_trivial_constructor; 00132 00133 template<typename _Tp> 00134 struct has_trivial_copy; 00135 00136 template<typename _Tp> 00137 struct has_trivial_assign; 00138 00139 template<typename _Tp> 00140 struct has_trivial_destructor; 00141 00142 template<typename _Tp> 00143 struct has_nothrow_constructor; 00144 00145 template<typename _Tp> 00146 struct has_nothrow_copy; 00147 00148 template<typename _Tp> 00149 struct has_nothrow_assign; 00150 00151 template<typename _Tp> 00152 struct has_virtual_destructor; 00153 00154 template<typename _Tp> 00155 struct is_signed; 00156 00157 template<typename _Tp> 00158 struct is_unsigned; 00159 00160 template<typename _Tp> 00161 struct alignment_of; 00162 00163 template<typename _Tp> 00164 struct rank; 00165 00166 template<typename _Tp, unsigned _Uint = 0> 00167 struct extent; 00168 00169 /// @brief relationships between types [4.6]. 00170 template<typename _Tp, typename _Up> 00171 struct is_same; 00172 00173 template<typename _From, typename _To> 00174 struct is_convertible; 00175 00176 template<typename _Base, typename _Derived> 00177 struct is_base_of; 00178 00179 /// @brief const-volatile modifications [4.7.1]. 00180 template<typename _Tp> 00181 struct remove_const; 00182 00183 template<typename _Tp> 00184 struct remove_volatile; 00185 00186 template<typename _Tp> 00187 struct remove_cv; 00188 00189 template<typename _Tp> 00190 struct add_const; 00191 00192 template<typename _Tp> 00193 struct add_volatile; 00194 00195 template<typename _Tp> 00196 struct add_cv; 00197 00198 /// @brief reference modifications [4.7.2]. 00199 template<typename _Tp> 00200 struct remove_reference; 00201 00202 template<typename _Tp> 00203 struct add_reference; 00204 00205 /// @brief array modifications [4.7.3]. 00206 template<typename _Tp> 00207 struct remove_extent; 00208 00209 template<typename _Tp> 00210 struct remove_all_extents; 00211 00212 /// @brief pointer modifications [4.7.4]. 00213 template<typename _Tp> 00214 struct remove_pointer; 00215 00216 template<typename _Tp> 00217 struct add_pointer; 00218 00219 /// @brief other transformations [4.8]. 00220 template<std::size_t _Len, std::size_t _Align> 00221 struct aligned_storage; 00222 00223 _GLIBCXX_END_NAMESPACE 00224 } 00225 00226 #endif