This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
On 02/16/2018 07:04 AM, Jason Merrill wrote:
On Thu, Feb 15, 2018 at 6:36 PM, Martin Sebor <msebor@gmail.com> wrote:A failed template deduction in template member of a template triggers an ICE with -std=c++17 due to what seems like a missing handling of invalid input. Replacing the gcc_unreachable() call that causes the ICE with a return statement indicating the deduction failure eliminates the ICE and restores sane diagnostics.Hmm, we really shouldn't have gotten there; that assert is checking that when we see a TEMPLATE_*_PARM node in the template signature, it corresponds to one of the actual parms of the template. Sounds like something is going wrong in build_deduction_guide.
Are you suggesting that build_deduction_guide should fail somehow (it's not expected to fail right now) or that the guide it creates is wrong? It returns this for the test case in the bug (below): template<int I> B(A<T>::B<I>)-> A<T>::B<I> If I make B a template with a type argument it returns this: template<class U> B(A<T>::B<U>)-> A<T>::B<U> The test case is accepted then. Martin template<typename T> struct A { template<int> struct B { B(T); }; A() { B b(0); } }; A<int> a;
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |