Uni20
Asynchronous tensor and runtime library.
Loading...
Searching...
No Matches
Classes | Namespaces | Typedefs | Variables
scalar_traits.hpp File Reference
#include "numeric_limits.hpp"
#include "types.hpp"
#include <complex>
#include <type_traits>
Include dependency graph for scalar_traits.hpp:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  uni20::is_complex_t< T >
 Trait to detect whether a type is a complex scalar type. More...
 
struct  uni20::is_integer_t< T >
 Trait to detect whether a type is an integer scalar (excluding bool). More...
 
struct  uni20::is_real_t< T >
 Trait to detect whether a type is a real-valued scalar. More...
 
struct  uni20::is_real_t< double >
 
struct  uni20::is_real_t< float >
 
struct  uni20::is_real_t< long double >
 
struct  uni20::make_complex< T >
 Metafunction that produces the complex counterpart of a real-valued scalar. More...
 
struct  uni20::make_real< T >
 
struct  uni20::scalar_type< T >
 Trait to extract the scalar type from a type T. More...
 
struct  uni20::scalar_type< T >
 

Namespaces

namespace  uni20
 

Typedefs

template<typename T >
using uni20::make_complex_t = typename make_complex< T >::type
 Alias for the complexified version of T.
 
template<typename T >
using uni20::make_real_t = typename make_real< T >::type
 Alias for the underlying real-valued type of T.
 
template<typename T >
using uni20::scalar_t = typename scalar_type< std::remove_cvref_t< T > >::type
 

Variables

template<typename T >
constexpr bool uni20::is_complex_scalar_valued_v = is_scalar_valued_v<T> && is_complex_v<scalar_t<T>>
 Trait to detect whether T is scalar-valued with a complex scalar.
 
template<typename T >
constexpr bool uni20::is_complex_v = is_complex_t<std::remove_cvref_t<T>>::value
 Convenience alias that exposes the value of is_complex_t.
 
template<typename T >
constexpr bool uni20::is_integer_scalar_valued_v = is_scalar_valued_v<T> && is_integer_v<scalar_t<T>>
 Trait to detect whether T is scalar-valued with an integer scalar.
 
template<typename T >
constexpr bool uni20::is_integer_v = is_integer_t<std::remove_cvref_t<T>>::value
 Convenience alias that exposes the value of is_integer_t.
 
template<typename T >
constexpr bool uni20::is_real_or_complex_scalar_valued_v = is_scalar_valued_v<T> && is_real_or_complex_v<scalar_t<T>>
 Trait to detect whether T is scalar-valued with a real or complex scalar.
 
template<typename T >
constexpr bool uni20::is_real_or_complex_v = is_real_v<T> || is_complex_v<T>
 Trait to detect whether a type is a real or complex scalar.
 
template<typename T >
constexpr bool uni20::is_real_scalar_valued_v = is_scalar_valued_v<T> && is_real_v<scalar_t<T>>
 Trait to detect whether T is scalar-valued with a real scalar.
 
template<typename T >
constexpr bool uni20::is_real_v = is_real_t<std::remove_cvref_t<T>>::value
 Convenience alias that exposes the value of is_real_t.
 
template<typename T >
constexpr bool uni20::is_scalar_v = is_real_v<T> || is_complex_v<T> || is_integer_v<T>
 Trait to detect whether a type is a numeric scalar (real, complex, or integer).
 
template<typename T >
constexpr bool uni20::is_scalar_valued_v = !std::same_as<scalar_t<T>, void>
 Trait to detect whether T is scalar-valued.