¿Por qué la inicialización de lista directa con auto se considera mala o no preferida?

He adquirido el hábito de escribir código con inicialización de lista directa como se muestra a continuación, ya que es más efectivo y es muy útil para evitarestrechamiento:

int i {0};
string s {""};
char c {'a'};
bool b {false};

auto num {100}; // But this??

Pero cuando se trata del especificador automático, he oído que se considera malo o no se prefiere escribirlo así, ¿por qué?