Какой мертвый код может удалить GCC из окончательного результата?

Мне всегда говорили, что компилятор достаточно умен, чтобы устранить мертвый код. Большая часть кода, который я пишу, содержит много информации, известной во время компиляции, но код должен быть написан в наиболее общей форме. Я не знаю ни одной сборки, поэтому не могу просмотреть созданную сборку. Какой код может быть эффективно устранен в конечном исполняемом файле?

Несколько примеров, но не ограничиваясь

f(bool b){
 if(b){
  //some code
 }else{
  //some code
 }
}
f(true);
//////////////////////////
template<bool b>
f(){
 if(b){
  //some code
 }else{
  //some code
 }
}
f<true>();
///////////////////////////

Что делать, если определениеf находится в другом объективном коде и вызываемомf(true) в основном. Будет ли оптимизация времени ссылки эффективно устранять мертвый код? Что такое стиль / опция компиляции / трюк для облегчения удаления мертвого кода?

Ответы на вопрос(3)

Ваш ответ на вопрос