Hi,

On 07/14/2014 09:47 PM, Jason Merrill wrote:
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:

Thanks. This helps me a lot. In particular I see now, in tsubst_arg_types:

    /* Do array-to-pointer, function-to-pointer conversion, and ignore
       top-level qualifiers as required.  */
    type = cv_unqualified (type_decays_to (type));

which is exactly the ingredient we are missing. A rough draft already appears to work on the testcase, now I have only to figure out what happens of the various switches over unification_kind_t and adjust the other details (also, comments).

Thanks again,
Paolo.

Reply via email to