www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 4639] New: Built-in primitive types cannot be used as template alias parameters

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

           Summary: Built-in primitive types cannot be used as template
                    alias parameters
           Product: D
           Version: D2
          Platform: Other
        OS/Version: Linux
            Status: NEW
          Severity: normal
          Priority: P2
         Component: DMD
        AssignedTo: nobody puremagic.com
        ReportedBy: asitdepends gmail.com



---
import std.stdio;

template T(alias X) {
}

void main() {
    writeln(typeid(typeof(T!int)));
}

dmd 2.048 on linux produces an error for the above code.

Error: template instance T!(int) does not match template declaration T(alias X)

Built-in primitive types cannot be used as template alias parameters. Structs
and classes work well.

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


Don <clugdbug yahoo.com.au> changed:

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



This is not a bug. From the spec:
"Alias parameters enable templates to be parameterized with any type of D
symbol, including global names, local names, typedef names, module names,
template names, and template instance names. Literals can also be used as
arguments to alias parameters."

Built-in types are not on that list.

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




---

 This is not a bug. From the spec:
 "Alias parameters enable templates to be parameterized with any type of D
 symbol, including global names, local names, typedef names, module names,
 template names, and template instance names. Literals can also be used as
 arguments to alias parameters."
 
 Built-in types are not on that list.
Hmm.. I don't think so. "parameterized with any type of D symbol, including ..." Why are not built-in primitive types included in "any type of D symbol"? Is there any particular reason that user defined type names (like struct names) are allowed but built-in type names are not allowed? I think such a limitation is not natural. IMHO, If there is any good reason for the limitation, the phrase "any type of D symbol" should be removed from the spec. If there are no such reasons, then this should be considered as a bug. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Aug 13 2010
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=4639






 This is not a bug. From the spec:
 "Alias parameters enable templates to be parameterized with any type of D
 symbol, including global names, local names, typedef names, module names,
 template names, and template instance names. Literals can also be used as
 arguments to alias parameters."
 
 Built-in types are not on that list.
Hmm.. I don't think so. "parameterized with any type of D symbol, including ..." Why are not built-in primitive types included in "any type of D symbol"? Is there any particular reason that user defined type names (like struct names) are allowed but built-in type names are not allowed? I think such a limitation is not natural.
I basically agree with you, but syntactically, they are quite different, and it's an intentional decision by Walter. See for example bug 1341. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Aug 13 2010
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=4639




---
Still I could not get the reason.
So, I posted a message to the mailing list to discuss this.

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


nfxjfg gmail.com changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|RESOLVED                    |REOPENED
                 CC|                            |nfxjfg gmail.com
            Version|D2                          |D1 & D2
         Resolution|INVALID                     |



This spec is way to sh... I mean incomplete to interpret it literally. Also it
is known that the spec is downright incorrect in many cases. I don't know why
you would close this bug as invalid just because of the spec text. Also it's
very inconsistent to exclude built-in types. About it being intentional by
Walter: he actually fixed the mentioned bug 1341 and didn't close it as
invalid. Finally, it's a D1 problem too.

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


Don <clugdbug yahoo.com.au> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|REOPENED                    |RESOLVED
         Resolution|                            |INVALID



It's exactly the same issue as: typeof(int) is not legal.(In reply to comment

 This spec is way to sh... I mean incomplete to interpret it literally. Also it
 is known that the spec is downright incorrect in many cases. I don't know why
 you would close this bug as invalid just because of the spec text.
NO. I requested Walter to make this change, and he rejected this before. It is definitely NOT a bug. A built-in type is not a D symbol.
 Also it's
 very inconsistent to exclude built-in types. About it being intentional by
 Walter: he actually fixed the mentioned bug 1341 and didn't close it as
 invalid. 
No, *I* changed the description of the bug after discussion with Walter. It was originally "typeof(int) should probably be legal".
 Finally, it's a D1 problem too.
No it isn't. It's an enhancement which would break existing code. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Aug 13 2010
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=4639





 NO. I requested Walter to make this change, and he rejected this before. It is
 definitely NOT a bug. A built-in type is not a D symbol.
That's seriously stupid. Just another un-orthogonal feature that causes programmers headaches?
 No it isn't. It's an enhancement which would break existing code.
How? -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Aug 13 2010
prev sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=4639


Max Samukha <samukha voliacable.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |samukha voliacable.com



PDT ---
I can't believe the limitation is deliberate. Please remove it if technically
possible. Now the poor coder is forced to practice nonsense like:

template Foo(A...) if (A.length == 1) {}

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