Sto incontrando qualcosa di molto strano quando si usano compiti preconfezionati. Durante la lettura di ~packaged_task ho l'impressione che se un std::packaged_task
viene distrutto prima dell'esecuzione, la promessa verrà interrotta e il tentativo di ottenere il risultato dal futuro dovrebbe generare std::future_error
.std :: packaged_task non rompe le promesse sulla distruzione?
Tuttavia, in Visual Studio 2013 questo non sembra essere il caso. Prendete questa seguente codice:
#include <iostream>
#include <future>
#include <functional>
int main() {
std::future<int> f;
{
std::packaged_task<int()> task([](){return 3; });
f = task.get_future();
}
std::cout<<f.get()<<std::endl;
return 0;
}
mi aspetto di ottenere un std::future_error
su f.get()
ma invece si blocca, in attesa che il compito confezionato da eseguire.
Cercando un altro compilatore: http://ideone.com/Wt0WOc effettivamente gettare una std::future_error("Broken promise")
...
sto vedendo un bug in Visual Studio 2013 o mi sono perso qualcosa?
Così ho letto correttamente quei collegamenti, questo non sarà riparato in VS 2013? –
@EmilyL. Direi molto improbabile. Secondo [Q5 nella sezione FAQ di questa pagina] (http://blogs.msdn.com/b/vcblog/archive/2013/06/28/c-11-14-stl-features-fixes-and-breaking -changes-in-vs-2013.aspx), eseguono il backup delle correzioni dei bug solo raramente. –
Ottimo, lo studio che abbiamo comprato ha solo un anno e ci stanno già lasciando in un pizzico. * sospiro * Grazie per la conferma. Accettando questa risposta come i link metti la conferma finale sui miei sospetti. –