I
Ich sehe das Problem mit der {}-Initialisierung nicht wirklich, Unstimmigkeiten gibt es lediglich bei Containerklassen.
Bei Code wie
MyComplex c{0, 1};
ist intuitiv klar, was passiert, ohne dass MyComplex irgendeinen Konstruktor mit initializer_list anbieten muss. Entsprechend andere sinnvolle Beispiele lassen sich finden (pair, tuple, alle Arten von Datenstructs, Vektoren/Matrizen, … - eben alles, was Daten speichert, aber nicht wirklich ein Container ist), insofern macht die {}-Syntax für normale Konstruktoren durchaus Sinn.
Bei Containerklassen ist die Lage ähnlich. Bei
MyVector v{0, 1};
ist für mich auch intuitiv logisch, was passiert, nämlich dass der Vector mit den Elementen 0 und 1 initialisiert wird. Wenn das nicht funktioniert, sondern der (Elem, Size)-Konstruktor aufgerufen wird, hat der Designer geschlampt. Ich würde gar nicht erwarten, dass dieser bei einem Container benutzt wird, geschweige denn würde ich Code schreiben, der sich darauf verlässt. Dazu gibt es die altmodische Syntax.
Insofern ist ein Pitfall bei Containerklassen und ähnlichen Typen vorhanden, ich sehe das aber weit weniger dramatisch, als es hier dargestellt wird.