This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[v3] tr1/type_traits separate forward declarations
- From: Paolo Carlini <pcarlini at suse dot de>
- To: "'gcc-patches at gcc dot gnu dot org'" <gcc-patches at gcc dot gnu dot org>
- Date: Wed, 22 Dec 2004 19:44:46 +0100
- Subject: [v3] tr1/type_traits separate forward declarations
Hi,
in preparation for further work. Tested x86-linux, committed.
Paolo.
////////////////////
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.
diff -prN libstdc++-v3-orig/include/Makefile.am libstdc++-v3/include/Makefile.am
*** libstdc++-v3-orig/include/Makefile.am Sat Dec 4 10:08:38 2004
--- libstdc++-v3/include/Makefile.am Wed Dec 22 16:46:00 2004
*************** tr1_headers = \
*** 232,238 ****
${tr1_srcdir}/functional \
${tr1_srcdir}/tuple \
${tr1_srcdir}/utility \
! ${tr1_srcdir}/type_traits
# This is the common subset of files that all three "C" header models use.
--- 232,239 ----
${tr1_srcdir}/functional \
${tr1_srcdir}/tuple \
${tr1_srcdir}/utility \
! ${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 -prN libstdc++-v3-orig/include/Makefile.in libstdc++-v3/include/Makefile.in
*** libstdc++-v3-orig/include/Makefile.in Sat Dec 4 10:08:38 2004
--- libstdc++-v3/include/Makefile.in Wed Dec 22 16:46:06 2004
*************** tr1_headers = \
*** 449,455 ****
${tr1_srcdir}/functional \
${tr1_srcdir}/tuple \
${tr1_srcdir}/utility \
! ${tr1_srcdir}/type_traits
# This is the common subset of files that all three "C" header models use.
--- 449,456 ----
${tr1_srcdir}/functional \
${tr1_srcdir}/tuple \
${tr1_srcdir}/utility \
! ${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 -prN libstdc++-v3-orig/include/tr1/type_traits libstdc++-v3/include/tr1/type_traits
*** libstdc++-v3-orig/include/tr1/type_traits Thu Dec 16 16:00:36 2004
--- libstdc++-v3/include/tr1/type_traits Wed Dec 22 19:13:17 2004
***************
*** 26,32 ****
#define _TYPE_TRAITS 1
#include <bits/c++config.h>
! #include <cstddef>
// namespace std::tr1
namespace std
--- 26,32 ----
#define _TYPE_TRAITS 1
#include <bits/c++config.h>
! #include <tr1/type_traits_fwd.h>
// namespace std::tr1
namespace std
*************** namespace tr1
*** 120,151 ****
: 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(...);
template<typename _Up>
! static __two
! __test(_Up (*) [1]);
public:
static const bool __value = sizeof(__test<_Tp>(0)) == 1;
--- 120,134 ----
: public true_type { };
template<typename _Tp>
struct __is_function_helper
: public __sfinae_types
{
private:
template<typename>
! static __one __test(...);
template<typename _Up>
! static __two __test(_Up(*)[1]);
public:
static const bool __value = sizeof(__test<_Tp>(0)) == 1;
*************** namespace tr1
*** 179,202 ****
{ };
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
|| is_enum<_Tp>::value
|| is_pointer<_Tp>::value
|| is_member_pointer<_Tp>::value)>
{ };
!
template<typename _Tp>
struct is_compound
: public integral_constant<bool, !is_fundamental<_Tp>::value> { };
!
/// @brief type properties [4.5.3].
template<typename>
struct is_const
--- 162,185 ----
{ };
template<typename _Tp>
struct is_scalar
: public integral_constant<bool, (is_arithmetic<_Tp>::value
|| is_enum<_Tp>::value
|| 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
*************** namespace tr1
*** 214,265 ****
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>
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> { };
--- 197,206 ----
struct is_volatile<_Tp volatile>
: public true_type { };
! template<typename>
struct has_virtual_destructor
: public false_type { };
template<typename>
struct rank
: public integral_constant<std::size_t, 0> { };
*************** namespace tr1
*** 272,278 ****
struct rank<_Tp[]>
: public integral_constant<std::size_t, 1 + rank<_Tp>::value> { };
! template<typename, unsigned = 0>
struct extent
: public integral_constant<std::size_t, 0> { };
--- 213,219 ----
struct rank<_Tp[]>
: public integral_constant<std::size_t, 1 + rank<_Tp>::value> { };
! template<typename, unsigned>
struct extent
: public integral_constant<std::size_t, 0> { };
*************** namespace tr1
*** 299,310 ****
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
--- 240,245 ----
*************** namespace tr1
*** 403,410 ****
{ 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
--- 338,343 ----
diff -prN libstdc++-v3-orig/include/tr1/type_traits_fwd.h libstdc++-v3/include/tr1/type_traits_fwd.h
*** libstdc++-v3-orig/include/tr1/type_traits_fwd.h Thu Jan 1 01:00:00 1970
--- libstdc++-v3/include/tr1/type_traits_fwd.h Wed Dec 22 19:17:50 2004
***************
*** 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