Bug 5295 – Template basename recognized as valid type inside template - shouldn't be.

Status
RESOLVED
Resolution
INVALID
Severity
normal
Priority
P2
Component
dmd
Product
D
Version
D2
Platform
x86
OS
Windows
Creation time
2010-12-01T03:45:00Z
Last change time
2010-12-03T18:20:05Z
Assigned to
nobody
Creator
ah08010-d

Comments

Comment #0 by ah08010-d — 2010-12-01T03:45:56Z
This code runs with dmd -run under 2.49. Note the array C[], which I don't think is valid. (If this IS considered valid, can someone explain the semantics to me?) ====== module scratch; class C(T) { C[] ary; void foo() { foreach( a; ary ) { a.bar(); } } void bar() { } } void main() { auto c = new C!int; c.foo(); }
Comment #1 by simen.kjaras — 2010-12-01T03:53:14Z
This seems not to be mentioned on http://digitalmars.com/d/2.0/template.html, but it is well-known and oft-used. The idea is that instead of having to type Foo!(int, bar, 42, MeaningOfLiff) everytime you want typeof(this), you can just use Foo. Foo!(int, bar, 42, MeaningOfLiff) still works, so nothing (as far as I can see) is lost.
Comment #2 by simen.kjaras — 2010-12-01T05:37:26Z
*** Issue 5298 has been marked as a duplicate of this issue. ***
Comment #3 by schveiguy — 2010-12-03T18:20:05Z
It's not explicitly mentioned, but it is covered indirectly. Note that: class C(T) { ... } is equivalent to template C(T) { class C { ... } } If you look at it this way, then it becomes: template C(T) { class C { C[] ary; ... } } when you look at the class definition, it makes sense that C inside the class refers to the class itself. as it would outside the template.