forall(otype T) struct stack_node; forall(otype T) struct stack { stack_node(T)* head; }; forall(otype T) void ?{}(stack(T)* s); forall(otype T) void ^?{}(stack(T)* s); forall(otype T) _Bool empty(const stack(T)* s); forall(otype T) void push(stack(T)* s, T value); forall(otype T) T pop(stack(T)* s);