#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 );