template struct cv::cudev::TypeTraits

#include <type_traits.hpp>

template <typename T>
struct TypeTraits
{
    // typedefs

    typedef type_traits_detail::UnConst<T>::type non_const_type;
    typedef type_traits_detail::UnVolatile<T>::type non_volatile_type;
    typedef SelectIf<type_traits_detail::IsSimpleParameter<unqualified_type>::value, T, typename type_traits_detail::AddParameterType<T>::type>::type parameter_type;
    typedef type_traits_detail::PointerTraits<unqualified_type>::type pointee_type;
    typedef type_traits_detail::ReferenceTraits<T>::type referred_type;
    typedef type_traits_detail::UnVolatile<typename type_traits_detail::UnConst<T>::type>::type unqualified_type;

    // enums

    enum
    {
        is_const = type_traits_detail::UnConst<T>::value,
    };

    enum
    {
        is_volatile = type_traits_detail::UnVolatile<T>::value,
    };

    enum
    {
        is_reference = type_traits_detail::ReferenceTraits<unqualified_type>::value,
    };

    enum
    {
        is_pointer = type_traits_detail::PointerTraits<typename type_traits_detail::ReferenceTraits<unqualified_type>::type>::value,
    };

    enum
    {
        is_unsigned_int = type_traits_detail::IsUnsignedIntegral<unqualified_type>::value,
    };

    enum
    {
        is_signed_int = type_traits_detail::IsSignedIntergral<unqualified_type>::value,
    };

    enum
    {
        is_integral = type_traits_detail::IsIntegral<unqualified_type>::value,
    };

    enum
    {
        is_float = type_traits_detail::IsFloat<unqualified_type>::value,
    };

    enum
    {
        is_scalar = is_integral || is_float,
    };

    enum
    {
        is_vec = type_traits_detail::IsVec<unqualified_type>::value,
    };
};