Moving a const reference to a unique_ptr fails to compile. Problem comes about when I try to do top()
on a priority_queue
and then pop()
the top. I can't get the item before the pop()
!
const std::unique_ptr<int>& refToPtr = pqueue.back();
std::unique_ptr<int> ptr = std::move(refToPtr); // fails to compile
Here is a full example.
#include <memory>
#include <queue>
#include <vector>
int main(int argc, char** argv) {
std::unique_ptr<int> initial = std::make_unique<int>(4);
std::priority_queue<std::unique_ptr<int>> queue;
queue.push(std::move(initial));
const std::unique_ptr<int>& refToPtr = queue.top();
std::unique_ptr<int> ptr = std::move(refToPtr); // won't compile???
queue.pop();
return 0;
}