Because it is not illegal within SafeNormalize. This class offers a .valid() getter so users can define special behaviour for these cases. This debug output is probably too much as well.
I see a possible point of yours however, since I changed ALL glm::normalize calls to safeNormalize(). My suggested usage of normalizations would be this in the future:
* Use glm::normalize if you are abso-freaking-lutely sure that this algorithm will never ever yield an illegal input. Maybe assert(normalizable(...))
* Use SafeNormalize with a fallback value if this fallback makes semantic sense or it's a absolute cornercase and the game is maybe only minimally visually affected
* Use SafeNormalize without a fallback and check for validity if your algorithm needs special logical handling of non-normalization