On Mar 20, 2018, Jason Merrill <ja...@redhat.com> wrote:

> On Sat, Mar 17, 2018 at 8:13 AM, Alexandre Oliva <aol...@redhat.com> wrote:
>> As we go through each of the template parameters, substituting it with
>> corresponding template arguments, an incorrect argument list might
>> cause us to index argument vectors past their length (or fail in the
>> preceding tree checks).  Avoid such dereferences and instead issue an
>> error (if requested) if we find the argument index to be past the
>> parameter vector length.

> Any time we hit this abort, it indicates a bug in earlier processing,
> so that we're looking up a template parameter in an argument list for
> a different template.

That doesn't seem to be the case here.  The argument list given for U is
<T>, as in the testcase, the problem is that U is misdeclared as taking
<int,int> <typename> (two template levels for a single template).

Should we aim at rejecting the declaration of U?

template<int,int> template<typename> using U=void;
template<typename,typename> struct S1;
template<typename T> struct S1<T,U<T>>{ template<typename> struct S2:S2<T>{}; };

-- 
Alexandre Oliva, freedom fighter    http://FSFLA.org/~lxoliva/
You must be the change you wish to see in the world. -- Gandhi
Be Free! -- http://FSFLA.org/   FSF Latin America board member
Free Software Evangelist|Red Hat Brasil GNU Toolchain Engineer

Reply via email to