diff --git a/include/clang/AST/LexicallyOrderedRecursiveASTVisitor.h b/include/clang/AST/LexicallyOrderedRecursiveASTVisitor.h
index 7b8b72041314986572a7a6c4833574bd34de4675..264f20f19ad5b470220197f46c24ab1bb2864958 100644
--- a/include/clang/AST/LexicallyOrderedRecursiveASTVisitor.h
+++ b/include/clang/AST/LexicallyOrderedRecursiveASTVisitor.h
@@ -111,8 +111,6 @@ public:
     return true;
   }
 
-  bool shouldTraverseTemplateArgumentsBeforeDecl() const { return true; }
-
   Stmt::child_range getStmtChildren(Stmt *S) { return S->children(); }
 
   SmallVector<Stmt *, 8> getStmtChildren(CXXOperatorCallExpr *CE) {
diff --git a/include/clang/AST/RecursiveASTVisitor.h b/include/clang/AST/RecursiveASTVisitor.h
index d36579de5364bbaa42638654954a6ad5c86b4a8d..5baf23caa563229ebbdef588afeb57997fc8a1b1 100644
--- a/include/clang/AST/RecursiveASTVisitor.h
+++ b/include/clang/AST/RecursiveASTVisitor.h
@@ -537,7 +537,6 @@ private:
 
   bool dataTraverseNode(Stmt *S, DataRecursionQueue *Queue);
   bool PostVisitStmt(Stmt *S);
-  bool shouldTraverseTemplateArgumentsBeforeDecl() const { return false; }
 };
 
 template <typename Derived>
@@ -1691,13 +1690,8 @@ bool RecursiveASTVisitor<Derived>::TraverseTemplateInstantiations(
 // template declarations.
 #define DEF_TRAVERSE_TMPL_DECL(TMPLDECLKIND)                                   \
   DEF_TRAVERSE_DECL(TMPLDECLKIND##TemplateDecl, {                              \
-    if (getDerived().shouldTraverseTemplateArgumentsBeforeDecl()) {            \
-      TRY_TO(TraverseTemplateParameterListHelper(D->getTemplateParameters())); \
-      TRY_TO(TraverseDecl(D->getTemplatedDecl()));                             \
-    } else {                                                                   \
-      TRY_TO(TraverseDecl(D->getTemplatedDecl()));                             \
-      TRY_TO(TraverseTemplateParameterListHelper(D->getTemplateParameters())); \
-    }                                                                          \
+    TRY_TO(TraverseTemplateParameterListHelper(D->getTemplateParameters()));   \
+    TRY_TO(TraverseDecl(D->getTemplatedDecl()));                               \
                                                                                \
     /* By default, we do not traverse the instantiations of                    \
        class templates since they do not appear in the user code. The          \