You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

官方asio::co_spawn示例编译失败,如何结合io_context使用?

Boost.Asio协程示例编译错误:io_context无法被co_spawn识别为有效执行器

问题现象

使用Boost.Asio 1.75的cpp17协程TS回显服务器示例代码时,调用co_spawn函数出现编译错误,编译器无法将io_context识别为有效执行器。

相关代码片段

co_spawn(io_context, listener(), detached);

环境信息

  • Boost.Asio版本:1.75(独立Asio 1.24也存在该问题)
  • 编译器:cl.exe 版本19.34.31937

编译器错误输出

C:\Users\...\include\boost\asio\impl\co_spawn.hpp(255,10): 错误 C2665: “boost::asio::any_io_executor::any_io_executor”: 没有重载函数可以转换所有参数类型
C:\Users\...\include\boost\asio\impl\any_io_executor.ipp(34,18): 消息: 可能是“boost::asio::any_io_executor::any_io_executor(std::nullptr_t) noexcept”
C:\Users\...\include\boost\asio\impl\co_spawn.hpp(255,10): 消息: “boost::asio::any_io_executor::any_io_executor(std::nullptr_t) noexcept”: 无法将参数 1 从“const OtherExecutor”转换为“std::nullptr_t”
        随附模板参数:
        [
            OtherExecutor=boost::asio::io_context::executor_type
        ]
C:\Users\...\include\boost\asio\impl\co_spawn.hpp(255,11): 消息: 没有可用的用户定义转换运算符来执行此转换,或者无法调用该运算符
C:\Users\...\include\boost\asio\any_io_executor.hpp(189,3): 消息: 或       “boost::asio::any_io_executor::any_io_executor(std::nothrow_t,Executor,constraint<std::conditional<!std::is_same<OtherAnyExecutor,boost::asio::any_io_executor>::value&&!std::is_base_of<boost::asio::execution::detail::any_executor_base,Executor>::value,boost::asio::execution::detail::is_valid_target_executor<Executor,boost::asio::any_io_executor::supportable_properties_type>,std::false_type>::type::value,int>::type) noexcept”
C:\Users\...\include\boost\asio\impl\co_spawn.hpp(255,10): 消息: “boost::asio::any_io_executor::any_io_executor(std::nothrow_t,Executor,constraint<std::conditional<!std::is_same<OtherAnyExecutor,boost::asio::any_io_executor>::value&&!std::is_base_of<boost::asio::execution::detail::any_executor_base,Executor>::value,boost::asio::execution::detail::is_valid_target_executor<Executor,boost::asio::any_io_executor::supportable_properties_type>,std::false_type>::type::value,int>::type) noexcept”: 需要 3 个参数,但提供了 1 个
C:\Users\...\include\boost\asio\any_io_executor.hpp(167,3): 消息: 或       “boost::asio::any_io_executor::any_io_executor(Executor,constraint<std::conditional<!std::is_same<OtherAnyExecutor,boost::asio::any_io_executor>::value&&!std::is_base_of<boost::asio::execution::detail::any_executor_base,Executor>::value,boost::asio::execution::detail::is_valid_target_executor<Executor,boost::asio::any_io_executor::supportable_properties_type>,std::false_type>::type::value,int>::type)”
C:\Users\...\include\boost\asio\impl\co_spawn.hpp(255,10): 消息: 无法特化函数模板“boost::asio::any_io_executor::any_io_executor(Executor,constraint<std::conditional<!std::is_same<OtherAnyExecutor,boost::asio::any_io_executor>::value&&!std::is_base_of<boost::asio::execution::detail::any_executor_base,Executor>::value,boost::asio::execution::detail::is_valid_target_executor<Executor,boost::asio::any_io_executor::supportable_properties_type>,std::false_type>::type::value,int>::type)”
C:\Users\...\include\boost\asio\impl\co_spawn.hpp(255,10): 消息: 使用以下模板参数:
C:\Users\...\include\boost\asio\impl\co_spawn.hpp(255,10): 消息: “Executor=OtherExecutor”
C:\Users\...\include\boost\asio\any_io_executor.hpp(134,3): 消息: 或       “boost::asio::any_io_executor::any_io_executor(std::nothrow_t,OtherAnyExecutor,constraint<std::conditional<!std::is_same<OtherAnyExecutor,boost::asio::any_io_executor>::value&&std::is_base_of<boost::asio::execution::detail::any_executor_base,Executor>::value,boost::asio::execution::detail::supportable_properties<0,void (boost::asio::execution::context_as_t<boost::asio::execution_context &>,boost::asio::execution::detail::blocking::never_t<0>,boost::asio::execution::prefer_only<boost::asio::execution::detail::blocking::possibly_t<0>>,boost::asio::execution::prefer_only<boost::asio::execution::detail::outstanding_work::tracked_t<0>>,boost::asio::execution::prefer_only<boost::asio::execution::detail::outstanding_work::untracked_t<0>>,boost::asio::execution::prefer_only<boost::asio::execution::detail::relationship::fork_t<0>>,boost::asio::execution::prefer_only<boost::asio::execution::detail::relationship::continuation_t<0>>)>::is_valid_target<OtherAnyExecutor>,std::false_type>::type::value,int>::type) noexcept”
C:\Users\...\include\boost\asio\impl\co_spawn.hpp(255,10): 消息: “boost::asio::any_io_executor::any_io_executor(std::nothrow_t,OtherAnyExecutor,constraint<std::conditional<!std::is_same<OtherAnyExecutor,boost::asio::any_io_executor>::value&&std::is_base_of<boost::asio::execution::detail::any_executor_base,Executor>::value,boost::asio::execution::detail::supportable_properties<0,void (boost::asio::execution::context_as_t<boost::asio::execution_context &>,boost::asio::execution::detail::blocking::never_t<0>,boost::asio::execution::prefer_only<boost::asio::execution::detail::blocking::possibly_t<0>>,boost::asio::execution::prefer_only<boost::asio::execution::detail::outstanding_work::tracked_t<0>>,boost::asio::execution::prefer_only<boost::asio::execution::detail::outstanding_work::untracked_t<0>>,boost::asio::execution::prefer_only<boost::asio::execution::detail::relationship::fork_t<0>>,boost::asio::execution::prefer_only<boost::asio::execution::detail::relationship::continuation_t<0>>)>::is_valid_target<OtherAnyExecutor>,std::false_type>::type::value,int>::type) noexcept”: 需要 3 个参数,但提供了 1 个
C:\Users\...\include\boost\asio\any_io_executor.hpp(110,3): 消息: 或       “boost::asio::any_io_executor::any_io_executor(OtherAnyExecutor,constraint<std::conditional<!std::is_same<OtherAnyExecutor,boost::asio::any_io_executor>::value&&std::is_base_of<boost::asio::execution::detail::any_executor_base,Executor>::value,boost::asio::execution::detail::supportable_properties<0,void (boost::asio::execution::context_as_t<boost::asio::execution_context &>,boost::asio::execution::detail::blocking::never_t<0>,boost::asio::execution::prefer_only<boost::asio::execution::detail::blocking::possibly_t<0>>,boost::asio::execution::prefer_only<boost::asio::execution::detail::outstanding_work::tracked_t<0>>,boost::asio::execution::prefer_only<boost::asio::execution::detail::outstanding_work::untracked_t<0>>,boost::asio::execution::prefer_only<boost::asio::execution::detail::relationship::fork_t<0>>,boost::asio::execution::prefer_only<boost::asio::execution::detail::relationship::continuation_t<0>>)>::is_valid_target<OtherAnyExecutor>,std::false_type>::type::value,int>::type)”
C:\Users\...\include\boost\asio\impl\co_spawn.hpp(255,10): 消息: 无法特化函数模板“boost::asio::any_io_executor::any_io_executor(OtherAnyExecutor,constraint<std::conditional<!std::is_same<OtherAnyExecutor,boost::asio::any_io_executor>::value&&std::is_base_of<boost::asio::execution::detail::any_executor_base,Executor>::value,boost::asio::execution::detail::supportable_properties<0,void (boost::asio::execution::context_as_t<boost::asio::execution_context &>,boost::asio::execution::detail::blocking::never_t<0>,boost::asio::execution::prefer_only<boost::asio::execution::detail::blocking::possibly_t<0>>,boost::asio::execution::prefer_only<boost::asio::execution::detail::outstanding_work::tracked_t<0>>,boost::asio::execution::prefer_only<boost::asio::execution::detail::outstanding_work::untracked_t<0>>,boost::asio::execution::prefer_only<boost::asio::execution::detail::relationship::fork_t<0>>,boost::asio::execution::prefer_only<boost::asio::execution::detail::relationship::continuation_t<0>>)>::is_valid_target<OtherAnyExecutor>,std::false_type>::type::value,int>::type)”
C:\Users\...\include\boost\asio\impl\co_spawn.hpp(255,10): 消息: 使用以下模板参数:
C:\Users\...\include\boost\asio\impl\co_spawn.hpp(255,10): 消息: “OtherAnyExecutor=OtherExecutor”
C:\Users\...\include\boost\asio\impl\co_spawn.hpp(255,10): 消息: 尝试匹配参数列表“(const OtherExecutor)”时出错
        随附模板参数:
        [
            OtherExecutor=boost::asio::io_context::executor_type
        ]
C:\Users\...\include\boost\asio\impl\co_spawn.hpp(378,1): 消息: 参见正在编译的函数模板实例化“boost::asio::detail::initiate_co_spawn<boost::asio::any_io_executor>::initiate_co_spawn<Executor>(const OtherExecutor &)”
        随附模板参数:
        [
            Executor=boost::asio::io_context::executor_type,
            OtherExecutor=boost::asio::io_context::executor_type
        ]
C:\Users\...\include\boost\asio\impl\co_spawn.hpp(375,3): 消息: 参见正在编译的函数模板实例化“boost::asio::detail::initiate_co_spawn<boost::asio::any_io_executor>::initiate_co_spawn<Executor>(const OtherExecutor &)”
        随附模板参数:
        [
            Executor=boost::asio::io_context::executor_type,
            OtherExecutor=boost::asio::io_context::executor_type
        ]
C:\Users\...\Main\asio_test\asio_test.cpp(298,20): 消息: 参见正在编译的函数模板实例化“void boost::asio::co_spawn<boost::asio::io_context::executor_type,main::<lambda_,const boost::asio::detached_t&>(const Executor &,F &&,CompletionToken,int)”
        随附模板参数:
        [
            Executor=boost::asio::io_context::executor_type,
            F=main::<lambda_,
            CompletionToken=const boost::asio::detached_t &
        ]

内容的提问来源于stack exchange,提问作者Gregory Bull

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 02:18:21