Discussion on static reflection syntax in C++

Paul Backus snarwin at gmail.com
Tue Feb 23 16:10:26 UTC 2021


On Tuesday, 23 February 2021 at 15:49:14 UTC, Stefan Koch wrote:
>
> Yes it would be possible to reuse mixin, but iirc mixins 
> convert non-string expressions to string which would introduce 
> ambiguity, if I special case it __struct, or __type__.

My gut feeling is that it would not be too difficult to 
understand in practice, but yes, it would require special-casing.

> The restriction is imposed to avoid confusing situations, due 
> to the closeness of the mapping to real compiler entities you 
> cannot finalize the same struct* twice and such things.
> Modifying a __struct after it has been finalized or 'mixed-in' 
> is either useless or a bug.

Actually, now that I think of it, wouldn't the existing CTFE 
semantics prevent you from doing this anyway?

enum __struct s = someTypeFunction();
auto modify(ref __struct s) { ... }
enum result = modify(s); // Error: can't modify rvalue

Or if you tried to do it inside a type function:

auto someTypeFunction(...) {
     __struct s = ...;
     alias Before = mixin(s); // Error: can't read `s` at compile 
time
     modify(s);
}


More information about the Digitalmars-d mailing list