Consider a function to format the parameters of a function call:

pure nothrow string fmtArgs(ARGS...)(ARGS args)
{
   string result;

   // 1)
   foreach(a; args) {
      result ~= a.to!string;
   }

   // 2)
   args.each!(a => result ~= a.to!string);

   return result;
}

In my mind, if something works with foreach, it should also work with std.algorithm.each. However if I try something like 2) the compiler complains with error: cannot deduce function from argument types !()(uint, int)...

Technically I'd like to transform args into a range/array of strings but I'm not smart enough to understand the error messages these functions in std.algorithms produce.

How is 1) different from 2) ?

Reply via email to