Bug 20776 – No error is given out for wrong static if expression

Status
RESOLVED
Resolution
INVALID
Severity
critical
Priority
P1
Component
dmd
Product
D
Version
D2
Platform
All
OS
All
Creation time
2020-04-27T03:26:30Z
Last change time
2020-04-27T09:38:56Z
Assigned to
No Owner
Creator
Heromyth

Comments

Comment #0 by bitworld — 2020-04-27T03:26:30Z
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)[]); }
Comment #1 by moonlightsentinel — 2020-04-27T09:38:56Z
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