template<typename T> ConsList<T> cons(T car, const ConsList<T>& cdr=ConsList<T>()) { return std::make_shared<ConsNode<T> > (car,cdr); }