The primary type categories correspond to the descriptions given in section [basic.types] of the C++ standard.

For any given type T, the result of applying one of these templates to T and to cv T shall yield the same result.

[ Note: For any given type T, exactly one of the primary type categories has a value member that evaluates to true. — end note ]

Table 40 — Primary type category predicates

Template | Condition | Comments |

template <class T> struct is_void; | T is void | |

template <class T> struct is_null_pointer; | T is nullptr_t ([basic.fundamental]) | |

template <class T> struct is_integral; | T is an integral type | |

template <class T> struct is_floating_point; | T is a floating-point type | |

template <class T> struct is_array; | T is an array type ([basic.compound]) of known or unknown extent | Class template array is not an array type. |

template <class T> struct is_pointer; | T is a pointer type | Includes pointers to functions but not pointers to non-static members. |

template <class T> struct is_lvalue_reference; | T is an lvalue reference type | |

template <class T> struct is_rvalue_reference; | T is an rvalue reference type | |

template <class T> struct is_member_object_pointer; | T is a pointer to non-static data member | |

template <class T> struct is_member_function_pointer; | T is a pointer to non-static member function | |

template <class T> struct is_enum; | T is an enumeration type ([basic.compound]) | |

template <class T> struct is_union; | T is a union type ([basic.compound]) | |

template <class T> struct is_class; | T is a non-union class type ([basic.compound]) | |

template <class T> struct is_function; | T is a function type ([basic.compound]) |