Check if template has been passed a reference type or value type?

sigod via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Wed Jun 24 10:57:22 PDT 2015


On Sunday, 7 June 2015 at 15:39:17 UTC, Marc Schütz wrote:
> On Sunday, 7 June 2015 at 15:17:27 UTC, 1967 wrote:
>> I've got a template that takes in a type. Sometimes the type 
>> is a class, sometimes a struct, sometimes just an int. It 
>> doesn't much matter what it is, but if it's a reference type I 
>> need to check if it's null so I can make it not null before 
>> using it. I get an error if I try to check if a value type is 
>> null so I'd like to put a "static if" to check if the type 
>> passed to the template is a nullable one so I can avoid 
>> checking the value types passed in. What do I have to do to 
>> check for nullability?
>
> You can directly check whether it allows comparison with null:
>
>     static if(is(typeof(value is null) : bool)) {
>         if(value is null)
>           ...
>     }

Don't forget [`Nullable`][0] type, which won't pass this check.

[0]: http://dlang.org/phobos/std_typecons.html#.Nullable


More information about the Digitalmars-d-learn mailing list