First of all type-safe means that anything that a compiler can catch straight away if done incorrectly.
Now, I heard function pointers are not type safe however when
Function pointers are type safe. However, many environments force upon the programmer the need to recast them. An incorrect casting could cause significant problems.