How to make `#define isvector(a)` based on `__builtin_convertvector` a `constexpr` to be used by `static_assert` in C language
How to use __builtin_convertvector as a constexpr in static_assert?
Are there any alternatives for isvector in C preprocessor language?
#define isarray(a) __builtin_choose_expr(__builtin_types_compatible_p(typeof((a)[0]) [], typeof((a))), true, false)
#undef countof
#define countof(a) sizeof((a))/sizeof(typeof((a)[0]))
#define vec_ext(T,N) typeof(T __attribute__((vector_size(sizeof(T) * bitceil(N)))))
#define vec(T,N) alignas((N == bitceil(N) ? N : 1) * alignof(T)) typeof(T[N])
/* TODO: make this a constexpr to be used in static_assert */
#define rc_vec(src,n) (*(vec(typeof((src)[0]),n)*)src)
#define rc_vec_ext(src,n) (*(vec_ext(typeof((src)[0]),n)*)src)
#define isvector(a) \
({ \
vec_ext(float,bitceil(countof(a))) dst = \
__builtin_convertvector(*(vec_ext(typeof((a)[0]),bitceil(countof(a)))*)&(a)[0], \
vec_ext(float,bitceil(countof(a)))); !isarray(a) && true; \
})