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

VS2022 17.6+Boost.ASIO1.89+C++20编译报错C3546求规避方案

解决VS2022 17.6下Boost.ASIO 1.89的co_composed.hpp编译错误

错误信息

asio\co_composed.hpp(162,33): error C3546: '...': there are no parameter packs available to expand
asio\co_composed.hpp(163,2): message : see reference to class template instantiation 'asio::detail::co_composed_state_return<Executors,Handler,asio::detail::co_composed_returns<Signatures...>>' being compiled

问题原因

这是VS2022 17.6版本MSVC编译器的已知bug,在处理Boost.ASIO 1.89中co_composed.hpp文件的模板参数包展开逻辑时出现解析错误。

修复方案

修改asio\detail\co_composed.hpp文件中的co_composed_state_return结构体的无参complete()方法:

原出错代码片段

void complete()
{
  this->complete_impl(static_cast<Returns*>(nullptr), ...);
}

修改后的代码片段

void complete()
{
  this->complete_impl(static_cast<Returns*>(nullptr));
}

若需要更严谨的模板上下文匹配,也可以使用以下部分特化版本替换原通用模板:

template <typename Executors, typename Handler, typename... Signatures>
struct co_composed_state_return<Executors, Handler, co_composed_returns<Signatures...>>
  : co_composed_state_base<Executors, Handler>
{
  using co_composed_state_base<Executors, Handler>::co_composed_state_base;

  template <typename... Args>
  void complete(Args&&... args)
  {
    this->complete_impl(static_cast<co_composed_returns<Signatures...>*>(nullptr), std::forward<Args>(args)...);
  }

  void complete()
  {
    this->complete_impl(static_cast<co_composed_returns<Signatures...>*>(nullptr));
  }
};

示例代码

#include <iostream>
#include <boost/asio.hpp>
#include <boost/asio/co_spawn.hpp>
#include <boost/asio/steady_timer.hpp>
#include <boost/asio/use_awaitable.hpp>
#include <chrono>

int main()
{
    boost::asio::io_context ctx;
    boost::asio::co_spawn(ctx, []() -> boost::asio::awaitable<void> {
        std::cout << "Enter\n";
        boost::asio::steady_timer timer(co_await boost::asio::this_coro::executor, std::chrono::seconds(3));
        co_await timer.async_wait(boost::asio::use_awaitable);
        std::cout << "Leave\n";
    }, boost::asio::detached);
    ctx.run();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 08:43:16