#c #visual-studio-2015 #boost-asio #intel-composer #msvc14
# #c #visual-studio-2015 #boost-asio #intel-composer #msvc14
Вопрос:
- Я создал boost 1.74 с Intel c 2018 (обновление 2) с VS 2015 (
intel-18.0-vc14
набор инструментов) в выпуске x64 - когда я пытаюсь собрать код, использующий ASIO, с компилятором intel c с интеграцией VS2015, я получаю множество ошибок компиляции.
- когда я пытаюсь собрать тот же код с VS 2015, он компилируется нормально.
- следующий код не компилируется:
boost::asio::io_context context; boost::asio::ip::tcp::acceptor acceptor(context);
со следующим сообщением об ошибке:
> boost/asio/detail/io_object_impl.hpp(61): error : no instance of constructor "boost::asio::execution::any_executor
- если я определю
BOOST_ASIO_USE_TS_EXECUTOR_AS_DEFAULT
приведенный выше пример, он будет скомпилирован. но следующий пример кода не:boost::asio::io_context context; boost::asio::ip::tcp::acceptor acceptor(context); boost::asio::io_context::strand strand(context); boost::asio::ip::tcp::socket socket(context); acceptor.async_accept(socket, strand.wrap([](const boost::system::error_code amp; error) {}) );
с сообщением об ошибке (я опубликовал полное сообщение об ошибке ниже):
> boost/asio/detail/handler_work.hpp(366): error : more than one partial specialization matches the template argument list of class "boost::asio::detail::handler_work_base<boost::asio::io_context::executor_type, void, boost::asio::io_context, boost::asio::executor, void>"
Вопросы:
- как мне нужно изменить приведенные выше подписи в моем примере, чтобы обновить наш устаревший код для использования boost 1.74?
- или есть какое-то определение компиляции, которое мне нужно определить, чтобы получить обратно совместимое поведение?
- является ли это ошибкой в обнаружении компилятора (в boost или asio), или нам везло все эти годы, и для совместимости нам нужно было создать boost с компилятором Intel?
1>F:ThirdPartyLibsRootsvn-esx_SuperMash_libraries_boost_boost_1_74_0_z43_win_msvc-14.0-python2includeboost/asio/detail/handler_work.hpp(366): error : more than one partial specialization matches the template argument list of class "boost::asio::detail::handler_work_base<boost::asio::io_context::executor_type, void, boost::asio::io_context, boost::asio::executor, void>"
1> "boost::asio::detail::handler_work_base<Executor, CandidateExecutor, IoContext, PolymorphicExecutor, boost::asio::enable_if<<expression>, void>::type>"
1> "boost::asio::detail::handler_work_base<Executor, void, IoContext, PolymorphicExecutor, boost::asio::enable_if<boost::is_same<Executor, IoContext::executor_type>::value, void>::type>"
1> handler_work_base<IoExecutor>,
1> ^
1> detected during:
1> instantiation of class "boost::asio::detail::handler_work<Handler, IoExecutor, <unnamed>> [with Handler=boost::asio::detail::binder1<lambda [](const boost::system::error_code amp;)->void, boost::system::error_code>, IoExecutor=boost::asio::io_context::executor_type, <unnamed>=void]" at line 81 of "F:ThirdPartyLibsRootsvn-esx_SuperMash_libraries_boost_boost_1_74_0_z43_win_msvc-14.0-python2includeboost/asio/detail/completion_handler.hpp"
1> instantiation of class "boost::asio::detail::completion_handler<Handler, IoExecutor> [with Handler=boost::asio::detail::binder1<lambda [](const boost::system::error_code amp;)->void, boost::system::error_code>, IoExecutor=boost::asio::io_context::executor_type]" at line 68 of "F:ThirdPartyLibsRootsvn-esx_SuperMash_libraries_boost_boost_1_74_0_z43_win_msvc-14.0-python2includeboost/asio/detail/impl/strand_service.hpp"
1> instantiation of "void boost::asio::detail::strand_service::dispatch(boost::asio::detail::strand_service::implementation_type amp;, Handler amp;) [with Handler=boost::asio::detail::binder1<lambda [](const boost::system::error_code amp;)->void, boost::system::error_code>]" at line 344 of "F:ThirdPartyLibsRootsvn-esx_SuperMash_libraries_boost_boost_1_74_0_z43_win_msvc-14.0-python2includeboost/asio/io_context_strand.hpp"
1> instantiation of "void boost::asio::io_context::strand::initiate_dispatch::operator()(LegacyCompletionHandler amp;amp;, boost::asio::io_context::strand *) const [with LegacyCompletionHandler=boost::asio::detail::binder1<lambda [](const boost::system::error_code amp;)->void, boost::system::error_code>]" at line 183 of "F:ThirdPartyLibsRootsvn-esx_SuperMash_libraries_boost_boost_1_74_0_z43_win_msvc-14.0-python2includeboost/asio/async_result.hpp"
1> instantiation of "boost::asio::async_result<CompletionToken, Signature>::return_type boost::asio::async_result<CompletionToken, Signature>::initiate(Initiation amp;amp;, RawCompletionToken amp;amp;, T1 amp;amp;) [with CompletionToken=boost::asio::detail::binder1<lambda [](const boost::system::error_code amp;)->void, boost::system::error_code>, Signature=void (), Initiation=boost::asio::io_context::strand::initiate_dispatch, RawCompletionToken=boost::asio::detail::binder1<lambda [](const
1> boost::system::error_code amp;)->void, boost::system::error_code>, T1=boost::asio::io_context::strand *]" at line 470 of "F:ThirdPartyLibsRootsvn-esx_SuperMash_libraries_boost_boost_1_74_0_z43_win_msvc-14.0-python2includeboost/asio/async_result.hpp"
1> [ 18 instantiation contexts not shown ]
1> instantiation of "boost::asio::detail::win_iocp_socket_accept_op<Socket, Protocol, Handler, IoExecutor>::win_iocp_socket_accept_op(boost::asio::detail::win_iocp_socket_service_base amp;, boost::asio::detail::socket_type={SOCKET={UINT_PTR={unsigned __int64}}}, Socket amp;, const Protocol amp;, Protocol::endpoint *, bool, Handler amp;, const IoExecutor amp;) [with Socket=boost::asio::basic_socket<boost::asio::ip::tcp, boost::asio::any_io_executor>, Protocol=boost::asio::ip::tcp,
1> Handler=boost::asio::detail::wrapped_handler<boost::asio::io_context::strand, lambda [](const boost::system::error_code amp;)->void, boost::asio::detail::is_continuation_if_running>, IoExecutor=boost::asio::any_io_executor]" at line 503 of "F:ThirdPartyLibsRootsvn-esx_SuperMash_libraries_boost_boost_1_74_0_z43_win_msvc-14.0-python2includeboost/asio/detail/win_iocp_socket_service.hpp"
1> instantiation of "void boost::asio::detail::win_iocp_socket_service<Protocol>::async_accept(boost::asio::detail::win_iocp_socket_service<Protocol>::implementation_type amp;, Socket amp;, boost::asio::detail::win_iocp_socket_service<Protocol>::endpoint_type *, Handler amp;, const IoExecutor amp;) [with Protocol=boost::asio::ip::tcp, Socket=boost::asio::basic_socket<boost::asio::ip::tcp, boost::asio::any_io_executor>, Handler=boost::asio::detail::wrapped_handler<boost::asio::io_context::strand,
1> lambda [](const boost::system::error_code amp;)->void, boost::asio::detail::is_continuation_if_running>, IoExecutor=boost::asio::any_io_executor]" at line 2445 of "F:ThirdPartyLibsRootsvn-esx_SuperMash_libraries_boost_boost_1_74_0_z43_win_msvc-14.0-python2includeboost/asio/basic_socket_acceptor.hpp"
1> instantiation of "void boost::asio::basic_socket_acceptor<Protocol, Executor>::initiate_async_accept::operator()(AcceptHandler amp;amp;, boost::asio::basic_socket<Protocol1, Executor1> *, boost::asio::basic_socket_acceptor<Protocol, Executor>::endpoint_type *) const [with Protocol=boost::asio::ip::tcp, Executor=boost::asio::any_io_executor, AcceptHandler=boost::asio::detail::wrapped_handler<boost::asio::io_context::strand, lambda [](const boost::system::error_code amp;)->void,
1> boost::asio::detail::is_continuation_if_running>, Protocol1=boost::asio::ip::tcp, Executor1=boost::asio::any_io_executor]" at line 183 of "F:ThirdPartyLibsRootsvn-esx_SuperMash_libraries_boost_boost_1_74_0_z43_win_msvc-14.0-python2includeboost/asio/async_result.hpp"
1> instantiation of "boost::asio::async_result<CompletionToken, Signature>::return_type boost::asio::async_result<CompletionToken, Signature>::initiate(Initiation amp;amp;, RawCompletionToken amp;amp;, T1 amp;amp;, T2 amp;amp;) [with CompletionToken=boost::asio::detail::wrapped_handler<boost::asio::io_context::strand, lambda [](const boost::system::error_code amp;)->void, boost::asio::detail::is_continuation_if_running>, Signature=void (boost::system::error_code),
1> Initiation=boost::asio::basic_socket_acceptor<boost::asio::ip::tcp, boost::asio::any_io_executor>::initiate_async_accept, RawCompletionToken=boost::asio::detail::wrapped_handler<boost::asio::io_context::strand, lambda [](const boost::system::error_code amp;)->void, boost::asio::detail::is_continuation_if_running>, T1=boost::asio::basic_socket<boost::asio::ip::tcp, boost::asio::any_io_executor> *, T2=boost::asio::ip::tcp::endpoint *]" at line 470 of
1> "F:ThirdPartyLibsRootsvn-esx_SuperMash_libraries_boost_boost_1_74_0_z43_win_msvc-14.0-python2includeboost/asio/async_result.hpp"
1> instantiation of "boost::asio::enable_if<boost::asio::detail::async_result_has_initiate_memfn<CompletionToken, Signature>::value, boost::asio::async_result<boost::decay<CompletionToken>::type, Signature>::return_type>::type boost::asio::async_initiate<CompletionToken,Signature,Initiation,T1,T2>(Initiation amp;amp;, CompletionToken amp;, T1 amp;amp;, T2 amp;amp;) [with CompletionToken=boost::asio::detail::wrapped_handler<boost::asio::io_context::strand, lambda [](const boost::system::error_code amp;)->void,
1> boost::asio::detail::is_continuation_if_running>, Signature=void (boost::system::error_code), Initiation=boost::asio::basic_socket_acceptor<boost::asio::ip::tcp, boost::asio::any_io_executor>::initiate_async_accept, T1=boost::asio::basic_socket<boost::asio::ip::tcp, boost::asio::any_io_executor> *, T2=boost::asio::ip::tcp::endpoint *]" at line 1351 of
1> "F:ThirdPartyLibsRootsvn-esx_SuperMash_libraries_boost_boost_1_74_0_z43_win_msvc-14.0-python2includeboost/asio/basic_socket_acceptor.hpp"
Комментарии:
1. Вы решили эту проблему? если да, пожалуйста, ответьте на вопрос, я столкнулся с аналогичной проблемой.
2. Я сообщил об этой проблеме разработчикам asio: github.com/chriskohlhoff/asio/issues/575 Кажется, boost 1.75 может это исправить, но я еще не тестировал. Обходным путем было скомпилировать библиотеки, использующие asio, с MSVC, а для остальных использовать только intel.