В предупреждении не указано, что это UB;это просто говорит о том, что контекст использования, а именно sizeof
, не будет вызывать побочные эффекты (которые в случае new
выделяют память).
[expr.sizeof] Оператор sizeof возвращает количество байтов, занятых непересекающимся объектом типа его операнда.Операндом является либо выражение, являющееся неоцененным операндом ([expr.prop]), либо идентификатор типа в скобках.
Стандарт также помогает объяснить, что это означает:
[expr.context] (...) Неоцененный операнд не оценивается.
Это хороший, хотя и странный способ написать sizeof(int*)
.