[/ Copyright 2007 John Maddock. Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt). ] [section:value_traits Type Traits that Describe the Properties of a Type] These traits are all /value traits/, which is to say the traits classes all inherit from __integral_constant, and are used to access some numerical property of a type. Often this is a simple true or false Boolean value, but in a few cases may be some other integer value (for example when dealing with type alignments, or array bounds: see `__alignment_of`, `__rank` and `__extent`). [section:primary Categorizing a Type] These traits identify what "kind" of type some type `T` is. These are split into two groups: primary traits which are all mutually exclusive, and composite traits that are compositions of one or more primary traits. For any given type, exactly one primary type trait will inherit from __true_type, and all the others will inherit from __false_type, in other words these traits are mutually exclusive. This means that `__is_integral::value` and `__is_floating_point::value` will only ever be true for built-in types; if you want to check for a user-defined class type that behaves "as if" it is an integral or floating point type, then use the `std::numeric_limits template` instead. [*Synopsis:] template struct __is_array; template struct __is_class; template struct __is_complex; template struct __is_enum; template struct __is_floating_point; template struct __is_function; template struct __is_integral; template struct __is_member_function_pointer; template struct __is_member_object_pointer; template struct __is_pointer; template struct __is_lvalue_reference; template struct __is_rvalue_reference; template struct __is_union; template struct __is_void; The following traits are made up of the union of one or more type categorizations. A type may belong to more than one of these categories, in addition to one of the primary categories. template struct __is_arithmetic; template struct __is_compound; template struct __is_fundamental; template struct __is_member_pointer; template struct __is_object; template struct __is_reference; template struct __is_scalar; [endsect] [section:properties General Type Properties] The following templates describe the general properties of a type. [*Synopsis:] template struct __alignment_of; template struct __has_new_operator; template struct __has_nothrow_assign; template struct __has_nothrow_constructor; template struct __has_nothrow_default_constructor; template struct __has_nothrow_copy; template struct __has_nothrow_copy_constructor; template struct __has_nothrow_destructor; template struct __has_trivial_assign; template struct __has_trivial_constructor; template struct __has_trivial_default_constructor; template struct __has_trivial_copy; template struct __has_trivial_copy_constructor; template struct __has_trivial_destructor; template struct __has_virtual_destructor; template struct __is_abstract; template struct __is_assignable; template struct __is_copy_constructible; template struct __is_copy_assignable; template struct __is_constructible; template struct __is_default_constructible; template struct __is_destructible; template struct __is_const; template struct __is_empty; template struct __is_final; template struct __is_stateless; template struct __is_pod; template struct __is_polymorphic; template struct __is_signed; template struct __is_unsigned; template struct __is_volatile; template struct __extent; template struct __rank; [endsect] [section:relate Relationships Between Two Types] These templates determine the whether there is a relationship between two types: [*Synopsis:] template struct __is_base_of; template struct __is_virtual_base_of; template struct __is_convertible; template struct __is_same; [endsect] [include operators.qbk] [endsect]