Замена встроенных сопрограмм в экспериментальных / возобновляемых

Я пытаюсь скомпилировать класс, который использует cppwinrt, используя llvm-clang 8.0. Единственный блокировщик на данный момент — это то, что 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

Решение

Я хотел бы дать решение, но оно не подтверждено, потому что я не звонил на своей машине.

#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

Кажется, что возвращаемое значение функций игнорируется.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector