#pragma once forall( otype T ) { struct node; struct stack { node(T) * head; }; void ?{}( stack(T) & s, stack(T) t ); void clear( stack(T) & s ); void ?{}( stack(T) & s ); void ^?{}( stack(T) & s); stack(T) ?=?( stack(T) & s, stack(T) t ); _Bool empty( const stack(T) & s ); void push( stack(T) & s, T value ); T pop( stack(T) & s ); }