Deduction regression or improvement?

Johan Engelen via Digitalmars-d digitalmars-d at puremagic.com
Tue Mar 8 15:31:54 PST 2016


On Tuesday, 8 March 2016 at 22:35:57 UTC, H. S. Teoh wrote:
> On Tue, Mar 08, 2016 at 09:22:35PM +0000, Johan Engelen via 
> Digitalmars-d wrote:
>> Hi all,
>>   Should the following compile or not?
>> 
>> auto foo(T)(T start, T end) {}
>> void main() {
>>     const SomeStruct a;
>>     SomeStruct b;
>>     foo(a,b);
>> }
>> See http://dpaste.dzfl.pl/15581af64747
>> 
>> DMD 2.068.2 compiles and does not complain.
>> DMD 2.069.2 gives deduction error: "cannot deduce function 
>> from argument
>> types !()(const(SomeStruct), SomeStruct),   candidates are:  
>> foo(T)(T start,
>> T end)"
>> 
>> Is this a regression or intended?  I did not find something 
>> about it in the release notes.
> [...]
>
> IMO, this *should* compile and infer T == const(SomeStruct) as 
> the common type of a and b.  But I'm not sure whether or not 
> this is a regression.

What was surprising to me is that 2.068.2 deduces T = SomeStruct. 
But
SomeStruct c = a;
works fine, i.e. copying const(SomeStruct) to a SomeStruct is 
fine. Argument passing a struct is just copying, so should be 
fine to deduce T=SomeStruct?

( it may help to play a little with the linked code at 
dpaste.dzfl.pl )


More information about the Digitalmars-d mailing list