C++ Logo

std-proposals

Advanced search

Re: [std-proposals] Recursive macros

From: Nikl Kelbon <kelbonage_at_[hidden]>
Date: Sat, 11 Nov 2023 16:05:55 +0400
> There was even

'was' =(
> real life examples/problems

There are example from nlohmann json, magic enum, i use it for my
de/serialization in personal project

> the good old X Macro

As you see no one uses this 'good old' technique, no nlohmann json, no
boost preprocessor. Because this do not solve those problems

сб, 11 нояб. 2023 г. в 01:00, Marcin Jaczewski <marcinjaczewski86_at_[hidden]
>:

> 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-11 12:06:07