# Type Traits

xsimd provides a few type traits to interact with scalar and batch types in an uniform manner.

Combined traits:

`batch_traits` | batch types and proprties

Type check:

`is_batch` | batch type detection
`is_batch_bool` | mask batch type detection
`is_batch_complex` | complex batch type detection

Type access:

`scalar_type` | batch element type
`mask_type` | batch mask type

template<class T>
struct batch_traits
  #include <xsimd_traits.hpp>

  type traits that provide information about a batch or scalar type.

  Template Parameters:

    T – type to analyze.

template<class T>
struct is_batch : public std::integral_constant<bool, batch_traits<T>::is_batch>
  #include <xsimd_traits.hpp>

  type traits that inherits from `std::true_type` for `batch<...>` types and from `std::false_type` otherwise.

  Template Parameters:

    T – type to analyze.

template<class T>
struct is_batch_bool : public std::integral_constant<bool, batch_traits<T>::is_batch_bool>
  #include <xsimd_traits.hpp>

  type traits that inherits from `std::true_type` for `batch_bool<...>` types and from `std::false_type` otherwise.

  Template Parameters:

    T – type to analyze.

template<class T>
struct is_any_batch : public std::integral_constant<bool, batch_traits<T>::is_any_batch>
  #include <xsimd_traits.hpp>

  type traits that inherits from `std::true_type` for `batch<...>` or batch_bool<…> types and from `std::false_type` otherwise.

  Template Parameters:

    T – type to analyze.

template<class T>
struct is_batch_complex : public std::integral_constant<bool, batch_traits<T>::is_batch && batch_traits<T>::is_complex>
  #include <xsimd_traits.hpp>

  type traits that inherits from `std::true_type` for `batch<std::complex<...>>` types and from `std::false_type` otherwise.

  Template Parameters:

    T – type to analyze.

template<class T>
struct scalar_type
  #include <xsimd_traits.hpp>

  type traits whose `type` field is set to `T::value_type` if `is_batch<T>::value` and to `T` otherwise.

  Template Parameters:

    T – type to analyze.

template<class T>
struct mask_type
  #include <xsimd_traits.hpp>

  type traits whose `type` field is set to `T::value_type` if `is_batch_bool<T>::value` and to `bool` otherwise.

  Template Parameters:

    T – type to analyze.