§12.2 / 5:
«Временная граница с опорным параметром в вызове функции (5.2.2) сохраняется до завершения полного выражения, содержащего вызов.»
Это означает, что при инициализации i
он получает адрес временного объекта, который существует в этой точке. Однако, как только i
инициализируется, временный объект будет уничтожен, а i
станет просто еще одним висящим указателем.
Как таковая, да, функция действительна - но с окружающим кодом, в котором вы ее написали, любой код, который вы добавили впоследствии и попытался разыменовать i
, дал бы неопределенное поведение.