https://issues.dlang.org/show_bug.cgi?id=9110
Steven Schveighoffer <schvei...@yahoo.com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |schvei...@yahoo.com Hardware|x86_64 |All Summary|Escaping reference error |Lazy variadic array error |from lazy variadic |message is confusing |parameters | OS|Linux |All --- Comment #3 from Steven Schveighoffer <schvei...@yahoo.com> --- This bug is invalid. What is happening is this: 1. Because the parameter is a typesafe variadic, the compiler pushes all the data onto the stack. 2. Because the parameter is lazy, instead of passing the data to the function, it creates a delegate to return the typesafe array. In actuality, the data is created inside the delegate. The constructed delegate is the one being flagged for returning a reference to the stack. If you imagine, the delegate looks like this: int[] implicitDelegate() { int[N] arr = [args_to_foo]; return arr[]; // this is the line that is causing the failure. } The correct way to do lazy variadic functions is this: int foo(int delegate()[] dgs...) I'm not going to close this, however. I'm going to repurpose it to change the error message. There is no possible way that the OP's code will or should compile. But the error message is very bad. I'd like to see it say something like: "lazy variadic array parameters are not allowed. Please use a variadic array of delegates". --