Using boost::coroutine, resumable functions are already possible. I've implented an AWAIT() macro in my scheduler and its usage looks like this:
https://github.com/flipcoder/kit/blob/master/toys/src/echo.c...
Implementation upon boost::coroutine here: https://github.com/flipcoder/kit/blob/master/include/kit/asy...
This is only a proof of concept, but it works.