⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 base_type_traits.hpp

📁 新版本TR1的stl
💻 HPP
📖 第 1 页 / 共 2 页
字号:
#endif /* STLSOFT_CF_STATIC_ARRAY_SIZE_DETERMINATION_SUPPORT */

    typedef T           base_type;
    typedef T volatile  cv_type;
};

template <ss_typename_param_k T>
struct base_type_traits<T const volatile*>
{
    enum { is_pointer           =   1 };
    enum { is_reference         =   0 };
    enum { is_const             =   1 };
    enum { is_volatile          =   1 };
    enum { is_array_or_pointer  =   1 };
#if defined(STLSOFT_CF_STATIC_ARRAY_SIZE_DETERMINATION_SUPPORT)
    enum { is_array             =   0   };
#endif /* STLSOFT_CF_STATIC_ARRAY_SIZE_DETERMINATION_SUPPORT */

    typedef T                   base_type;
    typedef T const volatile    cv_type;
};

// arrays

#  if defined(STLSOFT_CF_STATIC_ARRAY_SIZE_DETERMINATION_SUPPORT)

#if 0
template <ss_typename_param_k T, ss_size_t N>
struct base_type_traits<T[N]>
{
    enum { is_pointer           =   0 };
    enum { is_reference         =   0 };
    enum { is_const             =   0 };
    enum { is_volatile          =   0 };
    enum { is_array             =   1 };
    enum { is_array_or_pointer  =   1 };

    typedef T   base_type;
    typedef T   cv_type;
};

template <ss_typename_param_k T, ss_size_t N>
struct base_type_traits<T const[N]>
{
    enum { is_pointer           =   0 };
    enum { is_reference         =   0 };
    enum { is_const             =   1 };
    enum { is_volatile          =   0 };
    enum { is_array             =   1 };
    enum { is_array_or_pointer  =   1 };

    typedef T       base_type;
    typedef T const cv_type;
};

template <ss_typename_param_k T, ss_size_t N>
struct base_type_traits<T volatile[N]>
{
    enum { is_pointer           =   0 };
    enum { is_reference         =   0 };
    enum { is_const             =   0 };
    enum { is_volatile          =   1 };
    enum { is_array             =   1 };
    enum { is_array_or_pointer  =   1 };

    typedef T           base_type;
    typedef T volatile  cv_type;
};

template <ss_typename_param_k T, ss_size_t N>
struct base_type_traits<T const volatile[N]>
{
    enum { is_pointer           =   0 };
    enum { is_reference         =   0 };
    enum { is_const             =   1 };
    enum { is_volatile          =   1 };
    enum { is_array             =   1 };
    enum { is_array_or_pointer  =   1 };

    typedef T                   base_type;
    typedef T const volatile    cv_type;
};
#endif /* 0 */

#  endif /* STLSOFT_CF_STATIC_ARRAY_SIZE_DETERMINATION_SUPPORT */

// references

template <ss_typename_param_k T>
struct base_type_traits<T&>
{
    enum { is_pointer           =   0 };
    enum { is_reference         =   1 };
    enum { is_const             =   0 };
    enum { is_volatile          =   0 };
    enum { is_array_or_pointer  =   0 };
#if defined(STLSOFT_CF_STATIC_ARRAY_SIZE_DETERMINATION_SUPPORT)
    enum { is_array             =   base_type_traits_array_detector<T>::value   };
#endif /* STLSOFT_CF_STATIC_ARRAY_SIZE_DETERMINATION_SUPPORT */

    typedef T   base_type;
    typedef T   cv_type;
};

template <ss_typename_param_k T>
struct base_type_traits<T const&>
{
    enum { is_pointer           =   0 };
    enum { is_reference         =   1 };
    enum { is_const             =   1 };
    enum { is_volatile          =   0 };
    enum { is_array_or_pointer  =   0 };
#if defined(STLSOFT_CF_STATIC_ARRAY_SIZE_DETERMINATION_SUPPORT)
    enum { is_array             =   base_type_traits_array_detector<T>::value   };
#endif /* STLSOFT_CF_STATIC_ARRAY_SIZE_DETERMINATION_SUPPORT */

    typedef T       base_type;
    typedef T const cv_type;
};

template <ss_typename_param_k T>
struct base_type_traits<T volatile&>
{
    enum { is_pointer           =   0 };
    enum { is_reference         =   1 };
    enum { is_const             =   0 };
    enum { is_volatile          =   1 };
    enum { is_array_or_pointer  =   0 };
#if defined(STLSOFT_CF_STATIC_ARRAY_SIZE_DETERMINATION_SUPPORT)
    enum { is_array             =   base_type_traits_array_detector<T>::value   };
#endif /* STLSOFT_CF_STATIC_ARRAY_SIZE_DETERMINATION_SUPPORT */

    typedef T           base_type;
    typedef T volatile  cv_type;
};

template <ss_typename_param_k T>
struct base_type_traits<T const volatile&>
{
    enum { is_pointer           =   0 };
    enum { is_reference         =   1 };
    enum { is_const             =   1 };
    enum { is_volatile          =   1 };
    enum { is_array_or_pointer  =   0 };
#if defined(STLSOFT_CF_STATIC_ARRAY_SIZE_DETERMINATION_SUPPORT)
    enum { is_array             =   base_type_traits_array_detector<T>::value   };
#endif /* STLSOFT_CF_STATIC_ARRAY_SIZE_DETERMINATION_SUPPORT */

    typedef T                   base_type;
    typedef T const volatile    cv_type;
};

// references to pointers

template <ss_typename_param_k T>
struct base_type_traits<T*&>
{
    enum { is_pointer           =   1 };
    enum { is_reference         =   1 };
    enum { is_const             =   0 };
    enum { is_volatile          =   0 };
    enum { is_array_or_pointer  =   1 };
#if defined(STLSOFT_CF_STATIC_ARRAY_SIZE_DETERMINATION_SUPPORT)
    enum { is_array             =   0   };
#endif /* STLSOFT_CF_STATIC_ARRAY_SIZE_DETERMINATION_SUPPORT */

    typedef T   base_type;
    typedef T   cv_type;
};

template <ss_typename_param_k T>
struct base_type_traits<T const*&>
{
    enum { is_pointer           =   1 };
    enum { is_reference         =   1 };
    enum { is_const             =   1 };
    enum { is_volatile          =   0 };
    enum { is_array_or_pointer  =   1 };
#if defined(STLSOFT_CF_STATIC_ARRAY_SIZE_DETERMINATION_SUPPORT)
    enum { is_array             =   0   };
#endif /* STLSOFT_CF_STATIC_ARRAY_SIZE_DETERMINATION_SUPPORT */

    typedef T       base_type;
    typedef T const cv_type;
};

template <ss_typename_param_k T>
struct base_type_traits<T volatile*&>
{
    enum { is_pointer           =   1 };
    enum { is_reference         =   1 };
    enum { is_const             =   0 };
    enum { is_volatile          =   1 };
    enum { is_array_or_pointer  =   1 };
#if defined(STLSOFT_CF_STATIC_ARRAY_SIZE_DETERMINATION_SUPPORT)
    enum { is_array             =   0   };
#endif /* STLSOFT_CF_STATIC_ARRAY_SIZE_DETERMINATION_SUPPORT */

    typedef T           base_type;
    typedef T volatile  cv_type;
};

template <ss_typename_param_k T>
struct base_type_traits<T const volatile*&>
{
    enum { is_pointer           =   1 };
    enum { is_reference         =   1 };
    enum { is_const             =   1 };
    enum { is_volatile          =   1 };
    enum { is_array_or_pointer  =   1 };
#if defined(STLSOFT_CF_STATIC_ARRAY_SIZE_DETERMINATION_SUPPORT)
    enum { is_array             =   0   };
#endif /* STLSOFT_CF_STATIC_ARRAY_SIZE_DETERMINATION_SUPPORT */

    typedef T                   base_type;
    typedef T const volatile    cv_type;
};

# endif /* !STLSOFT_DOCUMENTATION_SKIP_SECTION */

#else /* ? STLSOFT_CF_TEMPLATE_PARTIAL_SPECIALISATION_SUPPORT */

#endif /* STLSOFT_CF_TEMPLATE_PARTIAL_SPECIALISATION_SUPPORT */

/* /////////////////////////////////////////////////////////////////////////
 * Unit-testing
 */

#ifdef STLSOFT_UNITTEST
# include "./unittest/base_type_traits_unittest_.h"
#endif /* STLSOFT_UNITTEST */

/* ////////////////////////////////////////////////////////////////////// */

#ifndef _STLSOFT_NO_NAMESPACE
} // namespace stlsoft
#endif /* _STLSOFT_NO_NAMESPACE */

/* ////////////////////////////////////////////////////////////////////// */

#endif /* !STLSOFT_INCL_STLSOFT_META_HPP_BASE_TYPE_TRAITS */

/* ////////////////////////////////////////////////////////////////////// */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -