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) |