template type deduction of static 2d arrays

ketmar via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Fri Oct 24 16:19:52 PDT 2014


On Fri, 24 Oct 2014 22:32:57 +0000
uri via Digitalmars-d-learn <digitalmars-d-learn at puremagic.com> 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'.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 181 bytes
Desc: not available
URL: <http://lists.puremagic.com/pipermail/digitalmars-d-learn/attachments/20141025/184ff15e/attachment.sig>


More information about the Digitalmars-d-learn mailing list