Hello, does anyone have an idea why Clang thinks that _promise is not a member of the Awaiter class:
template <typename T>
struct _Task {
// ...
struct promise_type {
// ...
auto final_suspend() noexcept {
struct Awaiter {
promise_type *_promise;
void await_suspend(std::coroutine_handle<void>) noexcept {
auto cfp = std::exchange(_promise->_cfp, Cfp::PAST_SUSPEND);
if (cfp == Cfp::PAST_START)
_promise->_resume->resume();
}
// ...
Compilation command & output:
clang++ -c -o .cutekit/build/efi-x86_64-2f159776/karm-base-tests/__obj__/test-async.cpp.o src/libs/karm-base/tests/test-async.cpp -MD -MF .cutekit/build/efi-x86_64-2f159776/karm-base-tests/__obj__/test-async.cpp.o.d -std=gnu++2b -Wall -Wextra -Werror -fcolor-diagnostics -fno-exceptions -fno-rtti -target x86_64-unknown-windows -ffreestanding -fno-stack-protector -fshort-wchar -mno-red-zone -I.cutekit/extern/cute-engineering -I.cutekit/extern/cute-engineering/ce-libc/src/ce-libc -I.cutekit/extern/cute-engineering/ce-libm/src/ce-libm -I.cutekit/extern/cute-engineering/ce-stdcpp/src/ce-stdcpp -Isrc/apps -Isrc/assets -Isrc/impls -Isrc/kernel -Isrc/libs -Isrc/specs -Isrc/web -D__ck_abi_ms__ -D__ck_abi_value=ms -D__ck_arch_value=x86_64 -D__ck_arch_x86_64__ -D__ck_karm_sys_encoding_utf16__ -D__ck_karm_sys_encoding_value=utf16 -D__ck_karm_sys_line_ending_crlf__ -D__ck_karm_sys_line_ending_value=crlf -D__ck_karm_sys_path_separator_backslash__ -D__ck_karm_sys_path_separator_value=backslash -D__ck_sys_efi__ -D__ck_sys_value=efi -D__ck_toolchain_clang__ -D__ck_toolchain_value=clang -D__ck_version_'24_01'__ -D__ck_version_value='24.01'
In file included from src/libs/karm-base/tests/test-async.cpp:1:
src/libs/karm-base/async.h:358:46: error: 'Karm::Async::_Task<int>::promise_type::final_suspend()::Awaiter::await_suspend(std::coroutine_handle<void>)::Awaiter::_promise' is not a member of class 'Awaiter'
auto cfp = std::exchange(_promise->_cfp, Cfp::PAST_SUSPEND);
^
src/libs/karm-base/async.h:350:20: note: in instantiation of member function 'Karm::Async::_Task<int>::promise_type::final_suspend()::Awaiter::await_suspend' requested here
struct Awaiter {
^
src/libs/karm-base/async.h:360:25: error: 'Karm::Async::_Task<int>::promise_type::final_suspend()::Awaiter::await_suspend(std::coroutine_handle<void>)::Awaiter::_promise' is not a member of class 'Awaiter'
_promise->_resume->resume();
^
2 errors generated.
Full context:
https://github.com/skift-org/skift/blob/main/src/libs/karm-base/async.h#L358
So the plot thicken
