Only for `visit(Type*)` and `visit(Dsymbol*)`?

Other overloads of visit follow class hierarchy of types and dsymbols.
It allow you to override only required overloads of `visit`.
eg: You want to print all types consisting visited type.

You cat write that:
```
class TypePrinter: public class Visitor
{
   void visit(RootObject*){assert(0);}
   void visit(Type* t){printf("%s\n" t->toChars());}
   void visit(TypeNext* t){printf("%s\n" t->toChars()); t->nextOf()->acceptVisitor(this); }
   void visit(TypeAArray* t){printf("%s\n" t->toChars()); t->value->acceptVisitor(this); t->key>acceptVisitor(this);}
   void visit(TypeFunction* t){printf("%s\n" t->toChars()); t->nextOf()->acceptVisitor(this); /*cycle for each parameters of t*/}
};
``` 

And you don't need to override all kinds of `TypeNext`: `TypePointer`, `TypeArray`, `TypeSArray`, `TypeDArray`, `TypeReference` et. c.