]> granicus.if.org Git - clang/commitdiff
[modules] Support merging a parsed default argument with an imported hidden one for...
authorRichard Smith <richard-llvm@metafoo.co.uk>
Wed, 20 May 2015 18:24:21 +0000 (18:24 +0000)
committerRichard Smith <richard-llvm@metafoo.co.uk>
Wed, 20 May 2015 18:24:21 +0000 (18:24 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@237815 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Sema/SemaTemplate.cpp
test/Modules/Inputs/submodules-merge-defs/defs.h

index 9546d38fc32a3cb1ebe0e2cb20e0a4822456074e..b5d04cf1a120ed09b5e8ae21464bdf4dffbebfb7 100644 (file)
@@ -1358,6 +1358,8 @@ bool Sema::CheckTemplateParameterList(TemplateParameterList *NewParams,
       // Merge default arguments for non-type template parameters
       NonTypeTemplateParmDecl *OldNonTypeParm
         = OldParams? cast<NonTypeTemplateParmDecl>(*OldParam) : nullptr;
+      if (OldNonTypeParm && !LookupResult::isVisible(*this, OldNonTypeParm))
+        OldNonTypeParm = nullptr;
       if (NewNonTypeParm->isParameterPack()) {
         assert(!NewNonTypeParm->hasDefaultArgument() &&
                "Parameter packs can't have a default argument!");
@@ -1405,6 +1407,8 @@ bool Sema::CheckTemplateParameterList(TemplateParameterList *NewParams,
       // Merge default arguments for template template parameters
       TemplateTemplateParmDecl *OldTemplateParm
         = OldParams? cast<TemplateTemplateParmDecl>(*OldParam) : nullptr;
+      if (OldTemplateParm && !LookupResult::isVisible(*this, OldTemplateParm))
+        OldTemplateParm = nullptr;
       if (NewTemplateParm->isParameterPack()) {
         assert(!NewTemplateParm->hasDefaultArgument() &&
                "Parameter packs can't have a default argument!");
index 2ec56027ad8fcf53cac75a49979e7b16b5b13334..68b57a4a62fe86aaa7f3ece1bc582069dac2894f 100644 (file)
@@ -44,4 +44,5 @@ namespace G {
   typedef enum {} l;
 }
 
-template<typename T = int> int H(int a = 1);
+template<typename T = int, int N = 3, template<typename> class K = F> int H(int a = 1);
+template<typename T = int, int N = 3, template<typename> class K = F> using I = decltype(H<T, N, K>());