On 5/19/16 6:17 PM, Walter Bright wrote:
On 5/19/2016 8:39 AM, Steven Schveighoffer wrote:
template(T) foo if (someConstraints)
{
struct Result
{
T t;
}
auto foo(T t)
{
return Result(t);
}
}
This solution works awesomely, actually. It even produces smaller code
than
moving the struct completely outside.
I'm going to use this mechanism in iopipe to get my voldemorts back :)
Consider using a 'static struct'. A non-static struct will include a
hidden member that points to the stack frame of foo(), i.e. "produces
smaller code".
Yes, I did use static in my actual code. In fact, I found a bug because
of this (one of my voldemort functions was allocating a closure because
I had thought I was using a member but was actually using a function
parameter).
But this doesn't fix the symbol size problem. The other mechanism does.
-Steve