type and function forward declaration