Function templates do implicit conversions for their arguments

Maxim Fomin maxim at maxim-fomin.ru
Thu Jul 4 13:43:43 PDT 2013


On Thursday, 4 July 2013 at 20:11:56 UTC, TommiT wrote:
>
> I have never seen any DMD code. My deduction of how DMD _must_ 
> work is based on:
> 1) my understanding of how template instantiation works in C++
> 2) the fact that the call to foo(sa) does compile

And this is a problem, because many of such naive judgemnets are 
actually false.

> The compiler simply must know about implicit conversion of 
> static to dynamic arrays during template instantiation, or 
> otherwise it wouldn't be able to do the instantiation of foo 
> for the call to foo(sa).

Implementation may do other way, at first instantiate template 
(with deduced type) and then try to plug arguments as in case of 
non-template function (including implicit conversion). If it 
cannot, implementation issues error message for a particular 
problem and then general "template error instantiation".

>  And not only that, the compiler must accept a non-exact match 
> between parameter and argument types. C++ never accepts 
> anything but an exact match between the parameter types of the 
> instantiated template function and the types of the arguments 
> passed in to the function at the call site which caused the 
> instantiation. That's pretty simple logic, which is why I'm 
> confident that I'm right even though, like I said, I don't know 
> anything about how DMD is written.

D forums are not the right place to show confidence in C++ 
knowledge. What are your points regarding type deduction and 
implicit conversion in D?


More information about the Digitalmars-d mailing list