Implement partial ordering of function template specializations 
(C++ [temp.func.order]). 



git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@81777 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Sema/SemaOverload.cpp b/lib/Sema/SemaOverload.cpp
index 7742680..5f9a963 100644
--- a/lib/Sema/SemaOverload.cpp
+++ b/lib/Sema/SemaOverload.cpp
@@ -3708,7 +3708,7 @@
     if (FunctionTemplateDecl *BetterTemplate
           = getMoreSpecializedTemplate(Cand1.Function->getPrimaryTemplate(),
                                        Cand2.Function->getPrimaryTemplate(),
-                                       true))
+                                       TPOC_Call))
       return BetterTemplate == Cand1.Function->getPrimaryTemplate();
 
   //   -- the context is an initialization by user-defined conversion
@@ -4029,7 +4029,7 @@
     for (++M; M != MEnd; ++M)
       if (getMoreSpecializedTemplate((*M)->getPrimaryTemplate(),
                                      (*Best)->getPrimaryTemplate(),
-                                     false)
+                                     TPOC_Other)
             == (*M)->getPrimaryTemplate())
         Best = M;
 
@@ -4040,7 +4040,7 @@
       if (M != Best &&
           getMoreSpecializedTemplate((*M)->getPrimaryTemplate(),
                                      (*Best)->getPrimaryTemplate(),
-                                     false)
+                                     TPOC_Other)
            != (*Best)->getPrimaryTemplate()) {
         Ambiguous = true;
         break;