On Fri, 24 Oct 2014 22:32:57 +0000 uri via Digitalmars-d-learn <[email protected]> wrote:
> Hi All,
>
> I was wondering why in the code below f1() works but f2 template
> version called in the same manner does not. Is there a good
> reason from a language/compiler perspective?
>
> Thanks.
> uri
>
>
> ---
> auto f1(int[2][2] m)
> {
> return m[0][0]*m[1][1]-m[0][1]*m[1][0];
> }
> auto f2(T)(T[2][2] m)
> {
> return m[0][0]*m[1][1]-m[0][1]*m[1][0];
> }
>
> void main()
> {
> auto res = f1( [[1,2],[3,4]]); // works
> assert(res == -2);
>
> res = f2([[1,2],[3,4]]); // deos not work
> }
>
> Calling f2() as done above gives the following error:
>
> Error: cannot deduce function from argument types !()(int[][]),
> candidates are:
> f2(T)(T[2][2] m)
by the way, this will work too:
int[2][2] v = [[1,2],[3,4]];
res = f2(v);
'cause 'v' has correct type, and initializing 'v' does 'magic casting'.
signature.asc
Description: PGP signature
