LINUX.ORG.RU

История изменений

Исправление fsb4000, (текущая версия) :

Ладно, похоже я не в том месте вопрос задал.

Ты на https://cppinsights.io/ перешёл или нет?

Что за люди то тут такие, не могут по одной ссылке перейти. Что оп, что ты.

Вот как твой main выглядит в cppinsight.

int main()
{
  vector<int> v = std::vector<int, std::allocator<int> >();
  v.reserve(20);
  v.operator=(std::initializer_list<int>{3, 4});
  vector<int> v2 = std::vector<int, std::allocator<int> >();
  v2.reserve(20);
  v2.operator=(std::vector<int, std::allocator<int> >{std::initializer_list<int>{3, 4}, std::allocator<int>()});
  return 0;
}

Теперь то понятно, почему std::vector во втором случае создаётся, а в первом нет?

И в моём первом ответе нужно было смотреть не на constexpr(он есть у обоих перегрузок оператора =), а на тип который он принимает.

std::initializer_list<T> ilist

и

vector&& other

Исходная версия fsb4000, :

Ладно, похоже я не в том месте вопрос задал.

Ты на https://cppinsights.io/ перешёл или нет?

Что за люди то тут такие, не могут по одной ссылке перейти. Что оп, что ты.

Вот как твой main выглядит в cppinsight.

int main()
{
  vector<int> v = std::vector<int, std::allocator<int> >();
  v.reserve(20);
  v.operator=(std::initializer_list<int>{3, 4});
  vector<int> v2 = std::vector<int, std::allocator<int> >();
  v2.reserve(20);
  v2.operator=(std::vector<int, std::allocator<int> >{std::initializer_list<int>{3, 4}, std::allocator<int>()});
  return 0;
}

Теперь то понятно, почему std::vector во втором случае создаётся, а в первом нет?