https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106838
--- Comment #4 from Jonathan Wakely <redi at gcc dot gnu.org> --- All traits of kind C currently reject T[] and T[1], but should accept them. That applies to: __is_empty __is_polymorphic __is_abstract __has_virtual_destructor These should accept Incomplete[] and Incomplete[1] and just return false. It's possible that the non-standard "__has_xxx" traits should also be of kind C, e.g. __has_trivial_assign(Incomplete[]) could be false, because arrays aren't assignable. But I don't really care about those ones, because the library doesn't use them (only __has_trivial_destructor, which is used for std::is_trivially_destructible, but the library can ensure we never use it with arrays, if necessary).