В [dcl.init]/17.6 это явно написано, что для случая инициализации в скобках происходит удаление копии:
Если выражением инициализатора является значение prvalue, а версия исходного типа без уточнения cv относится к тому же классу, что и класс назначения, выражение инициализатора используется для инициализации целевого объекта. [ Пример: T x = T(T(T())); вызывает конструктор T по умолчанию для инициализации x. — конец примера ]
А вот в случае list-initialization, к которому не относится предыдущий абзац, я не нашел ничего похожего. См. [dcl.init.list].
Итак, почему в этом случае есть исключение копирования: T x{T(T())};
в соответствии со стандартом С++ 17.