why would it allocate ? creating objects does not trigger allocations most of the time. The only stack space used is the internal state of the functor used, which is a lot of time empty (and won't even exist anymore by the time the compiler has optimized your code).
Now I know that there's a stack allocation for the functor. Not all platforms have Sufficiently Smart Compilers; I've got code relying on SDCC and TCC, for instance. :)
That's what I'm getting at, there's this whole new suite of functionality that is sort of opaque to me, whereas I'm used to having a grasp of what's going on at-a-glance when working with C and C++98. I'll just have to spend a weekend working with it.
> Not all platforms have Sufficiently Smart Compilers; I've got code relying on SDCC and TCC, for instance. :)
I'm pretty sure that it's not a matter of compiler brightness; the C and C++ standards are both pretty explicit about when the automatic and dynamic storages are used. If anything, I guess that it would be harder for compilers to allocate such things on the heap.
I checked and tcc doesn't allocate anything for instance for this code; neither does gcc 4.4 in c++98 mode :
int main()
{
struct foo {
int a, b, c;
char x[3000];
} f;
}
eg. look here: https://godbolt.org/g/AdLAi1 there's not a single new / malloc / whatever