如何解决来自 Visual C++ 的奇怪错误:promise type
假设我想在 C++20 中使用协程,并将承诺类型限制为仅接受获取一个 int &
类型参数的函数。我写了以下代码:
#include <coroutine>
struct task {
struct promise_type {
promise_type(int &) {}
task get_return_object() { return {}; }
std::suspend_never initial_suspend() { return {}; }
std::suspend_never final_suspend() noexcept { return {}; }
void return_void() {}
void unhandled_exception() {}
};
};
task my_task(int &) {
co_await std::suspend_never{};
}
int main() {
int x = 5;
my_task(x);
}
这在 GCC 版本 10+ 和 Visual Studio 2019 版本 16.8+ 中都可以编译并正常工作。 但是,Visual Studio 2019 总是抱怨类“task::promise_type”不存在默认构造函数:
如果我不使用引用(例如 int
而不是 int &
作为参数类型),则不会发生此错误。
GCC 不显示任何警告或错误,无论是否有引用。
我做错了吗? 这是标准禁止的吗? 或者这只是 IntelliSense 的一个奇怪的怪癖?
解决方法
这似乎是 IntelliSense 的问题,应该可以正常工作。要解决智能感知错误,可以为智能感知添加一个构造函数:
#ifdef __INTELLISENSE__
promise_type();
#endif
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。