As Alexander pointed out, LLVM Coding Standards are more conservative about using auto, i.e. it should be used in the following situations:
- When the type is obvious, i.e. explicitly mentioned in the same expression. For example if (const clang::FieldDecl *FieldDecl = Initializer->getMember()).
- When the type is totally non-obvious and one iterates over something. For example for (const auto &CurrDecl : Context.getTranslationUnitDecl()->decls()).
Otherwise the type should be explicitly stated.