// Testing polymophic exception types. forall(T &) exception proxy {}; vtable(proxy(int)) proxy_int; vtable(proxy(char)) proxy_char; void proxy_test(void) { proxy(int) an_int = {&proxy_int}; proxy(char) a_char = {&proxy_char}; try { throw an_int; } catch (proxy(int) *) { printf("terminate catch\n"); } try { throwResume a_char; } catchResume (proxy(char) *) { printf("resume catch\n"); } try { throw a_char; } catch (proxy(int) *) { printf("caught proxy(int)\n"); } catch (proxy(char) *) { printf("caught proxy(char)\n"); } } forall(T) exception cell { T data; }; vtable(cell(int)) int_cell; vtable(cell(char)) char_cell; vtable(cell(bool)) bool_cell; void cell_test(void) { try { cell(int) except = {&int_cell, -7}; throw except; } catch (cell(int) * error) { printf("%d\n", error->data); } try { cell(bool) ball = {&bool_cell, false}; throwResume ball; printf("%i\n", ball.data); } catchResume (cell(bool) * error) { printf("%i\n", error->data); error->data = true; } } int main(int argc, char * argv[]) { proxy_test(); printf("\n"); cell_test(); }