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