  Error handling is the process of responding to and recovering from error
conditions in the program. In Swift, errors are represented by values of types
that conform to the Error protocol. Throwing an error lets you indicate that
something unexpected happened, and the normal flow of execution can't continue.
A throw statement is used to throw an error. Optional returns are used to
represent the absence of a value, but when an operation fails, it's often
useful to understand what caused the failure so that code can respond
accordingly. Therefore, I propose to bridge the Swift Error Handling modeling
to C++ to improve the interoperability between the programming languages. The
main idea is to be able to throw a C++ exception that stores a thrown Swift
Error that has to be represented by a C++ class. In addition to that, to
support C++ programs that don't use exceptions, I propose an additional
interoperability mode for throwing functions. When C++ exceptions are disabled,
C++ functions should return a result value that contains either the value
returned by the function or the Swift Error value: the Swift::Exception<T>
class.
