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