Just because you _can_ stick your hand in a blender, that doesn't mean you _should_. Similarly, you _can_ ``throw`` anything, but that doesn't mean you _should_ ``throw`` something that's not derived at some level from ``std::exception``.
Specifically, part of the point of throwing exceptions is to communicate about the conditions of the error, but primitives have far less ability to communicate meaningfully than ``exception``s. And, the creation of some other object type could itself ``throw`` an exception, resulting in program termination.