In GCC 15, std::noop_coroutine's definition is
{ return std::noop_coroutine_handle(); }
std::noop_coroutine_handle is defined by:
using noop_coroutine_handle = std::coroutine_handle<std::noop_coroutine_promise>;
To get a no-op coroutine, we write
std::noop_coroutine()
which (I guess) is equivalent to
std::noop_coroutine_handle{}
and
std::coroutine_handle<std::noop_coroutine_promise>{}
So I believe the standard library only needs to provide std::noop_coroutine_promise (along with certain specializations that use it as a template parameter).
Why did the standard introduce three new symbols? (Feels a bit arbitrary—just my personal opinion.)
mt19937_64even though we can just plug the canonical values intomersenne_twister_engine- ergonomicsstd::noop_coroutinemight be good enough as well, since we can usestd::noop_coroutine()to refer tostd::noop_coroutine_handle{}and so on.std? It's a namespace. It is reserved for the standard. All the names there are up for grabs.