PR c++/84355 - ICE with deduction for member class template.
* pt.c (tsubst) [TEMPLATE_TYPE_PARM]: Always substitute into CLASS_PLACEHOLDER_TEMPLATE. From-SVN: r258451
This commit is contained in:
parent
a7fea88ffb
commit
d67b5d8d1d
3 changed files with 27 additions and 2 deletions
|
@ -1,5 +1,9 @@
|
|||
2018-03-12 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR c++/84355 - ICE with deduction for member class template.
|
||||
* pt.c (tsubst) [TEMPLATE_TYPE_PARM]: Always substitute into
|
||||
CLASS_PLACEHOLDER_TEMPLATE.
|
||||
|
||||
PR c++/84802 - ICE capturing uninstantiated class.
|
||||
* lambda.c (build_capture_proxy): Call complete_type.
|
||||
|
||||
|
|
|
@ -14125,8 +14125,7 @@ tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl)
|
|||
= tsubst_constraint (constr, args, complain, in_decl);
|
||||
else if (tree pl = CLASS_PLACEHOLDER_TEMPLATE (t))
|
||||
{
|
||||
if (DECL_TEMPLATE_TEMPLATE_PARM_P (pl))
|
||||
pl = tsubst (pl, args, complain, in_decl);
|
||||
pl = tsubst_copy (pl, args, complain, in_decl);
|
||||
CLASS_PLACEHOLDER_TEMPLATE (r) = pl;
|
||||
}
|
||||
}
|
||||
|
|
22
gcc/testsuite/g++.dg/cpp1z/class-deduction50.C
Normal file
22
gcc/testsuite/g++.dg/cpp1z/class-deduction50.C
Normal file
|
@ -0,0 +1,22 @@
|
|||
// PR c++/84355
|
||||
// { dg-additional-options -std=c++17 }
|
||||
|
||||
template <class, class> struct same;
|
||||
template <class T> struct same<T,T> {};
|
||||
|
||||
template<typename T> struct A
|
||||
{
|
||||
template<class U> struct B
|
||||
{
|
||||
B(U);
|
||||
};
|
||||
|
||||
A() {
|
||||
B b(0);
|
||||
same<decltype(b),B<int>>{};
|
||||
}
|
||||
};
|
||||
|
||||
struct C {};
|
||||
|
||||
A<C> a;
|
Loading…
Add table
Reference in a new issue