Ни один из существующих ответов должным образом не обрабатывает параметры входа / выхода, не говоря уже о каких-либо дополнительных случаях использования.
Это должно работать во всех случаях, когда other_func
не сохраняет ссылку после ее возврата:
void test(int %tmp)
{
pin_ptr<int> pinned_tmp = &tmp;
other_func(*pinned_tmp);
}