fork(1) download
  1. #include <type_traits>
  2. #include <complex>
  3.  
  4. template<class> struct IsComplex_impl {using type = std::false_type;};
  5. template<class T> struct IsComplex_impl<std::complex<T>> {using type = std::true_type;};
  6.  
  7. template <typename T>
  8. using IsComplex = typename IsComplex_impl<T>::type;
  9.  
  10. /**
  11.  * Evaluates to a true type if the given complex type is an Array of Structs, false otherwise
  12.  * Defaults to false for Real values
  13.  */
  14. template<typename T, typename T_isComplex = IsComplex<T>>
  15. struct IsAoS;
  16.  
  17. /**
  18.  * Undefined for (unknown) complex types
  19.  */
  20. template< typename T >
  21. struct IsAoS< T, std::false_type >: std::false_type{};
  22.  
  23. template<>
  24. struct IsAoS< std::complex<double>>: std::true_type{};
  25.  
  26.  
  27. int main() {
  28. static_assert(!IsAoS<int>::value , "");
  29. static_assert(IsAoS<std::complex<double>>::value , "");
  30. //static_assert(IsAoS<std::complex<float>>::value , "");
  31. }
  32.  
Success #stdin #stdout 0s 3092KB
stdin
Standard input is empty
stdout
Standard output is empty