Следующий код не компилируется в Visual Studio 2010. Почему?
#include <vector>
#include <tuple>
int main() {
std::vector<std::pair<const int, const int> > myVec;
for(int i=0; i<88; ++i)
myVec.push_back(std::make_pair<const int, const int>(1,i));
myVec.clear();
return 0;
}
Если я оставлю строку, которая очищает вектор, он отлично работает. Мне нужен пустой myVec. Невозможно стереть. pop_back работает. std :: swap - нет.
Очистка операций над вектором требует, чтобы тип элемента удовлетворял MoveAssignable
(см. Таблицу 100 в [C++11: 23.2.3]
), которую пара const
int
явно не делает.
Таким образом, ваша программа недействительна C++.
Не храните const
элементы. Выставляйте вектор как const
если хотите.