[Issue 1528] [tdpl] overloading template and non-template functions

d-bugmail at puremagic.com d-bugmail at puremagic.com
Wed Feb 27 04:39:14 PST 2013


http://d.puremagic.com/issues/show_bug.cgi?id=1528


monarchdodra at gmail.com changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |monarchdodra at gmail.com


--- Comment #14 from monarchdodra at gmail.com 2013-02-27 04:39:08 PST ---
(In reply to comment #13)
> I have implemented it in accordance with TDPL, and the following behaviour
> results:
> 
> // vs deduced parameter + template constraint (2)
> int f6(int a) { return 1; }
> int f6(T)(T b) if (is(T : int)) { return 2; }
> 
> void main(){
>     static assert(f6(1)==1);
>     static assert(f6(1L)==1);
> }

How does that work though, because here, you statically know that 1L will fit
in your int. But what about:

static assert(f6(1L) == 1);
static assert(f6(ulong.max) == 2); // (a) ???

ulong ul = runtime();
static assert(f6(ul) == 2);        // (b) ???

How would these resolve?

I am not really comfortable with the fact that a call can statically resolve to
two different functions depending on the static information of the *value* of a
parameter:

int f7(ubyte a) { return 1; }
int f7(T)(T b) if (is(T : int)) { return 2; }

void main(){
    static assert(f6(200u)==1); //Calls first
    static assert(f6(400u)==2); //Calls second (!?)

    //Run-time variable with TDPL-like range knowledge
    uint a = 400;
    static assert(f6(a) == 2); //Calls second  ?
    a = 200;
    static assert(f6(a) == 1); //But now calls first !?
}

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------


More information about the Digitalmars-d-bugs mailing list