On Wednesday, 9 March 2016 at 01:27:41 UTC, Dicebot wrote:

Looks like regression to me.

If SomeStruct contains indirections, it should be able to deduce T as
const(SomeStruct).

It SomeStruct is strict value type, deducing T as both SomeStruct and const(SomeStruct) would be fine.

But the behavior with 2.068 was bug-prone.

struct S
{
    int value;
}

auto foo(T)(T start, T end)
{
    pragma(msg, "In foo, T = ", T);
}

void main()
{
    const S cs;
    S ms;

    foo(cs, ms);    // [a] NG with 2.069.2, but T == S with 2.068!
foo(ms, cs); // [b] NG with 2.069.2, but T == const(S) with 2.068!!
}

The both cases are disabled in the bugfix PR:
https://github.com/D-Programming-Language/dmd/pull/4818

I think that T should be deduced to the typeof(true ? cs : ms) at line [a] and typeof(true ? ms : cs) at line [b], then the two lines will get consistent deduction result T == const(S).

Kenji Hara

Reply via email to