Examples of typedef definitions

The following statements define LENGTH as a synonym for int and then use this typedef to declare length, width, and height as integer variables:
typedef int LENGTH;
LENGTH length, width, height;
The following declarations are equivalent to the above declaration:
int length, width, height;
Similarly, typedef can be used to define a structure, union, or C++ class. For example:
typedef struct {
   int scruples;
   int drams;
   int grains;
} WEIGHT;
The structure WEIGHT can then be used in the following declarations:
WEIGHT  chicken, cow, horse, whale;
In the following example, the type of yds is "pointer to function with no parameter specified, returning int".
typedef int SCROLL();
extern SCROLL *yds; 
In the following typedefs, the token struct is part of the type name: the type of ex1 is struct a; the type of ex2 is struct b.
typedef struct a { char x; } ex1, *ptr1;
typedef struct b { char x; } ex2, *ptr2;  
Type ex1 is compatible with the type struct a and the type of the object pointed to by ptr1. Type ex1 is not compatible with char, ex2, or struct b.

C++ Beginning of C++ only.

In C++, a typedef name must be different from any class type name declared within the same scope. If the typedef name is the same as a class type name, it can only be so if that typedef is a synonym of the class name. This condition is not the same as in C. The following can be found in standard C headers:
typedef class C { /*  data and behavior  */ } C;
A C++ class defined in a typedef without being named is given a dummy name and the typedef name for linkage. Such a class cannot have constructors or destructors. For example:
typedef class {
   Trees();
} Trees;
Here the function Trees() is an ordinary member function of a class whose type name is unspecified. In the above example, Trees is an alias for the unnamed class, not the class type name itself, so Trees() cannot be a constructor for that class.

C++ End of C++ only.

C++0x Beginning of C++0x only.

Declaring typedef names as friends

In the C++0x standard, the extended friend declarations feature is introduced, with which you can declare typedef names as friends. For more information, see Extended friend declarations.

C++0x End of C++0x only.