summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaTemplateDeduction.cpp
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2010-04-29 06:31:36 +0000
committerDouglas Gregor <dgregor@apple.com>2010-04-29 06:31:36 +0000
commit9225b02096c62b9646cb47ed17aebab3a20f8e9f (patch)
tree71efab3e13164e83d4167a5f7f71bc6a3804945a /clang/lib/Sema/SemaTemplateDeduction.cpp
parent684268daabea832f4a48a68f0b20b160fee1ee1d (diff)
downloadbcm5719-llvm-9225b02096c62b9646cb47ed17aebab3a20f8e9f.tar.gz
bcm5719-llvm-9225b02096c62b9646cb47ed17aebab3a20f8e9f.zip
When performing partial ordering of class template partial
specializations, substitute the deduced template arguments and check the resulting substitution before concluding that template argument deduction succeeds. This marvelous little fix makes a bunch of Boost.Spirit tests start working. llvm-svn: 102601
Diffstat (limited to 'clang/lib/Sema/SemaTemplateDeduction.cpp')
-rw-r--r--clang/lib/Sema/SemaTemplateDeduction.cpp10
1 files changed, 9 insertions, 1 deletions
diff --git a/clang/lib/Sema/SemaTemplateDeduction.cpp b/clang/lib/Sema/SemaTemplateDeduction.cpp
index 031209235c7..2bb97eba11c 100644
--- a/clang/lib/Sema/SemaTemplateDeduction.cpp
+++ b/clang/lib/Sema/SemaTemplateDeduction.cpp
@@ -2384,7 +2384,11 @@ Sema::getMoreSpecializedPartialSpecialization(
Info,
Deduced,
0);
-
+ if (Better1)
+ Better1 = !::FinishTemplateArgumentDeduction(*this, PS2,
+ PS1->getTemplateArgs(),
+ Deduced, Info);
+
// Determine whether PS2 is at least as specialized as PS1
Deduced.clear();
Deduced.resize(PS1->getTemplateParameters()->size());
@@ -2395,6 +2399,10 @@ Sema::getMoreSpecializedPartialSpecialization(
Info,
Deduced,
0);
+ if (Better2)
+ Better2 = !::FinishTemplateArgumentDeduction(*this, PS1,
+ PS2->getTemplateArgs(),
+ Deduced, Info);
if (Better1 == Better2)
return 0;
OpenPOWER on IntegriCloud