Type traits intrinsic design

This is a survey of the type traits intrinsics clang has, and those needed. The names and definitions of several of the needed type traits has recently changed. Please see: N3142.

Legend
clang supplies it and it is absolutely necessary some_trait(T)
clang supplies it and it is useful some_trait(T)
clang supplies it and it is not needed some_trait(T)
clang does not supply it and it is not needed
clang does not supply it and it is absolutely necessary some_trait(T)

Needed type traits vs clang type traits
libc++ Needs clang Has
is_union<T> __is_union(T)
is_class<T> __is_class(T)
is_enum<T> __is_enum(T)
is_pod<T> __is_pod(T)
has_virtual_destructor<T> __has_virtual_destructor(T)
is_constructible<T, Args...>
is_default_constructible<T>
is_copy_constructible<T>
is_move_constructible<T>
is_assignable<T, U>
is_copy_assignable<T>
is_move_assignable<T>
is_destructible<T>
is_trivially_constructible<T, Args...> __is_trivially_constructible(T, U)
is_trivially_default_constructible<T> __has_trivial_constructor(T)
is_trivially_copy_constructible<T> __has_trivial_copy(T)
is_trivially_move_constructible<T>
is_trivially_assignable<T, U> __is_trivially_assignable(T, U)
is_trivially_copy_assignable<T> __has_trivial_assign(T)
is_trivially_move_assignable<T>
is_trivially_destructible<T> __has_trivial_destructor(T)
is_nothrow_constructible<T, Args...>
is_nothrow_default_constructible<T> __has_nothrow_constructor(T)
is_nothrow_copy_constructible<T> __has_nothrow_copy(T)
is_nothrow_move_constructible<T>
is_nothrow_assignable<T, U>
is_nothrow_copy_assignable<T> __has_nothrow_assign(T)
is_nothrow_move_assignable<T>
is_nothrow_destructible<T>
is_trivial<T> __is_trivial(T)
is_trivially_copyable<T> __is_trivially_copyable(T)
is_standard_layout<T> __is_standard_layout(T)
is_literal_type<T> __is_literal_type(T)
is_convertible<T, U> __is_convertible_to(T, U)
is_base_of<T, U> __is_base_of(T, U)
underlying_type<T> __underlying_type(T)
is_polymorphic<T> __is_polymorphic(T)
is_empty<T> __is_empty(T)
is_abstract<T> __is_abstract(T)