Catch is type system complexity and that you can’t be sloppy. But C++ spends much more complexity points on incidental exceptions and gotchas than Rust spends on modelling the essential complexity right. (Granted, it is not immune from accruing incedental complexity)
Part of the reason I'd go with C# or F# is because it *can* interface with C code better than many languages. You need libraries, C has all the libraries, and if you're using C libraries you'll inevitably sometimes need to write C code.
F# is a fine language too, if you need to run .NET. It helps to know C, but I definitely would not want to be writing any more of it in 2018, unless in a legacy code base or if the platform is out of reach of LLVM. Rust has a great C FFI, and can be embedded in other runtimes.