digitalmars.D.learn - null as parametr
- AntonSotov (21/21) Jul 30 2016 import std.stdio;
- Seb (11/32) Jul 30 2016 just have a look with pragma(msg, T) what the compiler is
- AntonSotov (3/3) Jul 30 2016 2 Seb
- Andrew Godfrey (9/12) Jul 31 2016 An example of Seb's warning:
import std.stdio;
void myFunc(T)(in T val) {
static if(is(T == string)) {
writeln("string: ", val);
}
static if(is(T : long)) {
writeln("long: ", val);
}
static if // WHAT HERE ?
writeln("null");
}
}
int main(string[] args)
{
myFunc("abc");
myFunc(123);
myFunc(null);
return 0;
}
//--------------------------------------------------
How to transfer <null> as parameter type?
Jul 30 2016
On Sunday, 31 July 2016 at 05:22:40 UTC, AntonSotov wrote:
import std.stdio;
void myFunc(T)(in T val) {
static if(is(T == string)) {
writeln("string: ", val);
}
static if(is(T : long)) {
writeln("long: ", val);
}
static if // WHAT HERE ?
writeln("null");
}
}
int main(string[] args)
{
myFunc("abc");
myFunc(123);
myFunc(null);
return 0;
}
//--------------------------------------------------
How to transfer <null> as parameter type?
just have a look with pragma(msg, T) what the compiler is
inferring ;-)
-> typeof(null) seems to be a Voldemord type that can't be
expressed directly, hence you can do:
static if(is(T : typeof(null))) {
writeln("null");
}
... but does this really help you? A string can be null too, so
whatever you do you most likely should check that with `val is
null` too.
Jul 30 2016
2 Seb Thank you! is (T: typeof (null)) - very comfortable
Jul 30 2016
On Sunday, 31 July 2016 at 05:41:55 UTC, AntonSotov wrote:2 Seb Thank you! is (T: typeof (null)) - very comfortableAn example of Seb's warning: What happens if you have: string s = null; MyFunc(s); I'm guessing it doesn't do what you want. But it isn't clear what you want - null is a value, not a type. It's just as if you were saying: is (T: typeof (-3))
Jul 31 2016








Andrew Godfrey <X y.com>