|  | #ifndef TYPECHECK_H_INCLUDED | 
|  | #define TYPECHECK_H_INCLUDED | 
|  |  | 
|  | /* | 
|  | * Check at compile time that something is of a particular type. | 
|  | * Always evaluates to 1 so you may use it easily in comparisons. | 
|  | */ | 
|  | #define typecheck(type,x) \ | 
|  | ({	type __dummy; \ | 
|  | typeof(x) __dummy2; \ | 
|  | (void)(&__dummy == &__dummy2); \ | 
|  | 1; \ | 
|  | }) | 
|  |  | 
|  | /* | 
|  | * Check at compile time that 'function' is a certain type, or is a pointer | 
|  | * to that type (needs to use typedef for the function type.) | 
|  | */ | 
|  | #define typecheck_fn(type,function) \ | 
|  | ({	typeof(type) __tmp = function; \ | 
|  | (void)__tmp; \ | 
|  | }) | 
|  |  | 
|  | #endif		/* TYPECHECK_H_INCLUDED */ |