.. _fork_clang:

tmc::fork_clang()
------------------------------------------------------------------------------------------------
``tmc::fork_clang()`` is a HALO-optimized version of ``spawn().fork()`` that uses the ``[[clang::coro_await_elidable_argument]]`` attribute when compiled with Clang 20+.

For HALO to work, ``fork_clang()`` 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: fork_clang() is directly awaited
   auto forked = co_await tmc::fork_clang(some_task());
   do_some_work();
   co_await std::move(forked);

   // Non-HALO: fork_clang() stored in variable
   auto dummy = tmc::fork_clang(some_task());
   auto forked = co_await std::move(dummy);
   do_some_work();
   co_await std::move(forked);

   // Non-HALO equivalent: spawn().fork() - due to member function call,
   // this cannot be elided
   auto forked = tmc::spawn(some_task()).fork();
   auto results = co_await std::move(forked);

Main Documentation
------------------------------------------------------------------------------------------------
For the non-HALO version, see :literal_ref:`tmc::spawn()<spawn>`.

API Reference
------------------------------------------------------------------------------------------------
.. doxygenfunction:: tmc::fork_clang(Awaitable&& Aw, Exec&& Executor, size_t Priority)
