-
-
Notifications
You must be signed in to change notification settings - Fork 740
Open
Labels
Description
I see somethings happening around bitfields I suggest this code:
struct foo{
bool iscircle:1;
uint rest:31;
}
struct bar{
bool iscircle;
uint rest;
}
template Val(alias A){//belongs in std.meta
enum Val=A;
}
template hasbitfields(T){//belongs in std.traits
static if( ! is(T==struct)){
enum hasbitfields=false;
} else {
alias hasbitfields_=Val!false;
static foreach(A;T.tupleof){
static if(__traits(isBitfield,A)){
hasbitfields_=Val!true;
}}
enum hasbitfields=hasbitfields_;
}}
static assert(hasbitfields!foo);
static assert( ! hasbitfields!bar);