On Friday, 5 February 2016 at 07:04:27 UTC, cy wrote:
Mind if I elaborate on this a bit? If that is unrolled, I understand it will unroll into several calls to write, as in print("1","2","3") => write("1"," ");write("2"," ");write("3","\n");
Up to here, yes.
And presumably, write() unrolls its arguments too. Each string argument to write() unrolls to a put(). And put("abc") unrolls into put("a");put("b");put("c"), each of which that call the C routine fwrite with a length 1.
No, (explicit) unrolling with foreach could only happen if there's either a variadic argument list, or if "abc" were a template argument. (In the latter case you'd need more than a simple foreach.) Of course, I don't know whether put() call fwrite() for every single character (these are written with single quotes, btw), but that wouldn't be unrolling strictu sensu.