I am curious about the answer myself but there is the workaround of passing the overload through a lambda:

import std.traits;

int foo(long)
{
    return 0;
}

short foo(byte)
{
    return 0;
}

void main()
{
static assert(is (ReturnType!(() => foo(long.init)) == int)); static assert(is (ReturnType!(() => foo(byte.init)) == short));
}

Ali

Why not just use templates?

int foo(size_t id)() if(id == 0){
        return 0;
}

short foo(size_t id)() if(id == 1){
        return 0;
}

static assert(is(typeof(foo!0()) == int));
static assert(is(typeof(foo!1()) == short));

Reply via email to