summaryrefslogtreecommitdiffstats
path: root/clang/test/SemaTemplate/deduction.cpp
diff options
context:
space:
mode:
authorRichard Smith <richard-llvm@metafoo.co.uk>2017-02-21 06:30:38 +0000
committerRichard Smith <richard-llvm@metafoo.co.uk>2017-02-21 06:30:38 +0000
commitb4f9625a7bd5601534952b478040e6836e37eb47 (patch)
tree4cfa08c4839e2e7be37102ccd5797a78beb1f18e /clang/test/SemaTemplate/deduction.cpp
parent16d9730b8673741e4b2b18caa087f71c2318be98 (diff)
downloadbcm5719-llvm-b4f9625a7bd5601534952b478040e6836e37eb47.tar.gz
bcm5719-llvm-b4f9625a7bd5601534952b478040e6836e37eb47.zip
PR32010: Fix template argument depth mixup when forming implicit constructor
template deduction guides for class template argument deduction. Ensure that we have a local instantiation scope for tracking the instantiated parameters. Additionally, unusually, we're substituting at depth 1 and leaving depth 0 alone; make sure that we don't reduce template parameter depth by 2 for inner parameters in the process. (This is probably also broken for alias templates in the case where they're expanded within a dependent context, but this patch doesn't fix that.) llvm-svn: 295696
Diffstat (limited to 'clang/test/SemaTemplate/deduction.cpp')
-rw-r--r--clang/test/SemaTemplate/deduction.cpp13
1 files changed, 13 insertions, 0 deletions
diff --git a/clang/test/SemaTemplate/deduction.cpp b/clang/test/SemaTemplate/deduction.cpp
index 16e01a93463..a1180f09887 100644
--- a/clang/test/SemaTemplate/deduction.cpp
+++ b/clang/test/SemaTemplate/deduction.cpp
@@ -481,3 +481,16 @@ namespace check_extended_pack {
int n;
void h() { g<0>(Y<0, &n>()); } // expected-error {{no matching function}}
}
+
+namespace dependent_template_template_param_non_type_param_type {
+ template<int N> struct A { // expected-note 2{{candidate}}
+ template<typename V = int, V M = 12, V (*Y)[M], template<V (*v)[M]> class W>
+ A(W<Y>); // expected-note {{[with V = int, M = 12, Y = &dependent_template_template_param_non_type_param_type::n]}}
+ };
+
+ int n[12];
+ template<int (*)[12]> struct Q {};
+ Q<&n> qn;
+ // FIXME: This should be accepted, but we somehow fail to deduce W.
+ A<0> a(qn); // expected-error {{no matching constructor for initialization}}
+}
OpenPOWER on IntegriCloud