Нет. vector
(точнее, распределитель, переданный в vector
) может делегировать задачу построения свободной функции или другому классу, что делает корабль friend
бесполезным.
Даже если вы передадите свой собственный распределитель, он может быть привязан к классу, внутреннему для реализации. Тогда конструктор для вашего класса может быть доступен из этого класса, а не из вашего распределителя. Так что, если это ваш обходной путь, это не гарантировано. (Хотя, глядя на реализацию GCC, он скрупулезно использует распределитель un-rebound для создания таких подобъектов.)
В libstdc ++ GCC ни один шаблон контейнера STL не создает содержащиеся объекты в области действия стандартного класса или функции.