need solution for find error : Error: `TypeInfo` cannot be used with -betterC

user1234 user1234 at 12.de
Fri Jul 22 09:39:41 UTC 2022


On Friday, 22 July 2022 at 06:16:56 UTC, test123 wrote:
> On Friday, 22 July 2022 at 06:06:09 UTC, test123 wrote:
>> some time a huge project build throw error: "Error: `TypeInfo` 
>> cannot be used with -betterC"
>>
>> and it work before some days ago, there is no array allow but 
>> throw this error.  no location information (file and line).
>>
> [...]
> there is no array related code, but throw TypeInfo error

your bitfield size is not good, which leads to a `to!string` in a 
`static assert` that uses array under the hood. With a good size,

```d
struct UserSession {
     union {
         ulong   uint64;
         mixin(bitfields!(
                 UserIdT,    "user_id",  16,
                 UserRole,    "user_role",   2,
                 uint,       "login_count", BIT_COUNT,
                 uint, "pad", 16
             ));
     }
}
```

there's another error in `myToString()`

> Error: array concatenation of expression `cast(const(char)[])s 
> ~ (n > 4294967295LU ? "UL" : "U")` requires the GC which is not 
> available with -betterC

what's unfair is that both problems are caused by static 
evaluation/CTFE.
That's compiler bugs. The compiler thinks that the code will be 
used at run-time while it is only statically evaluated, hence 
there's no betterC restrictions.
For `myToString()`, maybe also that `pragma(ctfe)` would be 
required.

I see no solution excepted the one that is to write a simpler, 
stripped down, version of `bitfields`.


More information about the Digitalmars-d mailing list