Я использую Visual Studio 2013 для компиляции очень простой код:Почему std :: remove принимает версию итераторов const?
std::set<int> a{ 1, 2, 3 };
std::remove(a.begin(), a.end(), 3);
Я ожидаю, что это не может пойти не так, но я удивлен. Ошибка испускает:
Error 1 error C3892: '_Next' : you cannot assign to a variable that is const c:\program files (x86)\microsoft visual studio 12.0\vc\include\algorithm
Как это может быть? a является неконстантным std :: set. std :: remove() перемещает элемент и выглядит совершенно законным.
В VS 2008, ниже аналогичный код компилируется без ошибок:
std::set<int> a;
std::remove(a.begin(), a.end(), 3);
Да, я замечаю это поведение. Он отличается от VS 2008. В VS 2008 код компилируется. – Sheen
@Sheen это изменение в самом стандарте C++. –
P.S. Я не люблю изменения. Раньше вы могли сделать объект с ключевой частью, и до тех пор, пока вы не изменили ключ, вы могли бы модифицировать остальную часть объекта по мере необходимости. Это больше не разрешено. –