diff options
author | Anders Carlsson <andersca@mac.com> | 2009-06-08 19:22:23 +0000 |
---|---|---|
committer | Anders Carlsson <andersca@mac.com> | 2009-06-08 19:22:23 +0000 |
commit | 096e6eeb6800163edaefd15cd2763d29f9c14c2e (patch) | |
tree | 53a4a84b697d59faebdceb762f8144672b83cf63 | |
parent | b035445537d357a8a94e249c40dadb4db17fa39d (diff) | |
download | bcm5719-llvm-096e6eeb6800163edaefd15cd2763d29f9c14c2e.tar.gz bcm5719-llvm-096e6eeb6800163edaefd15cd2763d29f9c14c2e.zip |
Address comments from Doug.
llvm-svn: 73077
-rw-r--r-- | clang/lib/Sema/SemaTemplateDeduction.cpp | 13 | ||||
-rw-r--r-- | clang/test/SemaTemplate/temp_class_spec.cpp | 2 |
2 files changed, 12 insertions, 3 deletions
diff --git a/clang/lib/Sema/SemaTemplateDeduction.cpp b/clang/lib/Sema/SemaTemplateDeduction.cpp index fe779ebd80d..1789ba78568 100644 --- a/clang/lib/Sema/SemaTemplateDeduction.cpp +++ b/clang/lib/Sema/SemaTemplateDeduction.cpp @@ -276,7 +276,17 @@ static bool DeduceTemplateArguments(ASTContext &Context, QualType Param, const FunctionProtoType *FunctionProtoParam = cast<FunctionProtoType>(Param); + + if (FunctionProtoParam->getTypeQuals() != + FunctionProtoArg->getTypeQuals()) + return false; + + if (FunctionProtoParam->getNumArgs() != FunctionProtoArg->getNumArgs()) + return false; + if (FunctionProtoParam->isVariadic() != FunctionProtoArg->isVariadic()) + return false; + // Check return types. if (!DeduceTemplateArguments(Context, FunctionProtoParam->getResultType(), @@ -284,9 +294,6 @@ static bool DeduceTemplateArguments(ASTContext &Context, QualType Param, Deduced)) return false; - if (FunctionProtoParam->getNumArgs() != FunctionProtoArg->getNumArgs()) - return false; - for (unsigned I = 0, N = FunctionProtoParam->getNumArgs(); I != N; ++I) { // Check argument types. if (!DeduceTemplateArguments(Context, diff --git a/clang/test/SemaTemplate/temp_class_spec.cpp b/clang/test/SemaTemplate/temp_class_spec.cpp index 8376ae3bd71..e17691cf628 100644 --- a/clang/test/SemaTemplate/temp_class_spec.cpp +++ b/clang/test/SemaTemplate/temp_class_spec.cpp @@ -134,6 +134,8 @@ int is_unary_function6[is_unary_function_with_same_return_type_as_argument_type< int is_unary_function7[is_unary_function_with_same_return_type_as_argument_type<int (*)(int, bool)>::value ? -1 : 1]; int is_unary_function8[is_unary_function_with_same_return_type_as_argument_type<int (*)(bool)>::value ? -1 : 1]; int is_unary_function9[is_unary_function_with_same_return_type_as_argument_type<int (*)(int)>::value ? 1 : -1]; +int is_unary_function10[is_unary_function_with_same_return_type_as_argument_type<int (*)(int, ...)>::value ? -1 : 1]; +int is_unary_function11[is_unary_function_with_same_return_type_as_argument_type<int (* const)(int)>::value ? -1 : 1]; template<typename T> struct is_binary_function { |