Avoid declaring u16.
You are defining u16 to be equal to std::uint16_t. Is this because you just want to save some keystrokes, or is it because the u16 represents something distinct in your class? If you want it to be a value representing the number of states or index of a state, then make this more explicit:
using state_size_t = std::uint16_t;
Now when ...