typedef name = exp;This is useful in conjunction with the statements-within-expressions feature.
The following shows how the two together can be used to define a safe “maximum” macro that operates on any arithmetic type.
#define max(a,b) \ ({typedef _ta = (a), _tb = (b); \ _ta _a = (a); _tb _b = (b); \ _a > _b ? _a : _b; })The reason for using names that start with underscores for the local variables is to avoid conflicts with variable names that occur within the expressions that are substituted for ‘a’ and ‘b’. Eventually we hope to design a new form of declaration syntax that allows you to declare variables whose scopes start only after their initializers; this will be a more reliable way to prevent such conflicts.