https://issues.dlang.org/show_bug.cgi?id=19517
Issue ID: 19517
Summary: Spurious compiler warning with const toHash and alias
this classes
Product: D
Version: D2
Hardware: All
OS: All
Status: NEW
Severity: normal
Priority: P1
Component: dmd
Assignee: [email protected]
Reporter: [email protected]
Code:
------
class C { }
struct S
{
C c;
alias c this;
}
Nullable!S s;
struct Nullable(T) // reduced from std.typecons.Nullable
{
union U
{
T t;
}
U u = U.init;
size_t toHash() const @safe nothrow
{
static if (__traits(compiles, .hashOf(u.t))) {}
return 0;
}
}
------
Compiler output:
------
Warning: struct S has method toHash, however it cannot be called with const(S)
this.
------
This warning is spurious, because the whole point of the static if is to check
for exactly this case, and to provide workaround code for it. As things stand,
it is impossible to avoid the warning, even if there is workaround code for it.
Related to issue #18682 that introduced .toHash to std.typecons.Nullable. The
bug here, however, is related the compiler, and appears to be related to the
compiler confusing Nullable.toHash with S.c.toHash because of the `alias this`.
--