Как правильно настроить coroutine_trairs для методов класса?

Хочу сделать из мтеода класса коуртину, но компилятор выдает следующую ошибку

error: unable to find the promise type for this coroutine
52 | std::vector vec = co_await awaitable_func1();

Вот прмиер кода.

#include "asio_tcp_coro.h"
#include "coroutine"
#include "iostream"



auto awaitable_func1() {
    struct Awaitable {
        std::vector<int> vec;

        bool await_ready() { return false; }

        void await_suspend(std::coroutine_handle<> coroutine) {
            vec = std::vector<int>{1, 2, 3, 4, 5};
            coroutine.resume();
        }

        auto await_resume() {
            return vec;
        }
    };
    return Awaitable{};
}


class Coroutine {
public:
    void call(int);
};

struct Promise {
    Promise(Coroutine){}
    void get_return_object() {}

    std::suspend_never initial_suspend() { return {}; }

    std::suspend_never final_suspend() { return {}; }

    void return_void() {}

    void unhandled_exception() { std::terminate(); }
};


template<>
struct std::coroutine_traits<void, Coroutine, int> {
    using promise_type = Promise;
};


void Coroutine::call(int a) {
    std::vector<int> vec = co_await awaitable_func1();
    for (size_t i = 0; i < vec.size(); i++) {
        std::cout << vec[i] + a << std::endl;
    }
}


int main() {
    Coroutine a;
    a.call(5);
    return 0;
};

Ответы (0 шт):