On Wed, 2023-01-18 at 17:10 +0100, Alexander Lobakin wrote: > > Have you tried combining it with FIELD_PREP() using > __builtin_choose_expr() + __builtin_is_constexpr() (or > __builtin_constant_p() depending on which will satisfy the compiler)? > I'm not saying it's 100% possible, but worth trying. > I haven't tried it that way, but I tried rewriting FIELD_PREP() itself to be constant-compatible, and as soon as the compiler saw __builtin_constant_p() in the initializer it already complained that it was non-constant... I didn't think of __builtin_choose_expr, but it doesn't work either because it only promises that the unused expression is not *evaluated*, not that it's not "looked at", so it still complains both ways (in the constant case that you can't have ({ }) braced groups, and in the non- constant case that the _CONST version is bad... johannes