69 #ifndef LINEAR_ALGEBRA_TRAITS_HPP
70 #define LINEAR_ALGEBRA_TRAITS_HPP
79 struct __true_type { };
80 struct __false_type { };
84 template<
typename _Tp>
88 typedef __false_type __type;
92 struct __is_real<float>
95 typedef __true_type __type;
99 struct __is_real<double>
102 typedef __true_type __type;
106 struct __is_real<long double>
109 typedef __true_type __type;
130 return slip::__is_real<T>::__val;
135 template<
typename _Tp>
139 typedef __false_type __type;
143 struct __is_complex<std::complex<float> >
146 typedef __true_type __type;
150 struct __is_complex<std::complex<double> >
153 typedef __true_type __type;
157 struct __is_complex<std::complex<long double> >
160 typedef __true_type __type;
181 return slip::__is_complex<T>::__val;
185 template<
typename _Tp>
191 template<
typename _Tp>
213 return std::numeric_limits<typename slip::lin_alg_traits<T>::value_type>
::epsilon();
219 #endif //LINEAR_ALGEBRA_TRAITS_HPP
bool is_complex(const T &val)
Test if an element is complex.
slip::lin_alg_traits< T >::value_type epsilon()
Returns the epsilon value of a real or a complex.
std::complex< _Tp >::value_type value_type
bool is_real(const T &val)
Test if an element is real.