C++ Logo

std-proposals

Advanced search

Re: [std-proposals] Recursive macros

From: Marcin Jaczewski <marcinjaczewski86_at_[hidden]>
Date: Fri, 10 Nov 2023 22:00:27 +0100
pt., 10 lis 2023 o 13:42 Nikl Kelbon via Std-Proposals
<std-proposals_at_[hidden]> napisał(a):
>
> 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
>
>

Could you provide more real life examples/problems where this could be useful?
In your pdf the only example of this was `tie_aggregate` but
this was more of a problem in C++ than
something that should be fixed by macros.
There was even a proposal that had a proper solution for this:

```
auto [...pack] = aggregate;
```

Another thing is how your proposal is better than the good old X Macro
technique?



> пт, 10 нояб. 2023 г. в 16:37, Andrey Semashev via Std-Proposals <std-proposals_at_[hidden]>:
>>
>> 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_at_[hidden]
>> https://lists.isocpp.org/mailman/listinfo.cgi/std-proposals
>
> --
> Std-Proposals mailing list
> Std-Proposals_at_[hidden]
> https://lists.isocpp.org/mailman/listinfo.cgi/std-proposals

Received on 2023-11-10 21:00:42