LLVM has it's own hand rolled alternative to RTTI that is a speed improvement over built-in RTTI and allows dynamic casting to classes with no vtable (`dyn_cast`). However, it can still be used in exactly the way that `dynamic_cast<>` is used though it does allow it to be used with more classes.

[`dyn_cast<>` template documentation](http://llvm.org/docs/ProgrammersManual.html#isa)

LLVM is a reputable C++ project so this seems to fly in the face of the common saying that too many dynamic casts is a sign of bad design, also known as a code smell. Surely a better performing dynamic cast does nothing to improve its use in design than a standard `dynamic_cast`. So who is right here? Are there cases where large-scale use of dynamic casting is a good design choice in C++ code? Google turns up 690 occurrences of this kind of dynamic casting in the LLVM trunk source code.

[Uses of `dyn_cast<>` in LLVM trunk](http://www.google.com/codesearch?hl=en&lr=&q=dyn_cast+package%3Allvm-project%2Fllvm%2Ftrunk&sbtn=Search)