我正在尝试使用llvm-clang 8.0编译使用cppwinrt的类。目前唯一的阻止因素是clang找不到experimental/resumable
中定义的协程内在函数的实现。这些是VC ++标头experimental/resumable
中定义的内在函数:
extern "C" size_t _coro_resume(void *);
extern "C" void _coro_destroy(void *);
extern "C" size_t _coro_done(void *);
#pragma intrinsic(_coro_resume)
#pragma intrinsic(_coro_destroy)
#pragma intrinsic(_coro_done)
根据clang文档,以下是clang中的协程内在函数:
void __builtin_coro_resume(void *addr);
void __builtin_coro_destroy(void *addr);
bool __builtin_coro_done(void *addr);
如果我手动将标头中的内部函数替换为它所编译的叮当声。但是,这显然不是便携式解决方案。无论如何,我可以通过使用一些编译指示或编译时标头替换来达到相同的结果吗?
答案 0 :(得分:0)
我想提供一个解决方案,但是由于我的计算机上没有叮当声,因此未得到验证。
#ifdef __clang__
size_t _coro_resume(void *addr) { __builtin_coro_resume(addr); return 0; }
void _coro_destroy(void *addr) { __builtin_coro_destroy(addr); }
size_t _coro_done(void *addr) { return __builtin_coro_done(addr) ? 1 : 0; }
#else
extern "C" size_t _coro_resume(void *);
extern "C" void _coro_destroy(void *);
extern "C" size_t _coro_done(void *);
#pragma intrinsic(_coro_resume)
#pragma intrinsic(_coro_destroy)
#pragma intrinsic(_coro_done)
#endif
似乎函数的返回值被忽略了。