OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [tags/] [gnu-src/] [gcc-4.5.1/] [gcc-4.5.1-or32-1.0rc4/] [libstdc++-v3/] [include/] [tr1_impl/] [type_traits] - Diff between revs 424 and 519

Only display areas with differences | Details | Blame | View Log

Rev 424 Rev 519
// TR1 type_traits -*- C++ -*-
// TR1 type_traits -*- C++ -*-
// Copyright (C) 2007, 2008, 2009 Free Software Foundation, Inc.
// Copyright (C) 2007, 2008, 2009 Free Software Foundation, Inc.
//
//
// This file is part of the GNU ISO C++ Library.  This library is free
// 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
// software; you can redistribute it and/or modify it under the
// terms of the GNU General Public License as published by the
// terms of the GNU General Public License as published by the
// Free Software Foundation; either version 3, or (at your option)
// Free Software Foundation; either version 3, or (at your option)
// any later version.
// any later version.
// This library is distributed in the hope that it will be useful,
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
// GNU General Public License for more details.
// Under Section 7 of GPL version 3, you are granted additional
// Under Section 7 of GPL version 3, you are granted additional
// permissions described in the GCC Runtime Library Exception, version
// permissions described in the GCC Runtime Library Exception, version
// 3.1, as published by the Free Software Foundation.
// 3.1, as published by the Free Software Foundation.
// You should have received a copy of the GNU General Public License and
// You should have received a copy of the GNU General Public License and
// a copy of the GCC Runtime Library Exception along with this program;
// a copy of the GCC Runtime Library Exception along with this program;
// see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
// see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
// .
// .
/** @file tr1_impl/type_traits
/** @file tr1_impl/type_traits
*  This is an internal header file, included by other library headers.
*  This is an internal header file, included by other library headers.
*  You should not attempt to use it directly.
*  You should not attempt to use it directly.
*/
*/
namespace std
namespace std
{
{
_GLIBCXX_BEGIN_NAMESPACE_TR1
_GLIBCXX_BEGIN_NAMESPACE_TR1
  /**
  /**
   * @defgroup metaprogramming Type Traits
   * @defgroup metaprogramming Type Traits
   * @ingroup utilities
   * @ingroup utilities
   *
   *
   * Compile time type transformation and information.
   * Compile time type transformation and information.
   * @{
   * @{
   */
   */
  // For use in __is_convertible_simple.
  // For use in __is_convertible_simple.
  struct __sfinae_types
  struct __sfinae_types
  {
  {
    typedef char __one;
    typedef char __one;
    typedef struct { char __arr[2]; } __two;
    typedef struct { char __arr[2]; } __two;
  };
  };
#define _DEFINE_SPEC_0_HELPER                          \
#define _DEFINE_SPEC_0_HELPER                          \
  template<>
  template<>
#define _DEFINE_SPEC_1_HELPER                          \
#define _DEFINE_SPEC_1_HELPER                          \
  template
  template
#define _DEFINE_SPEC_2_HELPER                          \
#define _DEFINE_SPEC_2_HELPER                          \
  template
  template
#define _DEFINE_SPEC(_Order, _Trait, _Type, _Value)    \
#define _DEFINE_SPEC(_Order, _Trait, _Type, _Value)    \
  _DEFINE_SPEC_##_Order##_HELPER                       \
  _DEFINE_SPEC_##_Order##_HELPER                       \
    struct _Trait<_Type>                               \
    struct _Trait<_Type>                               \
    : public integral_constant { };
    : public integral_constant { };
  // helper classes [4.3].
  // helper classes [4.3].
  /// integral_constant
  /// integral_constant
  template
  template
    struct integral_constant
    struct integral_constant
    {
    {
      static const _Tp                      value = __v;
      static const _Tp                      value = __v;
      typedef _Tp                           value_type;
      typedef _Tp                           value_type;
      typedef integral_constant<_Tp, __v>   type;
      typedef integral_constant<_Tp, __v>   type;
    };
    };
  /// typedef for true_type
  /// typedef for true_type
  typedef integral_constant     true_type;
  typedef integral_constant     true_type;
  /// typedef for false_type
  /// typedef for false_type
  typedef integral_constant    false_type;
  typedef integral_constant    false_type;
  template
  template
    const _Tp integral_constant<_Tp, __v>::value;
    const _Tp integral_constant<_Tp, __v>::value;
  /// remove_cv
  /// remove_cv
  template
  template
    struct remove_cv;
    struct remove_cv;
  template
  template
    struct __is_void_helper
    struct __is_void_helper
    : public false_type { };
    : public false_type { };
  _DEFINE_SPEC(0, __is_void_helper, void, true)
  _DEFINE_SPEC(0, __is_void_helper, void, true)
  // primary type categories [4.5.1].
  // primary type categories [4.5.1].
  /// is_void
  /// is_void
  template
  template
    struct is_void
    struct is_void
    : public integral_constant
    : public integral_constant
                                      remove_cv<_Tp>::type>::value)>
                                      remove_cv<_Tp>::type>::value)>
    { };
    { };
  template
  template
    struct __is_integral_helper
    struct __is_integral_helper
    : public false_type { };
    : public false_type { };
  _DEFINE_SPEC(0, __is_integral_helper, bool, true)
  _DEFINE_SPEC(0, __is_integral_helper, bool, true)
  _DEFINE_SPEC(0, __is_integral_helper, char, true)
  _DEFINE_SPEC(0, __is_integral_helper, char, true)
  _DEFINE_SPEC(0, __is_integral_helper, signed char, true)
  _DEFINE_SPEC(0, __is_integral_helper, signed char, true)
  _DEFINE_SPEC(0, __is_integral_helper, unsigned char, true)
  _DEFINE_SPEC(0, __is_integral_helper, unsigned char, true)
#ifdef _GLIBCXX_USE_WCHAR_T
#ifdef _GLIBCXX_USE_WCHAR_T
  _DEFINE_SPEC(0, __is_integral_helper, wchar_t, true)
  _DEFINE_SPEC(0, __is_integral_helper, wchar_t, true)
#endif
#endif
#ifdef _GLIBCXX_INCLUDE_AS_CXX0X
#ifdef _GLIBCXX_INCLUDE_AS_CXX0X
  _DEFINE_SPEC(0, __is_integral_helper, char16_t, true)
  _DEFINE_SPEC(0, __is_integral_helper, char16_t, true)
  _DEFINE_SPEC(0, __is_integral_helper, char32_t, true)
  _DEFINE_SPEC(0, __is_integral_helper, char32_t, true)
#endif
#endif
  _DEFINE_SPEC(0, __is_integral_helper, short, true)
  _DEFINE_SPEC(0, __is_integral_helper, short, true)
  _DEFINE_SPEC(0, __is_integral_helper, unsigned short, true)
  _DEFINE_SPEC(0, __is_integral_helper, unsigned short, true)
  _DEFINE_SPEC(0, __is_integral_helper, int, true)
  _DEFINE_SPEC(0, __is_integral_helper, int, true)
  _DEFINE_SPEC(0, __is_integral_helper, unsigned int, true)
  _DEFINE_SPEC(0, __is_integral_helper, unsigned int, true)
  _DEFINE_SPEC(0, __is_integral_helper, long, true)
  _DEFINE_SPEC(0, __is_integral_helper, long, true)
  _DEFINE_SPEC(0, __is_integral_helper, unsigned long, true)
  _DEFINE_SPEC(0, __is_integral_helper, unsigned long, true)
  _DEFINE_SPEC(0, __is_integral_helper, long long, true)
  _DEFINE_SPEC(0, __is_integral_helper, long long, true)
  _DEFINE_SPEC(0, __is_integral_helper, unsigned long long, true)
  _DEFINE_SPEC(0, __is_integral_helper, unsigned long long, true)
  /// is_integral
  /// is_integral
  template
  template
    struct is_integral
    struct is_integral
    : public integral_constant
    : public integral_constant
                                      remove_cv<_Tp>::type>::value)>
                                      remove_cv<_Tp>::type>::value)>
    { };
    { };
  template
  template
    struct __is_floating_point_helper
    struct __is_floating_point_helper
    : public false_type { };
    : public false_type { };
  _DEFINE_SPEC(0, __is_floating_point_helper, float, true)
  _DEFINE_SPEC(0, __is_floating_point_helper, float, true)
  _DEFINE_SPEC(0, __is_floating_point_helper, double, true)
  _DEFINE_SPEC(0, __is_floating_point_helper, double, true)
  _DEFINE_SPEC(0, __is_floating_point_helper, long double, true)
  _DEFINE_SPEC(0, __is_floating_point_helper, long double, true)
  /// is_floating_point
  /// is_floating_point
  template
  template
    struct is_floating_point
    struct is_floating_point
    : public integral_constant
    : public integral_constant
                                      remove_cv<_Tp>::type>::value)>
                                      remove_cv<_Tp>::type>::value)>
    { };
    { };
  /// is_array
  /// is_array
  template
  template
    struct is_array
    struct is_array
    : public false_type { };
    : public false_type { };
  template
  template
    struct is_array<_Tp[_Size]>
    struct is_array<_Tp[_Size]>
    : public true_type { };
    : public true_type { };
  template
  template
    struct is_array<_Tp[]>
    struct is_array<_Tp[]>
    : public true_type { };
    : public true_type { };
  template
  template
    struct __is_pointer_helper
    struct __is_pointer_helper
    : public false_type { };
    : public false_type { };
  _DEFINE_SPEC(1, __is_pointer_helper, _Tp*, true)
  _DEFINE_SPEC(1, __is_pointer_helper, _Tp*, true)
  /// is_pointer
  /// is_pointer
  template
  template
    struct is_pointer
    struct is_pointer
    : public integral_constant
    : public integral_constant
                                      remove_cv<_Tp>::type>::value)>
                                      remove_cv<_Tp>::type>::value)>
    { };
    { };
  /// is_reference
  /// is_reference
  template
  template
    struct is_reference;
    struct is_reference;
  /// is_function
  /// is_function
  template
  template
    struct is_function;
    struct is_function;
  template
  template
    struct __is_member_object_pointer_helper
    struct __is_member_object_pointer_helper
    : public false_type { };
    : public false_type { };
  _DEFINE_SPEC(2, __is_member_object_pointer_helper, _Tp _Cp::*,
  _DEFINE_SPEC(2, __is_member_object_pointer_helper, _Tp _Cp::*,
               !is_function<_Tp>::value)
               !is_function<_Tp>::value)
  /// is_member_object_pointer
  /// is_member_object_pointer
  template
  template
    struct is_member_object_pointer
    struct is_member_object_pointer
    : public integral_constant
    : public integral_constant
                                      typename remove_cv<_Tp>::type>::value)>
                                      typename remove_cv<_Tp>::type>::value)>
    { };
    { };
  template
  template
    struct __is_member_function_pointer_helper
    struct __is_member_function_pointer_helper
    : public false_type { };
    : public false_type { };
  _DEFINE_SPEC(2, __is_member_function_pointer_helper, _Tp _Cp::*,
  _DEFINE_SPEC(2, __is_member_function_pointer_helper, _Tp _Cp::*,
               is_function<_Tp>::value)
               is_function<_Tp>::value)
  /// is_member_function_pointer
  /// is_member_function_pointer
  template
  template
    struct is_member_function_pointer
    struct is_member_function_pointer
    : public integral_constant
    : public integral_constant
                                      typename remove_cv<_Tp>::type>::value)>
                                      typename remove_cv<_Tp>::type>::value)>
    { };
    { };
  /// is_enum
  /// is_enum
  template
  template
    struct is_enum
    struct is_enum
    : public integral_constant
    : public integral_constant
    { };
    { };
  /// is_union
  /// is_union
  template
  template
    struct is_union
    struct is_union
    : public integral_constant
    : public integral_constant
    { };
    { };
  /// is_class
  /// is_class
  template
  template
    struct is_class
    struct is_class
    : public integral_constant
    : public integral_constant
    { };
    { };
  /// is_function
  /// is_function
  template
  template
    struct is_function
    struct is_function
    : public false_type { };
    : public false_type { };
  template
  template
    struct is_function<_Res(_ArgTypes...)>
    struct is_function<_Res(_ArgTypes...)>
    : public true_type { };
    : public true_type { };
  template
  template
    struct is_function<_Res(_ArgTypes......)>
    struct is_function<_Res(_ArgTypes......)>
    : public true_type { };
    : public true_type { };
  template
  template
    struct is_function<_Res(_ArgTypes...) const>
    struct is_function<_Res(_ArgTypes...) const>
    : public true_type { };
    : public true_type { };
  template
  template
    struct is_function<_Res(_ArgTypes......) const>
    struct is_function<_Res(_ArgTypes......) const>
    : public true_type { };
    : public true_type { };
  template
  template
    struct is_function<_Res(_ArgTypes...) volatile>
    struct is_function<_Res(_ArgTypes...) volatile>
    : public true_type { };
    : public true_type { };
  template
  template
    struct is_function<_Res(_ArgTypes......) volatile>
    struct is_function<_Res(_ArgTypes......) volatile>
    : public true_type { };
    : public true_type { };
  template
  template
    struct is_function<_Res(_ArgTypes...) const volatile>
    struct is_function<_Res(_ArgTypes...) const volatile>
    : public true_type { };
    : public true_type { };
  template
  template
    struct is_function<_Res(_ArgTypes......) const volatile>
    struct is_function<_Res(_ArgTypes......) const volatile>
    : public true_type { };
    : public true_type { };
  // composite type traits [4.5.2].
  // composite type traits [4.5.2].
  /// is_arithmetic
  /// is_arithmetic
  template
  template
    struct is_arithmetic
    struct is_arithmetic
    : public integral_constant::value
    : public integral_constant::value
                                      || is_floating_point<_Tp>::value)>
                                      || is_floating_point<_Tp>::value)>
    { };
    { };
  /// is_fundamental
  /// is_fundamental
  template
  template
    struct is_fundamental
    struct is_fundamental
    : public integral_constant::value
    : public integral_constant::value
                                      || is_void<_Tp>::value)>
                                      || is_void<_Tp>::value)>
    { };
    { };
  /// is_object
  /// is_object
  template
  template
    struct is_object
    struct is_object
    : public integral_constant::value
    : public integral_constant::value
                                       || is_reference<_Tp>::value
                                       || is_reference<_Tp>::value
                                       || is_void<_Tp>::value)>
                                       || is_void<_Tp>::value)>
    { };
    { };
  /// is_member_pointer
  /// is_member_pointer
  template
  template
    struct is_member_pointer;
    struct is_member_pointer;
  /// is_scalar
  /// is_scalar
  template
  template
    struct is_scalar
    struct is_scalar
    : public integral_constant::value
    : public integral_constant::value
                                      || is_enum<_Tp>::value
                                      || is_enum<_Tp>::value
                                      || is_pointer<_Tp>::value
                                      || is_pointer<_Tp>::value
                                      || is_member_pointer<_Tp>::value)>
                                      || is_member_pointer<_Tp>::value)>
    { };
    { };
  /// is_compound
  /// is_compound
  template
  template
    struct is_compound
    struct is_compound
    : public integral_constant::value> { };
    : public integral_constant::value> { };
  /// is_member_pointer
  /// is_member_pointer
  template
  template
    struct __is_member_pointer_helper
    struct __is_member_pointer_helper
    : public false_type { };
    : public false_type { };
  _DEFINE_SPEC(2, __is_member_pointer_helper, _Tp _Cp::*, true)
  _DEFINE_SPEC(2, __is_member_pointer_helper, _Tp _Cp::*, true)
  template
  template
  struct is_member_pointer
  struct is_member_pointer
    : public integral_constant
    : public integral_constant
                                      typename remove_cv<_Tp>::type>::value)>
                                      typename remove_cv<_Tp>::type>::value)>
    { };
    { };
  // type properties [4.5.3].
  // type properties [4.5.3].
  /// is_const
  /// is_const
  template
  template
    struct is_const
    struct is_const
    : public false_type { };
    : public false_type { };
  template
  template
    struct is_const<_Tp const>
    struct is_const<_Tp const>
    : public true_type { };
    : public true_type { };
  /// is_volatile
  /// is_volatile
  template
  template
    struct is_volatile
    struct is_volatile
    : public false_type { };
    : public false_type { };
  template
  template
    struct is_volatile<_Tp volatile>
    struct is_volatile<_Tp volatile>
    : public true_type { };
    : public true_type { };
  /// is_empty
  /// is_empty
  template
  template
    struct is_empty
    struct is_empty
    : public integral_constant
    : public integral_constant
    { };
    { };
  /// is_polymorphic
  /// is_polymorphic
  template
  template
    struct is_polymorphic
    struct is_polymorphic
    : public integral_constant
    : public integral_constant
    { };
    { };
  /// is_abstract
  /// is_abstract
  template
  template
    struct is_abstract
    struct is_abstract
    : public integral_constant
    : public integral_constant
    { };
    { };
  /// has_virtual_destructor
  /// has_virtual_destructor
  template
  template
    struct has_virtual_destructor
    struct has_virtual_destructor
    : public integral_constant
    : public integral_constant
    { };
    { };
  /// alignment_of
  /// alignment_of
  template
  template
    struct alignment_of
    struct alignment_of
    : public integral_constant { };
    : public integral_constant { };
  /// rank
  /// rank
  template
  template
    struct rank
    struct rank
    : public integral_constant { };
    : public integral_constant { };
  template
  template
    struct rank<_Tp[_Size]>
    struct rank<_Tp[_Size]>
    : public integral_constant::value> { };
    : public integral_constant::value> { };
  template
  template
    struct rank<_Tp[]>
    struct rank<_Tp[]>
    : public integral_constant::value> { };
    : public integral_constant::value> { };
  /// extent
  /// extent
  template
  template
    struct extent
    struct extent
    : public integral_constant { };
    : public integral_constant { };
  template
  template
    struct extent<_Tp[_Size], _Uint>
    struct extent<_Tp[_Size], _Uint>
    : public integral_constant
    : public integral_constant
                               _Uint == 0 ? _Size : extent<_Tp,
                               _Uint == 0 ? _Size : extent<_Tp,
                                                           _Uint - 1>::value>
                                                           _Uint - 1>::value>
    { };
    { };
  template
  template
    struct extent<_Tp[], _Uint>
    struct extent<_Tp[], _Uint>
    : public integral_constant
    : public integral_constant
                               _Uint == 0 ? 0 : extent<_Tp,
                               _Uint == 0 ? 0 : extent<_Tp,
                                                       _Uint - 1>::value>
                                                       _Uint - 1>::value>
    { };
    { };
  // relationships between types [4.6].
  // relationships between types [4.6].
  /// is_same
  /// is_same
  template
  template
    struct is_same
    struct is_same
    : public false_type { };
    : public false_type { };
  template
  template
    struct is_same<_Tp, _Tp>
    struct is_same<_Tp, _Tp>
    : public true_type { };
    : public true_type { };
  // const-volatile modifications [4.7.1].
  // const-volatile modifications [4.7.1].
  /// remove_const
  /// remove_const
  template
  template
    struct remove_const
    struct remove_const
    { typedef _Tp     type; };
    { typedef _Tp     type; };
  template
  template
    struct remove_const<_Tp const>
    struct remove_const<_Tp const>
    { typedef _Tp     type; };
    { typedef _Tp     type; };
  /// remove_volatile
  /// remove_volatile
  template
  template
    struct remove_volatile
    struct remove_volatile
    { typedef _Tp     type; };
    { typedef _Tp     type; };
  template
  template
    struct remove_volatile<_Tp volatile>
    struct remove_volatile<_Tp volatile>
    { typedef _Tp     type; };
    { typedef _Tp     type; };
  /// remove_cv
  /// remove_cv
  template
  template
    struct remove_cv
    struct remove_cv
    {
    {
      typedef typename
      typedef typename
      remove_const::type>::type     type;
      remove_const::type>::type     type;
    };
    };
  /// add_const
  /// add_const
  template
  template
    struct add_const
    struct add_const
    { typedef _Tp const     type; };
    { typedef _Tp const     type; };
  /// add_volatile
  /// add_volatile
  template
  template
    struct add_volatile
    struct add_volatile
    { typedef _Tp volatile     type; };
    { typedef _Tp volatile     type; };
  /// add_cv
  /// add_cv
  template
  template
    struct add_cv
    struct add_cv
    {
    {
      typedef typename
      typedef typename
      add_const::type>::type     type;
      add_const::type>::type     type;
    };
    };
  // array modifications [4.7.3].
  // array modifications [4.7.3].
  /// remove_extent
  /// remove_extent
  template
  template
    struct remove_extent
    struct remove_extent
    { typedef _Tp     type; };
    { typedef _Tp     type; };
  template
  template
    struct remove_extent<_Tp[_Size]>
    struct remove_extent<_Tp[_Size]>
    { typedef _Tp     type; };
    { typedef _Tp     type; };
  template
  template
    struct remove_extent<_Tp[]>
    struct remove_extent<_Tp[]>
    { typedef _Tp     type; };
    { typedef _Tp     type; };
  /// remove_all_extents
  /// remove_all_extents
  template
  template
    struct remove_all_extents
    struct remove_all_extents
    { typedef _Tp     type; };
    { typedef _Tp     type; };
  template
  template
    struct remove_all_extents<_Tp[_Size]>
    struct remove_all_extents<_Tp[_Size]>
    { typedef typename remove_all_extents<_Tp>::type     type; };
    { typedef typename remove_all_extents<_Tp>::type     type; };
  template
  template
    struct remove_all_extents<_Tp[]>
    struct remove_all_extents<_Tp[]>
    { typedef typename remove_all_extents<_Tp>::type     type; };
    { typedef typename remove_all_extents<_Tp>::type     type; };
  // pointer modifications [4.7.4].
  // pointer modifications [4.7.4].
  template
  template
    struct __remove_pointer_helper
    struct __remove_pointer_helper
    { typedef _Tp     type; };
    { typedef _Tp     type; };
  template
  template
    struct __remove_pointer_helper<_Tp, _Up*>
    struct __remove_pointer_helper<_Tp, _Up*>
    { typedef _Up     type; };
    { typedef _Up     type; };
  /// remove_pointer
  /// remove_pointer
  template
  template
    struct remove_pointer
    struct remove_pointer
    : public __remove_pointer_helper<_Tp, typename remove_cv<_Tp>::type>
    : public __remove_pointer_helper<_Tp, typename remove_cv<_Tp>::type>
    { };
    { };
  template
  template
    struct remove_reference;
    struct remove_reference;
  /// add_pointer
  /// add_pointer
  template
  template
    struct add_pointer
    struct add_pointer
    { typedef typename remove_reference<_Tp>::type*     type; };
    { typedef typename remove_reference<_Tp>::type*     type; };
#undef _DEFINE_SPEC_0_HELPER
#undef _DEFINE_SPEC_0_HELPER
#undef _DEFINE_SPEC_1_HELPER
#undef _DEFINE_SPEC_1_HELPER
#undef _DEFINE_SPEC_2_HELPER
#undef _DEFINE_SPEC_2_HELPER
#undef _DEFINE_SPEC
#undef _DEFINE_SPEC
  // @} group metaprogramming
  // @} group metaprogramming
_GLIBCXX_END_NAMESPACE_TR1
_GLIBCXX_END_NAMESPACE_TR1
}
}
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.