std::move
ne compile pas lorsque vous déplacez un objet std::packaged_task<void()>
.std :: move de std :: packaged_task <void()> ne compile pas (vs2013)
les erreurs sont les suivantes:
erreur C2182: '_Get_value': utilisation illégale de type 'vide'
erreur C2182: '_Val': utilisation illégale de type 'vide'
erreur C2182: '_Val' : utilisation illégale de type 'vide' erreur C2665: 'std :: avant': aucun des 2 surcharges pourrait convertir tous les types d'arguments
erreur C2512: 'std :: _ Promise': pas de constructeur par défaut approprié disponible
Le code est:
struct CalcFib
{
int m_num;
int m_res;
CalcFib(int number) :m_num(number)
{
}
CalcFib() :m_num(0)
{
}
void operator()()
{
m_res = fib(m_num);
}
int fib(int num)
{
if (num < 2) return num;
else return fib(num - 1) + fib(num - 2);
}
};
std::packaged_task<void()> task(std::move(CalcFib(30)));
std::packaged_task<void()> task1 = std::move(task);
Ce code est compilé avec succès:
struct CalcFib
{
int m_num;
int m_res;
CalcFib(int number) :m_num(number)
{
}
CalcFib() :m_num(0)
{
}
int operator()()
{
m_res = fib(m_num);
return m_res;
}
int fib(int num)
{
if (num < 2) return num;
else return fib(num - 1) + fib(num - 2);
}
};
std::packaged_task<int()> task(std::move(CalcFib(30)));
std::packaged_task<int()> task1 = std::move(task);
similar issue was asked here but has not answer
Pouvez-vous ajouter la version du compilateur et système? Cela compile bien avec clang 3.4.1 ('-std = C++ 11') et gcc 4.8.5. – dhke
Microsoft (R) C/C++ Optimisation du compilateur version 18.00.40629 pour x86 – aviyaChe
Ceci est un bug du compilateur Visual Studio, une solution agréable fount [ici] [1] [1]: http: // stackoverflow.com/questions/14744588/why-is-stdpackaged-taskvoid-not-valid – aviyaChe