Que tipo de código morto o GCC pode eliminar da saída final?
Sempre me disseram que o compilador é inteligente o suficiente para eliminar o código morto. Grande parte do código que estou escrevendo tem muitas informações conhecidas em tempo de compilação, mas o código precisa ser escrito da forma mais genérica. Não conheço nenhum assembly, portanto não posso examinar o assembly gerado. Que tipo de código pode ser efetivamente eliminado no executável final?
Alguns exemplos, mas não 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>();
///////////////////////////
E se a definição def
está em outro código objetivo e o chamadof(true)
está no principal. Vinculará a otimização de tempo efetivamente eliminar o código morto? Qual é o estilo de codificação / opção de compilador / truque para facilitar a eliminação de código morto?