Простая причина: история! У оригинала std::pair<T0, T1>
не могло быть тривиального конструктора по умолчанию, так как у него был другой конструктор. Он был определен для инициализации своих членов. Изменение этого поведения в std::pair<T0, T1>
для тривиально конструктивных типов, где люди полагаются на инициализацию значения, будет изменением разбиения.
В дополнение к причине истории конструктор по умолчанию std::pair<...>
определяется как конструктор constexpr
. Конструктор по умолчанию constexpr
по умолчанию не может быть установлен по умолчанию.
Я не знаю об этом, кроме создания пользовательского класса.