Thread overview | ||||||
---|---|---|---|---|---|---|
|
June 07, 2015 Check if template has been passed a reference type or value type? | ||||
---|---|---|---|---|
| ||||
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? |
June 07, 2015 Re: Check if template has been passed a reference type or value type? | ||||
---|---|---|---|---|
| ||||
Posted in reply to 1967 | 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)
...
}
|
June 24, 2015 Re: Check if template has been passed a reference type or value type? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Marc Schütz | 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 |
June 25, 2015 Re: Check if template has been passed a reference type or value type? | ||||
---|---|---|---|---|
| ||||
Posted in reply to 1967 | 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? A simple test: http://dpaste.dzfl.pl/3b8c5a0bb69c |
Copyright © 1999-2021 by the D Language Foundation