value perform(T &x) { return base.perform(&x); }
T &perform(value const &x) { return *base.perform(x); }
T *perform(value const &v) { return &dynamic_cast<T&>(*base.perform(v)); }