Это даже не допустимый C ++. Некоторые компиляторы могут быть глупыми и принимать это, но они не должны этого делать. Вы не можете взять адрес временного.
Это ограничение приведено в разделе §5.3.1 стандарта C ++:
Результатом унарного оператора &
является указатель на его
операнд. Операндом должно быть lvalue или квалифицированный идентификатор .
Временные значения являются prvalues, поэтому они не могут получить свой адрес.
Теперь, если ваш компилятор примет это, указатель будет действителен во время выполнения вызова функции, , но только во время работы. Как только он возвращает временный объект, он уничтожается, поэтому любые указатели на него, которые все еще существуют (например, если функция сохранила его), являются недействительными.