Como mover elementos da fila de prioridade STL

A fila de prioridade STL do C ++ possui um método pop vazio () e um método const ref top (). Portanto, se você quiser mover elementos para fora da fila, precisará fazer algo assim:

T moved = std::move(const_cast<T&>(myQueue.top())));
myQeue.pop();

Isso efetivamente converte o topo em não uma constante, para que possa ser movido (em vez de copiado). Não gosto desse código, porque a movimentação forçada pode invalidar os invariantes da fila de prioridade, quedevemos não importa por causa do pop, mas as coisaspoderia dar errado.

Existe uma maneira melhor de realizar o pop / move? Por que não existe a função T&& top_and_pop ()?

questionAnswers(2)

yourAnswerToTheQuestion