The only way I see that func() could be throwing an exception is if your char e catch block was throwing (so that cout statement). But that is extremely unlikely to happen.
+1 Moschops. What makes you think that function is throwing an exception?
EDIT:
Also, @Shock Bolt: he has two exception handlers, hence the 2 try blocks. The first one catches and rethrows to the 2nd one.
The function shouldn't throw anything. Also, the throw() specifier is redundant, since the compiler cannot ensure the function will not throw an exception during run-time. In C++11, there's the noexcept() specifier which attends to this issue.