digitalmars.D.bugs - [Issue 19884] New: Error: alias op = op; cannot alias itself, use a
- d-bugmail puremagic.com (61/61) May 18 2019 https://issues.dlang.org/show_bug.cgi?id=19884
https://issues.dlang.org/show_bug.cgi?id=19884 Issue ID: 19884 Summary: Error: alias op = op; cannot alias itself, use a qualified name to create an overload set Product: D Version: D2 Hardware: All OS: All Status: NEW Severity: regression Priority: P1 Component: dmd Assignee: nobody puremagic.com Reporter: hsteoh quickfur.ath.cx This regression is so strange that I'm not sure what's the best title for the bug beyond the compiler's strange error message. Reduced code: ------ mixin template genCtEvaluate() { void evaluate(alias op)() { } } struct S { mixin genCtEvaluate!() mixinEval; alias evaluate = mixinEval.evaluate; void evaluate() { } } alias List(Ops...) = Ops; void main() { S g; foreach (op; List!(0)) { g.evaluate!op(); } } ------ Compiler output: ------ expr.d(3): Error: alias op = op; cannot alias itself, use a qualified name to create an overload set expr.d(17): while looking for match for evaluate!op ------ This error is very strange, because 'op' is supposed to be a local symbol in the scope of the foreach, so why does it clash with the 'op' in the 'alias op' parameter of genCtEvaluate.evaluate? Furthermore, renaming the alias parameter, e.g., to `alias _op` elicits this even stranger error message: ------ expr.d(17): Error: undefined identifier op expr.d(17): while looking for match for evaluate!op ------ Very odd, since op is declared right in the line above as the foreach loop variable. Also, this strange behaviour goes away if the `void evaluate() {}` overload is commented out. This is a recent regression, though I haven't compiled the unreduced version of this code for a while now, so not 100% sure exactly when the regression was introduced. For sure it works back in 2.079.0. --
May 18 2019