www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 5295] New: Template basename recognized as valid type inside template - shouldn't be.

reply d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=5295

           Summary: Template basename recognized as valid type inside
                    template - shouldn't be.
           Product: D
           Version: D2
          Platform: x86
        OS/Version: Windows
            Status: NEW
          Severity: normal
          Priority: P2
         Component: DMD
        AssignedTo: nobody puremagic.com
        ReportedBy: ah08010-d yahoo.com


--- Comment #0 from Austin Hastings <ah08010-d yahoo.com> 2010-12-01 03:45:56
PST ---
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();
}

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Dec 01 2010
next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=5295


Simen Kjaeraas <simen.kjaras gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |simen.kjaras gmail.com


--- Comment #1 from Simen Kjaeraas <simen.kjaras gmail.com> 2010-12-01 03:53:14
PST ---
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.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Dec 01 2010
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=5295


Simen Kjaeraas <simen.kjaras gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |blood.of.life gmail.com


--- Comment #2 from Simen Kjaeraas <simen.kjaras gmail.com> 2010-12-01 05:37:26
PST ---
*** Issue 5298 has been marked as a duplicate of this issue. ***

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Dec 01 2010
prev sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=5295


Steven Schveighoffer <schveiguy yahoo.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
                 CC|                            |schveiguy yahoo.com
         Resolution|                            |INVALID


--- Comment #3 from Steven Schveighoffer <schveiguy yahoo.com> 2010-12-03
18:20:05 PST ---
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.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Dec 03 2010