Short version: Types in C++ are:
Object types: scalars, arrays, classes, unions
(Member types) [see below]
arithmetic (integral, float)
T *for any type
T[N]for any complete, non-reference type
T &&for any object or free-function type
R foo(Arg1, Arg2, ...)
R T::foo(Arg1, Arg2, ...)
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
<type_traits> header provides trait classes to check for each of these type characteristics.