.. _halo_spawn_tuple:

tmc::spawn_tuple()
------------------------------------------------------------------------------------------------
``tmc::spawn_tuple()`` produces an awaitable that supports HALO when used with Clang 20+ via the ``[[clang::coro_await_elidable_argument]]`` attribute.

For HALO to work, ``spawn_tuple()`` must be awaited directly as a prvalue in a ``co_await`` expression. Storing the result in a variable before awaiting prevents HALO from being applied.

.. code-block:: cpp

   // HALO: spawn_tuple() is directly awaited
   auto results = co_await tmc::spawn_tuple(task_int(1), task_int(2));

   // Non-HALO: spawn_tuple() stored in variable
   auto spawned = tmc::spawn_tuple(task_int(3), task_int(4));
   auto results = co_await std::move(spawned);

   // Non-HALO: spawn_tuple() with run_on() customization - due to member
   // function call, this cannot be elided
   auto results = co_await tmc::spawn_tuple(task_int(3), task_int(4))
                    .run_on(tmc::current_executor());

Main Documentation
------------------------------------------------------------------------------------------------
For full documentation on ``tmc::spawn_tuple()``, see :literal_ref:`tmc::spawn_tuple()<spawn_tuple>`.
