#pragma once 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, stack(T) t ); forall(otype T) stack(T) ?=?( stack(T) & s, stack(T) t ); 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 ); forall(otype T) void clear( stack(T) & s );