aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaolo Carlini <pcarlini@suse.de>2004-12-22 18:40:52 +0000
committerPaolo Carlini <paolo@gcc.gnu.org>2004-12-22 18:40:52 +0000
commit821c5063f9ccc964cb109adf6ab64f75a2c617b4 (patch)
tree98080df921345c88b76dc42b905072ff682f3799
parentdfb5c52315ecc5b6ebabf2d7cb3d3d69f35a378b (diff)
downloadgcc-821c5063f9ccc964cb109adf6ab64f75a2c617b4.zip
gcc-821c5063f9ccc964cb109adf6ab64f75a2c617b4.tar.gz
gcc-821c5063f9ccc964cb109adf6ab64f75a2c617b4.tar.bz2
type_traits_fwd.h: New, forward declarations.
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. From-SVN: r92493
-rw-r--r--libstdc++-v3/ChangeLog7
-rw-r--r--libstdc++-v3/include/Makefile.am3
-rw-r--r--libstdc++-v3/include/Makefile.in3
-rw-r--r--libstdc++-v3/include/tr1/type_traits95
-rw-r--r--libstdc++-v3/include/tr1/type_traits_fwd.h212
5 files changed, 237 insertions, 83 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index fecd625..f7fcd3d 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 dcfa0e0..ba615fa 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 44723be..87470b2 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 97008a1..3381ccb 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
@@ -120,32 +120,15 @@ namespace tr1
: 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;
@@ -179,24 +162,24 @@ namespace tr1
{ };
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> { };
-
+
+ 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 0000000..46beade
--- /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