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