и val, и foo() не имеет побочных эффектов? То есть, например val было посчитано заранее, а foo() это функция, которая в дебаге осуществляет вывод, а в релизе имеет пустое тело.
Может удалит, может нет
foo какую линковку имеет?
Статическую
Вот это кстати очень грамотное замечание, респект.
Подскажите что такое статическая линковка, пожалуйста
пустые функции с внутренней линковкой компиляторы спокойно выпиливают, если нет каких то спец. использований типа взятия адреса функции
А само условие тоже выпилится или останется пустым?
Не знаю, но логично и проверку убирать
> val посчитано заранее Если это в одной единице трансляции, или с lto, то придет redundant code elimination и скажет, а че мы это always true/false проверяем? И выпилит if. Пустую функцию, если от неё не берется адресс, и она не нужна - заинлайнит.
Без попадания в словарь внешних ссылок, inline в общем
Обсуждают сегодня