dmd/compiler/test/fail_compilation/bitintro.d

38 lines
1 KiB
D

/* REQUIRED_ARGS: -preview=bitfields
*/
struct S
{
int a;
int b:5, c:6;
}
static if (0)
{
pragma(msg, __traits(isBitfield, S.a));
pragma(msg, __traits(isBitfield, S.b));
pragma(msg, S.b.bitoffsetof);
pragma(msg, S.b.bitwidth);
pragma(msg, S.c.bitoffsetof);
pragma(msg, S.c.bitwidth);
pragma(msg, S.a.bitoffsetof);
pragma(msg, S.a.bitwidth);
}
static assert(__traits(isBitfield, S.a) == false);
static assert(__traits(isBitfield, S.b) == true);
static assert(S.b.bitoffsetof == 0);
static assert(S.b.bitwidth == 5);
static assert(S.c.bitoffsetof == 5);
static assert(S.c.bitwidth == 6);
/* TEST_OUTPUT:
---
fail_compilation/bitintro.d(6): Error: `a` is not a bitfield, cannot apply `bitoffsetof`
fail_compilation/bitintro.d(37): while evaluating: `static assert(a.bitoffsetof)`
fail_compilation/bitintro.d(6): Error: `a` is not a bitfield, cannot apply `bitwidth`
fail_compilation/bitintro.d(38): while evaluating: `static assert(a.bitwidth)`
---
*/
static assert(S.a.bitoffsetof);
static assert(S.a.bitwidth);