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]

Re: [C++ Patch/RFC] PR 60608


On 07/14/2014 12:20 PM, Paolo Carlini wrote:
I have been looking a bit into this bug, using a reduced testcase which
simplifies the debugging quite a bit for me (a non-variadic variant is
ok). I cannot say to already understand all the details of the issue,
but something which strikes me as interesting, is that the DEDUCE_CALL
passed down by add_candidate gets lost and we end up calling
type_unification_real from unify with DEDUCE_EXACT. If I change it to an
unconditional DEDUCE_CALL, the testcase is accepted and the testsuite
passes with no regressions. Is that all there is to the issue?!?

Unfortunately, that goes too far. I think we want a new DEDUCE_PARMS that is like DEDUCE_EXACT but does the same transformations as tsubst_arg_types in this part of unify_pack_expansion:

      /* If we had explicit template arguments, substitute them into the
         pattern before deduction.  */
      if (any_explicit)
        {
          /* Some arguments might still be unspecified or dependent.  */
          bool dependent;
          ++processing_template_decl;
          dependent = any_dependent_template_arguments_p (targs);
          if (!dependent)
            --processing_template_decl;
          parm = tsubst (pattern, targs,
                         explain_p ? tf_warning_or_error : tf_none,
                         NULL_TREE);
          if (dependent)
            --processing_template_decl;
          if (parm == error_mark_node)
            return 1;
        }

Jason


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]