Short version: Types in C++ are:
-
Object types: scalars, arrays, classes, unions
-
Reference types
-
Function types
-
(Member types) [see below]
-
void
Long version
-
Object types
-
Scalars
-
arithmetic (integral, float)
-
pointers:
T *for any typeT -
enum
-
pointer-to-member
-
nullptr_t
-
-
Arrays:
T[]orT[N]for any complete, non-reference typeT -
Classes:
class Fooorstruct Bar-
Trivial classes
-
Aggregates
-
POD classes
-
(etc. etc.)
-
-
Unions:
union Zip
-
-
References types:
T &,T &&for any object or free-function typeT -
Function types
-
Free functions:
R foo(Arg1, Arg2, ...) -
Member functions:
R T::foo(Arg1, Arg2, ...)
-
-
void
Member types work like this. A member type is of the form T::U, but you can’t have objects or variables of member type. You can only have member pointers. A member pointer has type T::* U, and it is a pointer-to-member-object if U is a (free) object type, and a pointer-to-member-function if U is a (free) function type.
All types are complete except void, unsized arrays and declared-but-not-defined classes and unions. All incomplete types except void can be completed.
All types can be const/volatile qualified.
The <type_traits> header provides trait classes to check for each of these type characteristics.