¿Qué tipo de código muerto puede eliminar GCC de la salida final?

Siempre me han dicho que el compilador es lo suficientemente inteligente como para eliminar el código muerto. Gran parte del código que estoy escribiendo tiene mucha información conocida en el momento de la compilación, pero el código debe escribirse en la forma más genérica. No conozco ningún conjunto, por lo que no puedo examinar el conjunto generado. ¿Qué tipo de código puede ser eliminado efectivamente en el ejecutable final?

Pocos ejemplos pero no limitados a

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>();
///////////////////////////

¿Qué pasa si la definición def Está en otro código objetivo y el llamadof(true) esta en principal ¿La optimización del tiempo de enlace eliminará efectivamente el código muerto? ¿Cuál es el estilo de codificación / opción de compilador / truco para facilitar la eliminación del código muerto?

Respuestas a la pregunta(3)

Su respuesta a la pregunta