📄 base_type_traits.hpp
字号:
#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 + -