1169691Skan// TR1 type_traits -*- C++ -*- 2169691Skan 3169691Skan// Copyright (C) 2004, 2005, 2006 Free Software Foundation, Inc. 4169691Skan// 5169691Skan// This file is part of the GNU ISO C++ Library. This library is free 6169691Skan// software; you can redistribute it and/or modify it under the 7169691Skan// terms of the GNU General Public License as published by the 8169691Skan// Free Software Foundation; either version 2, or (at your option) 9169691Skan// any later version. 10169691Skan 11169691Skan// This library is distributed in the hope that it will be useful, 12169691Skan// but WITHOUT ANY WARRANTY; without even the implied warranty of 13169691Skan// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14169691Skan// GNU General Public License for more details. 15169691Skan 16169691Skan// You should have received a copy of the GNU General Public License along 17169691Skan// with this library; see the file COPYING. If not, write to the Free 18169691Skan// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 19169691Skan// USA. 20169691Skan 21169691Skan// As a special exception, you may use this file as part of a free software 22169691Skan// library without restriction. Specifically, if other files instantiate 23169691Skan// templates or use macros or inline functions from this file, or you compile 24169691Skan// this file and link it with other files to produce an executable, this 25169691Skan// file does not by itself cause the resulting executable to be covered by 26169691Skan// the GNU General Public License. This exception does not however 27169691Skan// invalidate any other reasons why the executable file might be covered by 28169691Skan// the GNU General Public License. 29169691Skan 30169691Skan/** @file tr1/type_traits_fwd.h 31169691Skan * This is an internal header file, included by other library headers. 32169691Skan * You should not attempt to use it directly. 33169691Skan */ 34169691Skan 35169691Skan#ifndef _TYPE_TRAITS_FWD_H 36169691Skan#define _TYPE_TRAITS_FWD_H 1 37169691Skan 38169691Skan#include <cstddef> 39169691Skan 40169691Skan// namespace std::tr1 41169691Skannamespace std 42169691Skan{ 43169691Skan_GLIBCXX_BEGIN_NAMESPACE(tr1) 44169691Skan 45169691Skan /// @brief helper classes [4.3]. 46169691Skan template<typename _Tp, _Tp __v> 47169691Skan struct integral_constant; 48169691Skan typedef integral_constant<bool, true> true_type; 49169691Skan typedef integral_constant<bool, false> false_type; 50169691Skan 51169691Skan /// @brief primary type categories [4.5.1]. 52169691Skan template<typename _Tp> 53169691Skan struct is_void; 54169691Skan 55169691Skan template<typename _Tp> 56169691Skan struct is_integral; 57169691Skan 58169691Skan template<typename _Tp> 59169691Skan struct is_floating_point; 60169691Skan 61169691Skan template<typename _Tp> 62169691Skan struct is_array; 63169691Skan 64169691Skan template<typename _Tp> 65169691Skan struct is_pointer; 66169691Skan 67169691Skan template<typename _Tp> 68169691Skan struct is_reference; 69169691Skan 70169691Skan template<typename _Tp> 71169691Skan struct is_member_object_pointer; 72169691Skan 73169691Skan template<typename _Tp> 74169691Skan struct is_member_function_pointer; 75169691Skan 76169691Skan template<typename _Tp> 77169691Skan struct is_enum; 78169691Skan 79169691Skan template<typename _Tp> 80169691Skan struct is_union; 81169691Skan 82169691Skan template<typename _Tp> 83169691Skan struct is_class; 84169691Skan 85169691Skan template<typename _Tp> 86169691Skan struct is_function; 87169691Skan 88169691Skan /// @brief composite type traits [4.5.2]. 89169691Skan template<typename _Tp> 90169691Skan struct is_arithmetic; 91169691Skan 92169691Skan template<typename _Tp> 93169691Skan struct is_fundamental; 94169691Skan 95169691Skan template<typename _Tp> 96169691Skan struct is_object; 97169691Skan 98169691Skan template<typename _Tp> 99169691Skan struct is_scalar; 100169691Skan 101169691Skan template<typename _Tp> 102169691Skan struct is_compound; 103169691Skan 104169691Skan template<typename _Tp> 105169691Skan struct is_member_pointer; 106169691Skan 107169691Skan // Extension. 108169691Skan template<typename _Tp> 109169691Skan struct __is_union_or_class; 110169691Skan 111169691Skan /// @brief type properties [4.5.3]. 112169691Skan template<typename _Tp> 113169691Skan struct is_const; 114169691Skan 115169691Skan template<typename _Tp> 116169691Skan struct is_volatile; 117169691Skan 118169691Skan template<typename _Tp> 119169691Skan struct is_pod; 120169691Skan 121169691Skan template<typename _Tp> 122169691Skan struct is_empty; 123169691Skan 124169691Skan template<typename _Tp> 125169691Skan struct is_polymorphic; 126169691Skan 127169691Skan template<typename _Tp> 128169691Skan struct is_abstract; 129169691Skan 130169691Skan template<typename _Tp> 131169691Skan struct has_trivial_constructor; 132169691Skan 133169691Skan template<typename _Tp> 134169691Skan struct has_trivial_copy; 135169691Skan 136169691Skan template<typename _Tp> 137169691Skan struct has_trivial_assign; 138169691Skan 139169691Skan template<typename _Tp> 140169691Skan struct has_trivial_destructor; 141169691Skan 142169691Skan template<typename _Tp> 143169691Skan struct has_nothrow_constructor; 144169691Skan 145169691Skan template<typename _Tp> 146169691Skan struct has_nothrow_copy; 147169691Skan 148169691Skan template<typename _Tp> 149169691Skan struct has_nothrow_assign; 150169691Skan 151169691Skan template<typename _Tp> 152169691Skan struct has_virtual_destructor; 153169691Skan 154169691Skan template<typename _Tp> 155169691Skan struct is_signed; 156169691Skan 157169691Skan template<typename _Tp> 158169691Skan struct is_unsigned; 159169691Skan 160169691Skan template<typename _Tp> 161169691Skan struct alignment_of; 162169691Skan 163169691Skan template<typename _Tp> 164169691Skan struct rank; 165169691Skan 166169691Skan template<typename _Tp, unsigned _Uint = 0> 167169691Skan struct extent; 168169691Skan 169169691Skan /// @brief relationships between types [4.6]. 170169691Skan template<typename _Tp, typename _Up> 171169691Skan struct is_same; 172169691Skan 173169691Skan template<typename _From, typename _To> 174169691Skan struct is_convertible; 175169691Skan 176169691Skan template<typename _Base, typename _Derived> 177169691Skan struct is_base_of; 178169691Skan 179169691Skan /// @brief const-volatile modifications [4.7.1]. 180169691Skan template<typename _Tp> 181169691Skan struct remove_const; 182169691Skan 183169691Skan template<typename _Tp> 184169691Skan struct remove_volatile; 185169691Skan 186169691Skan template<typename _Tp> 187169691Skan struct remove_cv; 188169691Skan 189169691Skan template<typename _Tp> 190169691Skan struct add_const; 191169691Skan 192169691Skan template<typename _Tp> 193169691Skan struct add_volatile; 194169691Skan 195169691Skan template<typename _Tp> 196169691Skan struct add_cv; 197169691Skan 198169691Skan /// @brief reference modifications [4.7.2]. 199169691Skan template<typename _Tp> 200169691Skan struct remove_reference; 201169691Skan 202169691Skan template<typename _Tp> 203169691Skan struct add_reference; 204169691Skan 205169691Skan /// @brief array modifications [4.7.3]. 206169691Skan template<typename _Tp> 207169691Skan struct remove_extent; 208169691Skan 209169691Skan template<typename _Tp> 210169691Skan struct remove_all_extents; 211169691Skan 212169691Skan /// @brief pointer modifications [4.7.4]. 213169691Skan template<typename _Tp> 214169691Skan struct remove_pointer; 215169691Skan 216169691Skan template<typename _Tp> 217169691Skan struct add_pointer; 218169691Skan 219169691Skan /// @brief other transformations [4.8]. 220169691Skan template<std::size_t _Len, std::size_t _Align> 221169691Skan struct aligned_storage; 222169691Skan 223169691Skan_GLIBCXX_END_NAMESPACE 224169691Skan} 225169691Skan 226169691Skan#endif 227