Я хочу передать необработанный указатель внутри лямбда, но я не хочу, чтобы он просочился, если лямбда не вызывается. Это выглядит так:
void Clean(std::unique_ptr<int>&& list);
void f(int* list) {
thread_pool.Push([list = std::unique_ptr<int>(list) ] {
Clean(std::move(list)); // <-- here is an error.
});
}
Я получаю сообщение об ошибке в Clang 3.7.0:
error: привязка ссылки к типу 'unique_ptr < [2 *...] > ' к значению типа 'unique_ptr < [2 *...] > ' drops qualifiers
Но я не вижу каких-либо квалификаторов в первую очередь, особенно отброшен.
Кроме того, я нашел аналогичный отчет в списке рассылки, но без ответа.
Как мне изменить свой код, чтобы он скомпилировался и работает как ожидается по семантике?