Whenever you use throw expression;, a new object is created. And since the static type of inner_std_exception is std::exception that is the type you get. Whereas if you just use throw; you re-throw the current exception - nothing new is created.
If you're thinking that catch behaves like a function where throw is analogous to return - don't.