Я вообще понимаю, что вообще читаю, также прочитал некоторую современную литературу, и я думал, что ничего не пропустил. Также я прочитал книгу «Семантика перемещения Джосуттиса», и ISO Тема об обобщенном лямбда -захватах и аналогичном случае в ISO C ++ 14 Расширения языка
У меня есть следующий код: < /p>
#include
#include
#include
#include
#include
#include
#include
#include
#include
// #include's for below code and other purposes
int main() {
auto f = []() { return 1; };
std::queue q;
std::packaged_task pack(f);
q.emplace([p = std::move(pack)] () mutable { p(); });
return 0;
}
< /code>
Здесь я создаю простую очередь функций, удерживая некоторые «void ()» и packaged_task, передавая «f» из «int 'return type.
Затем я пытаюсь перенести packaged_tas Ссылка)
кажется хорошим, но когда я составляю его с "g ++ main.cpp -o main -std = c ++ 14" (и даже с C ++ 17), G ++ говорит мне:
/usr/include/c ++/9/bits/bits/std_funt Удаленная функция ‘main () :::
176 | new _functor (*__ source._m_access ());
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
main.cpp:19:32: note: ‘main()::::(const main()::&)’ is implicitly deleted because the default definition would be ill-formed:
19 | Q.emplace ([p = std :: move (pack)] () mitable {p ();});
| ^
main.cpp: 19: 32: ошибка: использование удаленной функции ‘std :: packaged_task :: packaged_task (const std :: packaged_task &) [с _res = int; _Argtypes = {}] ’
в файле, включенном из main.cpp: 8:
/usr /include /c ++ /9 /future: 1511: 7: Примечание: объявлено здесь
1511 | packaged_task (const packaged_task &) = delete;
| ^~~~~~~~~ ~
Подробнее здесь: https://stackoverflow.com/questions/618 ... -to-lambda
Мобильная версия