Here is examples, recursion stops when `__VA_OPT__` will not expands (`__VA_ARGS__` empty), In case on infitine recursion there are impl-defined limit

implementation and discurssion here:
https://github.com/llvm/llvm-project/pull/65851


пт, 10 нояб. 2023 г. в 16:37, Andrey Semashev via Std-Proposals <std-proposals@lists.isocpp.org>:
On 11/10/23 15:22, Nikl Kelbon via Std-Proposals wrote:
> Hi all, I would like to propose a minor addition to the preprocessor,
> that has the potencial to significantly simplify writing and reading
> macros, give new features that were not there.
>
> I propose a special token '__THIS_MACRO__'(similar to '__VA_ARGS__' and
> '__VA_OPT__' ), which will add the possibility to write recursive macros.
>
> Simple example:
>
> #define fold_right( op , head , ...) \
> ( head __VA_OPT__ ( op __THIS_MACRO__(op, __VA_ARGS__ )))
> /* expands to (1 + (2 + (3))) */
> int i = fold_right(+ , 1 , 2 , 3 );
>
>
> This can be used in many different  scenarios,
> * declaring enums with enum info(like names, count, etc)
> * boost describe struct
> * ... more examples in 'pdf' ... 

When does the recursion stop? IOW, what one is supposed to write in the
macro definition to stop the recursion at a certain point?

--
Std-Proposals mailing list
Std-Proposals@lists.isocpp.org
https://lists.isocpp.org/mailman/listinfo.cgi/std-proposals