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