﻿id	summary	reporter	owner	description	type	status	priority	component	version	resolution	keywords	cc
218	Distributed Qualifiers Change Signature	ajbeach		"Using distributed forall qualifiers (the others seem to be fine) can change how a function is resolved and how a name is mangled.

So they most obvious example we have currently is this one:

{{{
forall( otype T ) {
    forall( | { T ?+?( T, T ); } ) {
        forall( | { T ?-?( T, T ); } ) {
            T fred( T t );
        }
    }
}

forall( otype T ) {
    forall( | { T ?-?( T, T ); } ) {
        forall( | { T ?+?( T, T ); } ) {
            T fred( T t ) { return t + t - t; }
        }
    }
}

int main() {
    int i = fred( 3 );
}
}}}

Although this should be one function, forward declared and fully defined, the resolver sees it as two almost identical functions and they are ambiguous. So we get a resolution error.

The one that lead me onto this error is actually much quieter add may be a different problem (further investigation is required).
{{{
forall(dtype T)
struct unique_ptr {
    T * data;
};

forall(dtype T) {
    forall( | { void ^?{}(T &); })
    void move(unique_ptr(T) & this, unique_ptr(T) & that);
}

forall(dtype T | { void ^?{}(T &); })
void move(unique_ptr(T) & this, unique_ptr(T) & that) {
    // ...
}
}}}

This is from the `memory.hfa`/`cfa` module in the standard library. Anyways the resolver doesn't seem to notice any difference between these two. Instead it gets all the way through resolution and the difference only shows up during name mangling where the names come out slightly differently.

`_X4moveQ2_0_0_1__X11_destructorFv_BD0__Fv_S10unique_ptr_BD0_S10unique_ptr_BD0___1`

`_X4moveQ1_0_0_1__X11_destructorFv_BD0__Fv_S10unique_ptr_BD0_S10unique_ptr_BD0___1`

If they are in the same file the call seems to pick the one with a body and everything is fine. If the forward declaration is in a header and the full declaration is in a code file then building will fail on linking."	defect	new	major	cfa-cc	1.0			
