Bug 15037 – method TypeInfo.init shadows built-in init property

Status
RESOLVED
Resolution
DUPLICATE
Severity
normal
Priority
P1
Component
druntime
Product
D
Version
D2
Platform
All
OS
All
Creation time
2015-09-11T11:26:00Z
Last change time
2015-10-08T05:19:06Z
Assigned to
ag0aep6g
Creator
ag0aep6g

Comments

Comment #0 by ag0aep6g — 2015-09-11T11:26:17Z
Found by Rene Zwanenburg: http://forum.dlang.org/post/[email protected] Reduced test case: ---- static assert(is(typeof(TypeInfo.init) == TypeInfo)); /* fails; should pass */ ---- Rene's test case: ---- void main() {         import std.algorithm.mutation : remove;                  TypeInfo_Class[] arr;         TypeInfo_Class c;         arr = arr.remove!(a => a is c); } ---- The problem is that TypeInfo defines an "init" method which shadows the built-in init property. This confuses templates when they expect T.init to be the init value of T. In Rene's code, ElementType is the one trying to use the init property. In my opinion, the compiler should reject members called "init". A quick test shows that it already rejects "sizeof" and "mangleof".
Comment #1 by ag0aep6g — 2015-10-07T17:37:19Z
Pull request to start fixing this by renaming the method to "initializer": https://github.com/D-Programming-Language/druntime/pull/1403
Comment #2 by ag0aep6g — 2015-10-08T05:19:06Z
*** This issue has been marked as a duplicate of issue 12233 ***