¿Por qué la inicialización de la lista de C ++ también tiene en cuenta los constructores regulares?

En C ++ cuando se usa la sintaxis initializer_list para inicializar un objeto, los constructores regulares del objeto también participan en la resolución de sobrecarga, cuando no se aplica ninguna otra regla de inicialización de lista. Por lo que yo entiendo, el siguiente código llama a X :: X (int)

class X { int a_; X(int a):a_(a) {} );

void foo() {
   X bar{3};
}

Pero no entiendo por qué los constructores regulares también se consideran en el contexto de initializer_lists. Siento que muchos programadores ahora escriben X {3} para llamar a un constructor en lugar de X (3) para llamar al constructor. Este estilo no me gusta en absoluto, ya que me hace pensar que el objeto no tiene un constructor regular.

¿Cuál es la razón por la cual la sintaxis initializer_list también se puede usar para llamar al constructor regular? ¿Hay alguna razón para preferir ahora esta sintaxis sobre las llamadas regulares de constructor?