[PATCH] D65050: [SemaTemplate] Mark a function type as dependent when its parameter list contains pack expansion
S. B. Tam via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Fri May 22 02:25:43 PDT 2020
cpplearner updated this revision to Diff 265683.
cpplearner added a comment.
rebase & ping @rsmith
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D65050/new/
https://reviews.llvm.org/D65050
Files:
clang/lib/AST/Type.cpp
clang/test/SemaTemplate/alias-templates.cpp
Index: clang/test/SemaTemplate/alias-templates.cpp
===================================================================
--- clang/test/SemaTemplate/alias-templates.cpp
+++ clang/test/SemaTemplate/alias-templates.cpp
@@ -265,3 +265,34 @@
int z = Bar(); // expected-error {{use of template template parameter 'Bar' requires template arguments}}
}
}
+
+namespace PR42654 {
+ template<typename> struct function { };
+
+ template<typename...T>
+ struct thing {
+ void f(function<void(T...)>) { }
+ };
+
+ template<typename ...Ts>
+ struct Environment
+ {
+ template<typename T>
+ using Integer = int;
+
+ using Function = function<void(Integer<Ts>...)>;
+ using MyTuple = thing<Integer<Ts>...>;
+
+ void run(Function func)
+ {
+ MyTuple t;
+ t.f(func);
+ }
+ };
+
+ void f()
+ {
+ Environment<int, double> env;
+ env.run({});
+ }
+}
Index: clang/lib/AST/Type.cpp
===================================================================
--- clang/lib/AST/Type.cpp
+++ clang/lib/AST/Type.cpp
@@ -3110,6 +3110,11 @@
for (unsigned i = 0; i != getNumParams(); ++i) {
addDependence(params[i]->getDependence() &
~TypeDependence::VariablyModified);
+ // A pack expansion with a non-dependent pattern affects the number of
+ // parameters, thus we mark such function type as dependent, even though
+ // this isn't listed in N4861 [temp.dep.type].
+ if (params[i]->getAs<PackExpansionType>())
+ addDependence(TypeDependence::Dependent);
argSlot[i] = params[i];
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D65050.265683.patch
Type: text/x-patch
Size: 1556 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20200522/7b900f5b/attachment-0001.bin>
More information about the cfe-commits
mailing list