Невозможно скомпилировать вызов C ++ deque.erase () - PullRequest
2 голосов
/ 25 апреля 2020

Я не могу скомпилировать этот простой код. Почему?

#include <iostream>
#include <deque>
#include <functional>
#include <utility>

int main() {
    std::deque<std::pair<const int, int>> dq;

    // problem with that line
    dq.erase(dq.begin());

    return 0;
}

Я использую G CC версии 7.4.0 в WSL Ubuntu 18.04.2 LTS.

Если я определю dq как std::deque<std::pair<int, int>> dq;, все компилируются хороший.

1 Ответ

2 голосов
/ 25 апреля 2020

std::deque<T>::erase(const_iterator) требует, чтобы T можно было назначать для перемещения. Это потому, что если вы стерли что-то, чего не было в начале или конце deque, ему пришлось бы переместить все (что нельзя сделать с парой, содержащей const).

Вместо этого вы можете использовать std::deque<T>::pop_front(), что сработает, так как нужно только уничтожить элемент.

...