Since C++11, type aliases can be declared via
using should be preferred as more readable
because you see the new name/alias first.
using can be templated, which makes it applicable to more situations than
Noncompliant Code Example
typedef void (*FunctionPointerType)(int);
using FunctionPointerType = void (*)(int);