Вот в таком случае:
есть какой-то структурный тип MType
и функция:
static MType *f(MType *val, int size){
MType tmp;
if (val)
tmp = *val;
else
// do smth to create new
;
// .....
return &tmp;
}
а используется функция только с помощью макрообёртки
#define f_construct(val, size) *f( (val), (size) )
т.е. вроде как несмотря на то, что формально tmp и её адреса после выхода из f не существует, реально стек ещё никто не успел (?) испортить и содержимое верное.
Хотелось бы узнать у господ знатоков, насколько корректно подобное допущение.