Я получаю сообщение об ошибке при попытке скомпилировать код ниже:повышение :: обещание :: set_exception() ошибка компиляции
#include <exception>
#include <boost/thread.hpp>
int _tmain(int argc, _TCHAR* argv[])
{
boost::promise<int> pr;
pr.set_exception(std::copy_exception(std::runtime_error("test")));
std::cout << "done" << std::endl;
}
ошибка C2668: «повышение :: copy_exception»: неоднозначный вызов перегруженная функция d: \ Projects \ импульс \ boost_1_55_0 \ подталкивание \ нить \ future.hpp 2092
Я использую VS2010 и увеличить 1,55
Для справки: осуществление `повышающего :: обещание: : set_exception 'находится ниже:
void set_exception(boost::exception_ptr p)
{
// exception is stored here
}
template <typename E> void set_exception(E ex)
{
set_exception(copy_exception(ex)); // <- this is the line 2092
}
Таким образом, существует версия шаблона, которая вызывает версию без шаблонов. Я предполагаю, что в моем случае версия шаблона терпит неудачу.
Проблема исчезает, когда используется следующий код:
pr.set_exception(boost::copy_exception(std::runtime_error("test")));
boost::copy_exception()
т.е. используется вместо std::copy_exception()
.
Может ли кто-нибудь предложить вариант скомпилировать код с помощью std::copy_exception
?
Интересно, действительно ли это: http://stackoverflow.com/questions/37831458/where-is-stdcopy-exception-defined –