diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index fecd6252923d60ba6d27fc8b1fa3bc5d4a74cb4f..f7fcd3dddecc21ca74da80df00e99817c99a0ae6 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,10 @@ +2004-12-22 Paolo Carlini <pcarlini@suse.de> + + * include/tr1/type_traits_fwd.h: New, forward declarations. + * include/tr1/type_traits: Clean-up. + * include/Makefile.am: Add. + * include/Makefile.in: Regenerate. + 2004-12-20 Paolo Carlini <pcarlini@suse.de> * testsuite/27_io/basic_istream/peek/wchar_t/1.cc: New. diff --git a/libstdc++-v3/include/Makefile.am b/libstdc++-v3/include/Makefile.am index dcfa0e05f9831ea6a2235222c2cf66934fb55060..ba615fa84aac1cc32f3fd318cf57dd3bcc203374 100644 --- a/libstdc++-v3/include/Makefile.am +++ b/libstdc++-v3/include/Makefile.am @@ -232,7 +232,8 @@ tr1_headers = \ ${tr1_srcdir}/functional \ ${tr1_srcdir}/tuple \ ${tr1_srcdir}/utility \ - ${tr1_srcdir}/type_traits + ${tr1_srcdir}/type_traits \ + ${tr1_srcdir}/type_traits_fwd.h # This is the common subset of files that all three "C" header models use. diff --git a/libstdc++-v3/include/Makefile.in b/libstdc++-v3/include/Makefile.in index 44723bef1d5b77901aee44902989d525b3a3b06f..87470b28e603665cc77fabb0d6d5129643505ba8 100644 --- a/libstdc++-v3/include/Makefile.in +++ b/libstdc++-v3/include/Makefile.in @@ -449,7 +449,8 @@ tr1_headers = \ ${tr1_srcdir}/functional \ ${tr1_srcdir}/tuple \ ${tr1_srcdir}/utility \ - ${tr1_srcdir}/type_traits + ${tr1_srcdir}/type_traits \ + ${tr1_srcdir}/type_traits_fwd.h # This is the common subset of files that all three "C" header models use. diff --git a/libstdc++-v3/include/tr1/type_traits b/libstdc++-v3/include/tr1/type_traits index 97008a131eb716a165b77fd3ad3f096fd2e7da2d..3381ccb57ecf6a7d850c06c486fdf7f6a5ffec2b 100644 --- a/libstdc++-v3/include/tr1/type_traits +++ b/libstdc++-v3/include/tr1/type_traits @@ -26,7 +26,7 @@ #define _TYPE_TRAITS 1 #include <bits/c++config.h> -#include <cstddef> +#include <tr1/type_traits_fwd.h> // namespace std::tr1 namespace std @@ -119,33 +119,16 @@ namespace tr1 struct is_reference<_Tp&> : public true_type { }; - template<typename _Tp> - struct is_member_object_pointer; - - template<typename _Tp> - struct is_member_function_pointer; - - template<typename _Tp> - struct is_enum; - - template<typename _Tp> - struct is_union; - - template<typename _Tp> - struct is_class; - template<typename _Tp> struct __is_function_helper : public __sfinae_types { private: template<typename> - static __one - __test(...); + static __one __test(...); template<typename _Up> - static __two - __test(_Up (*) [1]); + static __two __test(_Up(*)[1]); public: static const bool __value = sizeof(__test<_Tp>(0)) == 1; @@ -178,13 +161,6 @@ namespace tr1 || is_void<_Tp>::value)> { }; - template<typename _Tp> - struct is_member_pointer - : public integral_constant<bool, - (is_member_object_pointer<_Tp>::value - || is_member_function_pointer<_Tp>::value)> - { }; - template<typename _Tp> struct is_scalar : public integral_constant<bool, (is_arithmetic<_Tp>::value @@ -192,11 +168,18 @@ namespace tr1 || is_pointer<_Tp>::value || is_member_pointer<_Tp>::value)> { }; - + template<typename _Tp> struct is_compound : public integral_constant<bool, !is_fundamental<_Tp>::value> { }; - + + template<typename _Tp> + struct is_member_pointer + : public integral_constant<bool, + (is_member_object_pointer<_Tp>::value + || is_member_function_pointer<_Tp>::value)> + { }; + /// @brief type properties [4.5.3]. template<typename> struct is_const @@ -214,52 +197,10 @@ namespace tr1 struct is_volatile<_Tp volatile> : public true_type { }; - template<typename _Tp> - struct is_pod; - - template<typename _Tp> - struct is_empty; - - template<typename _Tp> - struct is_polymorphic; - - template<typename _Tp> - struct is_abstract; - - template<typename _Tp> - struct has_trivial_constructor; - - template<typename _Tp> - struct has_trivial_copy; - - template<typename _Tp> - struct has_trivial_assign; - - template<typename _Tp> - struct has_trivial_destructor; - - template<typename _Tp> - struct has_nothrow_constructor; - - template<typename _Tp> - struct has_nothrow_copy; - - template<typename _Tp> - struct has_nothrow_assign; - - template<typename _Tp> + template<typename> struct has_virtual_destructor : public false_type { }; - template<typename _Tp> - struct is_signed; - - template<typename _Tp> - struct is_unsigned; - - template<typename _Tp> - struct alignment_of; - template<typename> struct rank : public integral_constant<std::size_t, 0> { }; @@ -272,7 +213,7 @@ namespace tr1 struct rank<_Tp[]> : public integral_constant<std::size_t, 1 + rank<_Tp>::value> { }; - template<typename, unsigned = 0> + template<typename, unsigned> struct extent : public integral_constant<std::size_t, 0> { }; @@ -299,12 +240,6 @@ namespace tr1 struct is_same<_Tp, _Tp> : public true_type { }; - template<typename _From, typename _To> - struct is_convertible; - - template<typename _Base, typename _Derived> - struct is_base_of; - /// @brief const-volatile modifications [4.7.1]. template<typename _Tp> struct remove_const @@ -403,8 +338,6 @@ namespace tr1 { typedef typename remove_reference<_Tp>::type* type; }; /// @brief other transformations [4.8]. - template<std::size_t _Len, std::size_t _Align> - struct aligned_storage; #undef _DEFINE_SPEC_HELPER #undef _DEFINE_SPEC diff --git a/libstdc++-v3/include/tr1/type_traits_fwd.h b/libstdc++-v3/include/tr1/type_traits_fwd.h new file mode 100644 index 0000000000000000000000000000000000000000..46beade5819b3f792eb5a1e64910084aa442ae33 --- /dev/null +++ b/libstdc++-v3/include/tr1/type_traits_fwd.h @@ -0,0 +1,212 @@ +// TR1 type_traits -*- C++ -*- + +// Copyright (C) 2004 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 2, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING. If not, write to the Free +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, +// USA. + +/** @file type_traits_fwd.h + * This is an internal header file, included by other library headers. + * You should not attempt to use it directly. + */ + +#ifndef _TYPE_TRAITS_FWD_H +#define _TYPE_TRAITS_FWD_H 1 + +#include <cstddef> + +// namespace std::tr1 +namespace std +{ +namespace tr1 +{ + /// @brief helper classes [4.3]. + template<typename _Tp, _Tp __v> + struct integral_constant; + typedef integral_constant<bool, true> true_type; + typedef integral_constant<bool, false> false_type; + + /// @brief primary type categories [4.5.1]. + template<typename _Tp> + struct is_void; + + template<typename _Tp> + struct is_integral; + + template<typename _Tp> + struct is_floating_point; + + template<typename _Tp> + struct is_array; + + template<typename _Tp> + struct is_pointer; + + template<typename _Tp> + struct is_reference; + + template<typename _Tp> + struct is_member_object_pointer; + + template<typename _Tp> + struct is_member_function_pointer; + + template<typename _Tp> + struct is_enum; + + template<typename _Tp> + struct is_union; + + template<typename _Tp> + struct is_class; + + template<typename _Tp> + struct is_function; + + /// @brief composite type traits [4.5.2]. + template<typename _Tp> + struct is_arithmetic; + + template<typename _Tp> + struct is_fundamental; + + template<typename _Tp> + struct is_object; + + template<typename _Tp> + struct is_scalar; + + template<typename _Tp> + struct is_compound; + + template<typename _Tp> + struct is_member_pointer; + + /// @brief type properties [4.5.3]. + template<typename _Tp> + struct is_const; + + template<typename _Tp> + struct is_volatile; + + template<typename _Tp> + struct is_pod; + + template<typename _Tp> + struct is_empty; + + template<typename _Tp> + struct is_polymorphic; + + template<typename _Tp> + struct is_abstract; + + template<typename _Tp> + struct has_trivial_constructor; + + template<typename _Tp> + struct has_trivial_copy; + + template<typename _Tp> + struct has_trivial_assign; + + template<typename _Tp> + struct has_trivial_destructor; + + template<typename _Tp> + struct has_nothrow_constructor; + + template<typename _Tp> + struct has_nothrow_copy; + + template<typename _Tp> + struct has_nothrow_assign; + + template<typename _Tp> + struct has_virtual_destructor; + + template<typename _Tp> + struct is_signed; + + template<typename _Tp> + struct is_unsigned; + + template<typename _Tp> + struct alignment_of; + + template<typename _Tp> + struct rank; + + template<typename _Tp, unsigned _Uint = 0> + struct extent; + + /// @brief relationships between types [4.6]. + template<typename _Tp, typename _Up> + struct is_same; + + template<typename _From, typename _To> + struct is_convertible; + + template<typename _Base, typename _Derived> + struct is_base_of; + + /// @brief const-volatile modifications [4.7.1]. + template<typename _Tp> + struct remove_const; + + template<typename _Tp> + struct remove_volatile; + + template<typename _Tp> + struct remove_cv; + + template<typename _Tp> + struct add_const; + + template<typename _Tp> + struct add_volatile; + + template<typename _Tp> + struct add_cv; + + /// @brief reference modifications [4.7.2]. + template<typename _Tp> + struct remove_reference; + + template<typename _Tp> + struct add_reference; + + /// @brief array modififications [4.7.3]. + template<typename _Tp> + struct remove_extent; + + template<typename _Tp> + struct remove_all_extents; + + /// @brief pointer modifications [4.7.4]. + template<typename _Tp> + struct remove_pointer; + + template<typename _Tp> + struct add_pointer; + + /// @brief other transformations [4.8]. + template<std::size_t _Len, std::size_t _Align> + struct aligned_storage; +} +} + +#endif