No any error is given out while compiling when a undefined function used in static if Here is the test code: import std.stdio; // import std.traits; // Forgot to import this, then no error is given out while compiling void test(T)() { static if(is(T : K[], K) && is(Unqual!K == ubyte)) { writeln("OK"); } else { writeln("Wrong"); } } void main() { test!(const(ubyte)[]); }
This is the expected behaviour of an is-expression. Unqal is not a function but a template aliasing to another type. `Unqal!K` isn't a valid type once you omit the import which causes the `is` to evaluate to false. > Type is the type being tested. It must be syntactically correct, but it > need not be semantically correct. If it is not semantically correct, the > condition is not satisfied. See https://dlang.org/spec/expression.html#is_expression