Почему не позволяет C++ допускать создание экземпляров неполных типов?Почему контейнеры C++ не допускают неполных типов?
Это, безусловно, Возможно,, чтобы написать контейнеры, которые не имеют этого ограничения - boost::container вполне способен это сделать. Насколько я вижу, он, похоже, не дает какого-либо повышения производительности или другого типа, но стандарт объявляет его неопределенным поведением.
Это делает, например, предотвращает создание рекурсивных структур данных.
Почему тогда стандарт C++ налагает это произвольное ограничение? Что было бы недостатком в том, чтобы разрешать неполные типы в качестве параметров шаблона, где это возможно?
Поскольку контейнеры, если они не хранят указатели, нуждаются в размере типа объекта, который он хранит? –
Почему, по-вашему, они этого не делают? Я не могу найти такого ограничения в стандарте C++ 11. –
@ViktorSehr: все стандартные контейнеры, кроме 'array' * do * (напрямую), хранят указатели, а не объекты; поэтому они не должны нуждаться в типе, который должен быть полным, пока не будет необходимо выделить один или несколько объектов. –