我正在使用目前在 VS2017 中进行实验的提议的 c++ 协程进行一些实验。我只是想拥有一个不返回任何内容的协同例程,而是在某个协同例程对象上调用 co_await,比方说,在恢复之前在另一个线程上进行一些处理。然而,VS 甚至不会编译返回 void 的最基本的协程程序。例如:
#include "stdafx.h"
#include <experimental\coroutine>
using namespace std::experimental;
void bob()
{
co_await suspend_always{};
}
int main()
{
bob();
}
Run Code Online (Sandbox Code Playgroud)
导致错误:
1>c:\program files (x86)\microsoft visual studio\2017\professional\vc\tools\msvc\14.10.25017\include\experimental\resumable(46): error C2825: '_Ret': must be a class or后跟'::'时的命名空间 1>d:\dev\coroutinestest\main.cpp(10):注意:请参阅对正在编译的类模板实例化 'std::experimental::coroutine_traits' 的引用 1>c:\program files (x86)\microsoft visual studio\2017\professional\vc\tools\msvc\14.10.25017\include\experimental\resumable(46):错误 C2510:'_Ret':'::' 的左边必须是一个类/结构/union 1>c:\program files (x86)\microsoft visual studio\2017\professional\vc\tools\msvc\14.10.25017\include\experimental\resumable(46):错误 C2061:语法错误:标识符“promise_type” 1>c:\program files (x86)\microsoft visual studio\2017\professional\vc\tools\msvc\14.10.25017\include\experimental\resumable(46): 错误 C2238: ';' 之前的意外标记
现在我假设这个错误是由于 void::promise_type 是无意义的,但是为什么在没有任何返回的情况下甚至会实例化 promise 类型?我希望能够从协程中返回任何内容。这只是实现中的当前错误还是我误解了协同程序的使用。
谢谢