Bug 17219 – variable shadowing and overload sets

Status
NEW
Severity
normal
Priority
P3
Component
dmd
Product
D
Version
D2
Platform
All
OS
All
Creation time
2017-02-23T15:09:54Z
Last change time
2024-12-13T18:51:43Z
Assigned to
No Owner
Creator
John Colvin
Moved to GitHub: dmd#19237 →

Comments

Comment #0 by john.loughran.colvin — 2017-02-23T15:09:54Z
void foo(alias bar)() { static int bar0(T...)(T t) { return 0; } alias bar = bar0; import std.stdio; writeln(bar(3)); } int blah(T)(T t) { return 1; } void main() { foo!blah; } currently this successfully compiles and prints 0. I think it should either fail to compile ("bar already defined") or print 1 as blah and bar0 form an overload set.
Comment #1 by john.loughran.colvin — 2017-02-23T15:18:07Z
One also gets this weirdness: void foo(alias bar)() { static int bar0(T...)(T t) { return 0; } alias bar = bar0; pragma(msg, __traits(identifier, __traits(parent, bar!int))); pragma(msg, __traits(identifier, __traits(parent, __traits(parent, bar!int)))); } int blah(T)(T t) { return 1; } void main() { foo!blah; } output: bar0 bar0 I.e. __traits(parent, ...) ends up idempotent.
Comment #2 by robert.schadek — 2024-12-13T18:51:43Z
THIS ISSUE HAS BEEN MOVED TO GITHUB https://github.com/dlang/dmd/issues/19237 DO NOT COMMENT HERE ANYMORE, NOBODY WILL SEE IT, THIS ISSUE HAS BEEN MOVED TO GITHUB