Ответ 1
Мэтт Аустерн, председатель рабочей группы библиотеки комитетов по стандартизации C++, объяснил это решение комитета в своем д-р. Статьи Добба по историческим причинам:
Мы обнаружили, что с большим количеством тестов, что даже [простой] пример не работал с каждой реализацией STL. В конце концов, все это казалось слишком мутным и слишком плохо понимаемым; комитет по стандартизации не думал, что есть какой-либо выбор, кроме как сказать, что контейнеры STL не должны работать с неполными типами. Для хорошей меры мы применили этот запрет и для остальных стандартных библиотек.
Мое понимание этого состоит в том, что комитет не хотел аннулировать существующие реализации библиотеки, требуя, чтобы они поддерживали неполные типы ретроактивно.
В той же статье он признает, что
В будущей версии С++ может иметь смысл ослабить ограничение на создание стандартных шаблонов библиотеки с неполными типами.
Учитывая, что статья датируется 2002 годом, и запрет остается в действующем стандарте, я считаю, что решение разработчиков-разработчиков не ждать будущего и строить свои собственные контейнеры, которые допускают неполные типы, было полностью оправдано.