std.traits.isBoolean

Mike Parker aldacron at gmail.com
Sun Feb 18 15:12:50 UTC 2018


On Sunday, 18 February 2018 at 14:52:37 UTC, Tony wrote:
> At
> https://dlang.org/library/std/traits/is_boolean.html
>
> it has:
>
>
> enum isBoolean(T) = is(BooleanTypeOf!T) && !isAggregateType!T;
>
> per:
> https://dlang.org/library/std/traits/is_aggregate_type.html
>
> isAggregateType is true for [struct, union, class, interface].
>
> So BooleanTypeOf!T is true for structs, unions, classes and 
> interfaces? And if yes, why is that so?

Generally, no. But with alias this, it can be:

=====
import std.traits : BooleanTypeOf;
import std.stdio : writeln;

struct NoBool {
     int x;
}

struct AliasThisBool {
     bool b;
     alias b this;
}

void main()
{
     static if(is(BooleanTypeOf!NoBool)) writeln("NoBool");
     static if(is(BooleanTypeOf!AliasThisBool)) 
writeln("AliasThisBool");
}
=====


More information about the Digitalmars-d-learn mailing list