#include <type_traits>
#include <complex>
template<class> struct IsComplex_impl {using type = std::false_type;};
template<class T> struct IsComplex_impl<std::complex<T>> {using type = std::true_type;};
template <typename T>
using IsComplex = typename IsComplex_impl<T>::type;
/**
* Evaluates to a true type if the given complex type is an Array of Structs, false otherwise
* Defaults to false for Real values
*/
template<typename T, typename T_isComplex = IsComplex<T>>
struct IsAoS;
/**
* Undefined for (unknown) complex types
*/
template< typename T >
struct IsAoS< T, std::false_type >: std::false_type{};
template<>
struct IsAoS< std::complex<double>>: std::true_type{};
int main() {
static_assert(!IsAoS<int>::value , "");
static_assert(IsAoS<std::complex<double>>::value , "");
//static_assert(IsAoS<std::complex<float>>::value , "");
}
I2luY2x1ZGUgPHR5cGVfdHJhaXRzPgojaW5jbHVkZSA8Y29tcGxleD4KCnRlbXBsYXRlPGNsYXNzPiBzdHJ1Y3QgSXNDb21wbGV4X2ltcGwgIHt1c2luZyB0eXBlID0gc3RkOjpmYWxzZV90eXBlO307CnRlbXBsYXRlPGNsYXNzIFQ+IHN0cnVjdCBJc0NvbXBsZXhfaW1wbDxzdGQ6OmNvbXBsZXg8VD4+IHt1c2luZyB0eXBlID0gc3RkOjp0cnVlX3R5cGU7fTsKCnRlbXBsYXRlIDx0eXBlbmFtZSBUPgp1c2luZyBJc0NvbXBsZXggPSAgdHlwZW5hbWUgSXNDb21wbGV4X2ltcGw8VD46OnR5cGU7CgovKioKICogRXZhbHVhdGVzIHRvIGEgdHJ1ZSB0eXBlIGlmIHRoZSBnaXZlbiBjb21wbGV4IHR5cGUgaXMgYW4gQXJyYXkgb2YgU3RydWN0cywgZmFsc2Ugb3RoZXJ3aXNlCiAqIERlZmF1bHRzIHRvIGZhbHNlIGZvciBSZWFsIHZhbHVlcwogKi8KdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVF9pc0NvbXBsZXggPSBJc0NvbXBsZXg8VD4+CnN0cnVjdCBJc0FvUzsKCi8qKgogKiBVbmRlZmluZWQgZm9yICh1bmtub3duKSBjb21wbGV4IHR5cGVzCiAqLwp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+CnN0cnVjdCBJc0FvUzwgVCwgc3RkOjpmYWxzZV90eXBlID46IHN0ZDo6ZmFsc2VfdHlwZXt9OwoKdGVtcGxhdGU8PgpzdHJ1Y3QgSXNBb1M8IHN0ZDo6Y29tcGxleDxkb3VibGU+Pjogc3RkOjp0cnVlX3R5cGV7fTsKCgppbnQgbWFpbigpIHsKICAgIHN0YXRpY19hc3NlcnQoIUlzQW9TPGludD46OnZhbHVlICwgIiIpOwogICAgc3RhdGljX2Fzc2VydChJc0FvUzxzdGQ6OmNvbXBsZXg8ZG91YmxlPj46OnZhbHVlICwgIiIpOwogICAgLy9zdGF0aWNfYXNzZXJ0KElzQW9TPHN0ZDo6Y29tcGxleDxmbG9hdD4+Ojp2YWx1ZSAsICIiKTsKfQo=