Stiffstream / restinio

Cross-platform, efficient, customizable, and robust asynchronous HTTP(S)/WebSocket server C++ library with the right balance between performance and ease of use
Other
1.15k stars 93 forks source link

Compilation of express router tests fails on VC++ 19 (VisualStudio 2022) #184

Closed eao197 closed 1 year ago

eao197 commented 1 year ago

For example, an attempt to build test/router/express unit-test leads to the following errors:

Compiling test/router/express/part1.cpp ...
part1.cpp
C:\home\eao197\sandboxes\restinio.github\dev\asio\include\asio/detail/executor_function.hpp(100): error C2872: 'impl': ambiguous symbol
.\restinio/uri_helpers.hpp(23): note: could be 'restinio::impl'
.\restinio/router/express.hpp(195): note: or       'restinio::router::impl'
C:\home\eao197\sandboxes\restinio.github\dev\asio\include\asio/detail/executor_function.hpp(86): note: see reference to function template instantiation 'void asio::detail::executor_function::complete<Function,Alloc>(asio::detail::executor_function::impl_base *,bool)' being compiled
        with
        [
            Function=asio::detail::binder2<asio::executor_binder<restinio::impl::sendfile_operation_runner_t<asio::ip::tcp::socket>::make_completion_handler::<lambda_311055104d833d8e74ad4ac68f79b494>,restinio::default_asio_executor>,asio::error_code,size_t>,
            Alloc=std::allocator<void>
        ]
C:\home\eao197\sandboxes\restinio.github\dev\asio\include\asio/detail/executor_function.hpp(41): note: see reference to function template instantiation 'asio::detail::executor_function::impl<F,Alloc>::impl<F>(F &&,const Alloc &)' being compiled
        with
        [
            F=asio::detail::binder2<asio::executor_binder<restinio::impl::sendfile_operation_runner_t<asio::ip::tcp::socket>::make_completion_handler::<lambda_311055104d833d8e74ad4ac68f79b494>,restinio::default_asio_executor>,asio::error_code,size_t>,
            Alloc=std::allocator<void>
        ]
C:\home\eao197\sandboxes\restinio.github\dev\asio\include\asio/execution/any_executor.hpp(788): note: see reference to function template instantiation 'asio::detail::executor_function::executor_function<F,std::allocator<void>>(F,const Alloc &)' being compiled
        with
        [
            F=asio::detail::binder2<asio::executor_binder<restinio::impl::sendfile_operation_runner_t<asio::ip::tcp::socket>::make_completion_handler::<lambda_311055104d833d8e74ad4ac68f79b494>,restinio::default_asio_executor>,asio::error_code,size_t>,
            Alloc=std::allocator<void>
        ]
C:\home\eao197\sandboxes\restinio.github\dev\asio\include\asio/execution/execute.hpp(209): note: see reference to function template instantiation 'void asio::execution::detail::any_executor_base::execute<F>(F &&) const' being compiled
        with
        [
            F=asio::detail::binder2<asio::executor_binder<restinio::impl::sendfile_operation_runner_t<asio::ip::tcp::socket>::make_completion_handler::<lambda_311055104d833d8e74ad4ac68f79b494>,restinio::default_asio_executor>,asio::error_code,size_t>
        ]
C:\home\eao197\sandboxes\restinio.github\dev\asio\include\asio/detail/handler_work.hpp(451): note: see reference to function template instantiation 'void asio_execution_execute_fn::impl::operator ()<asio::any_io_executor&,Function>(T,F &&) noexcept(false) const' being compiled
        with
        [
            Function=asio::detail::binder2<asio::executor_binder<restinio::impl::sendfile_operation_runner_t<asio::ip::tcp::socket>::make_completion_handler::<lambda_311055104d833d8e74ad4ac68f79b494>,restinio::default_asio_executor>,asio::error_code,size_t>,
            T=asio::any_io_executor &,
            F=asio::detail::binder2<asio::executor_binder<restinio::impl::sendfile_operation_runner_t<asio::ip::tcp::socket>::make_completion_handler::<lambda_311055104d833d8e74ad4ac68f79b494>,restinio::default_asio_executor>,asio::error_code,size_t>
        ]
C:\home\eao197\sandboxes\restinio.github\dev\asio\include\asio/detail/handler_work.hpp(491): note: see reference to function template instantiation 'void asio::detail::handler_work_base<asio::any_io_executor,IoExecutor,asio::io_context,asio::executor,void>::dispatch<Function,Handler>(Function &,Handler &)' being compiled
        with
        [
            IoExecutor=asio::any_io_executor,
            Function=asio::detail::binder2<asio::executor_binder<restinio::impl::sendfile_operation_runner_t<asio::ip::tcp::socket>::make_completion_handler::<lambda_311055104d833d8e74ad4ac68f79b494>,restinio::default_asio_executor>,asio::error_code,size_t>,
            Handler=asio::executor_binder<restinio::impl::sendfile_operation_runner_t<asio::ip::tcp::socket>::make_completion_handler::<lambda_311055104d833d8e74ad4ac68f79b494>,restinio::default_asio_executor>
        ]
C:\home\eao197\sandboxes\restinio.github\dev\asio\include\asio/detail/win_iocp_overlapped_op.hpp(84): note: see reference to function template instantiation 'void asio::detail::handler_work<Handler,IoExecutor,void>::complete<asio::detail::binder2<Handler,asio::error_code,size_t>>(Function &,Handler &)' being compiled
        with
        [
            Handler=asio::executor_binder<restinio::impl::sendfile_operation_runner_t<asio::ip::tcp::socket>::make_completion_handler::<lambda_311055104d833d8e74ad4ac68f79b494>,restinio::default_asio_executor>,
            IoExecutor=asio::any_io_executor,
            Function=asio::detail::binder2<asio::executor_binder<restinio::impl::sendfile_operation_runner_t<asio::ip::tcp::socket>::make_completion_handler::<lambda_311055104d833d8e74ad4ac68f79b494>,restinio::default_asio_executor>,asio::error_code,size_t>
        ]
C:\home\eao197\sandboxes\restinio.github\dev\asio\include\asio/detail/win_iocp_overlapped_op.hpp(49): note: while compiling class template member function 'void asio::detail::win_iocp_overlapped_op<Handler,Executor>::do_complete(void *,asio::detail::operation *,const asio::error_code &,size_t)'
        with
        [
            Handler=asio::executor_binder<restinio::impl::sendfile_operation_runner_t<asio::ip::tcp::socket>::make_completion_handler::<lambda_311055104d833d8e74ad4ac68f79b494>,restinio::default_asio_executor>,
            Executor=asio::any_io_executor
        ]
C:\home\eao197\sandboxes\restinio.github\dev\asio\include\asio/detail/win_iocp_overlapped_op.hpp(43): note: see the first reference to 'asio::detail::win_iocp_overlapped_op<Handler,Executor>::do_complete' in 'asio::detail::win_iocp_overlapped_op<Handler,Executor>::win_iocp_overlapped_op'
        with
        [
            Handler=asio::executor_binder<restinio::impl::sendfile_operation_runner_t<asio::ip::tcp::socket>::make_completion_handler::<lambda_311055104d833d8e74ad4ac68f79b494>,restinio::default_asio_executor>,
            Executor=asio::any_io_executor
        ]
C:\home\eao197\sandboxes\restinio.github\dev\asio\include\asio/detail/win_iocp_overlapped_ptr.hpp(85): note: see the first reference to 'asio::detail::win_iocp_overlapped_op<Handler,Executor>::win_iocp_overlapped_op' in 'asio::detail::win_iocp_overlapped_ptr::reset'
        with
        [
            Handler=asio::executor_binder<restinio::impl::sendfile_operation_runner_t<asio::ip::tcp::socket>::make_completion_handler::<lambda_311055104d833d8e74ad4ac68f79b494>,restinio::default_asio_executor>,
            Executor=asio::any_io_executor
        ]
C:\home\eao197\sandboxes\restinio.github\dev\asio\include\asio/detail/win_iocp_overlapped_ptr.hpp(83): note: see reference to class template instantiation 'asio::detail::win_iocp_overlapped_op<Handler,Executor>' being compiled
        with
        [
            Handler=asio::executor_binder<restinio::impl::sendfile_operation_runner_t<asio::ip::tcp::socket>::make_completion_handler::<lambda_311055104d833d8e74ad4ac68f79b494>,restinio::default_asio_executor>,
            Executor=asio::any_io_executor
        ]
C:\home\eao197\sandboxes\restinio.github\dev\asio\include\asio/detail/win_iocp_overlapped_ptr.hpp(54): note: see reference to function template instantiation 'void asio::detail::win_iocp_overlapped_ptr::reset<Executor,Handler>(const Executor &,Handler)' being compiled
        with
        [
            Executor=asio::any_io_executor,
            Handler=asio::executor_binder<restinio::impl::sendfile_operation_runner_t<asio::ip::tcp::socket>::make_completion_handler::<lambda_311055104d833d8e74ad4ac68f79b494>,restinio::default_asio_executor>
        ]
C:\home\eao197\sandboxes\restinio.github\dev\asio\include\asio/windows/overlapped_ptr.hpp(70): note: see reference to function template instantiation 'asio::detail::win_iocp_overlapped_ptr::win_iocp_overlapped_ptr<Executor,Handler>(const Executor &,Handler &&)' being compiled
        with
        [
            Executor=asio::any_io_executor,
            Handler=asio::executor_binder<restinio::impl::sendfile_operation_runner_t<asio::ip::tcp::socket>::make_completion_handler::<lambda_311055104d833d8e74ad4ac68f79b494>,restinio::default_asio_executor>
        ]
C:\home\eao197\sandboxes\restinio.github\dev\restinio\impl\sendfile_operation_win.ipp(282): note: see reference to function template instantiation 'asio::windows::overlapped_ptr::overlapped_ptr<asio::any_io_executor,asio::executor_binder<restinio::impl::sendfile_operation_runner_t<asio::ip::tcp::socket>::make_completion_handler::<lambda_311055104d833d8e74ad4ac68f79b494>,restinio::default_asio_executor>>(const Executor &,Handler &&,int)' being compiled
        with
        [
            Executor=asio::any_io_executor,
            Handler=asio::executor_binder<restinio::impl::sendfile_operation_runner_t<asio::ip::tcp::socket>::make_completion_handler::<lambda_311055104d833d8e74ad4ac68f79b494>,restinio::default_asio_executor>
        ]

The problem exists with the latest versions of VC++ 19 (from VisualStudio 2022), VC++ 16 from VisualStudio 2019 compiles those tests successfully.

eao197 commented 1 year ago

Fixed in v.0.6.19.