Note that exception parameter can be of any type (possibly different in case of different exceptions) and thus funC can not predict it on compile time. That means that developer need to "help" compiler by casting exception parameter to some type (see Example 2 below):
https://docs.ton.org/develop/func/statements#try-catch-statements
While exception parameter (first parameter in catch(), _ in this case) is indeed may be of arbitrary type and need to be manually casted, exit_code is always int.
Note that exception parameter can be of any type (possibly different in case of different exceptions) and thus funC can not predict it on compile time. That means that developer need to "help" compiler by casting exception parameter to some type (see Example 2 below): https://docs.ton.org/develop/func/statements#try-catch-statements