Вы смешиваете две вещи здесь. Полученная ошибка связана с неявно удаленным конструктором foo()
по умолчанию, который std::vector::resize(size_type count)
вызывает:
Если текущий размер меньше count
,
1) добавлены дополнительные вставленные по умолчанию элементы
Шаблон std::pair
имеет конструктор по умолчанию, поэтому вызов V1.resize
завершается успешно. Если вы также предоставите один для foo
или разрешите его неявную генерацию посредством инициализации класса, например,
struct foo
{
const int first = 42;
int second = 43;
};
тогда
std::vector<foo> V2;
V2.resize(3);
с радостью скомпилирует. Операция, которая не сработает как для std::pair<const int, int>
, так и foo
, это назначение . Это не скомпилируется:
V1[0] = std::pair<const int, int>(42, 43); // No way
V2[0] = { 42, 43 }; // Also not ok, can't assign to const data member
, который не имеет ничего общего с std::vector
, но с const
-квалифицированными членами данных в обоих случаях.