Thread overview | |||||||
---|---|---|---|---|---|---|---|
|
July 06, 2006 [Issue 241] New: Template function ICE | ||||
---|---|---|---|---|
| ||||
http://d.puremagic.com/issues/show_bug.cgi?id=241 Summary: Template function ICE Product: D Version: 0.162 Platform: PC OS/Version: Linux Status: NEW Severity: normal Priority: P2 Component: DMD AssignedTo: bugzilla@digitalmars.com ReportedBy: oskar.linde@gmail.com T func(T, T c = 1)(T x) { return x * c; } void main() { func(1.0); } Generates (with DMD 0.162 linux): dmd: template.c:622: void TemplateDeclaration::declareParameter(Scope*, TemplateParameter*, Object*): Assertion `0' failed. -- |
July 06, 2006 Re: [Issue 241] New: Template function ICE | ||||
---|---|---|---|---|
| ||||
Posted in reply to d-bugmail | d-bugmail@puremagic.com wrote:
> http://d.puremagic.com/issues/show_bug.cgi?id=241
>
> Summary: Template function ICE
> Product: D
> Version: 0.162
> Platform: PC
> OS/Version: Linux
> Status: NEW
> Severity: normal
> Priority: P2
> Component: DMD
> AssignedTo: bugzilla@digitalmars.com
> ReportedBy: oskar.linde@gmail.com
>
>
> T func(T, T c = 1)(T x) { return x * c; }
> void main() { func(1.0); }
>
> Generates (with DMD 0.162 linux):
> dmd: template.c:622: void TemplateDeclaration::declareParameter(Scope*,
> TemplateParameter*, Object*): Assertion `0' failed.
>
>
Upon closer inspection, it appears that using a template TypeParameter type as a value type doesn't work.
Both:
func!(double)(1.0);
and
func!(double,1)(1.0);
give: "template instance [...] does not match any template declaration"
I would expect
template(T,T c) {...}
to work for any T such that T is a valid value type, and in other cases generate an error message on instantiation saying something like "T is not a valid template value type".
If, on the other hand, the use of a template type as value parameter type is not meant to be allowed, an error message on template declaration would be helpful.
/Oskar
|
July 06, 2006 Re: [Issue 241] New: Template function ICE | ||||
---|---|---|---|---|
| ||||
Posted in reply to Oskar Linde | Oskar Linde wrote:
> d-bugmail@puremagic.com wrote:
>> http://d.puremagic.com/issues/show_bug.cgi?id=241
>>
>> Summary: Template function ICE
>> Product: D
>> Version: 0.162
>> Platform: PC
>> OS/Version: Linux
>> Status: NEW
>> Severity: normal
>> Priority: P2
>> Component: DMD
>> AssignedTo: bugzilla@digitalmars.com
>> ReportedBy: oskar.linde@gmail.com
>>
>>
>> T func(T, T c = 1)(T x) { return x * c; }
>> void main() { func(1.0); }
>>
>> Generates (with DMD 0.162 linux):
>> dmd: template.c:622: void TemplateDeclaration::declareParameter(Scope*,
>> TemplateParameter*, Object*): Assertion `0' failed.
>>
>>
>
> Upon closer inspection, it appears that using a template TypeParameter type as a value type doesn't work.
>
> Both:
>
> func!(double)(1.0);
> and
> func!(double,1)(1.0);
>
> give: "template instance [...] does not match any template declaration"
>
> I would expect
>
> template(T,T c) {...}
>
> to work for any T such that T is a valid value type, and in other cases generate an error message on instantiation saying something like "T is not a valid template value type".
>
> If, on the other hand, the use of a template type as value parameter type is not meant to be allowed, an error message on template declaration would be helpful.
>
> /Oskar
Further attempts resulted in issue 242 and found that the following does work:
template func(T) {
template f(T c = 1)(T x) { return c*x; }
}
void main() {
func!(double).f(5.0); // OK
func!(double).f!(2.0)(5.0); // OK
}
/Oskar
|
July 07, 2006 Re: [Issue 241] New: Template function ICE | ||||
---|---|---|---|---|
| ||||
Posted in reply to d-bugmail Attachments: | d-bugmail@puremagic.com schrieb am 2006-07-06: > http://d.puremagic.com/issues/show_bug.cgi?id=241 > T func(T, T c = 1)(T x) { return x * c; } > void main() { func(1.0); } > > Generates (with DMD 0.162 linux): > dmd: template.c:622: void TemplateDeclaration::declareParameter(Scope*, > TemplateParameter*, Object*): Assertion `0' failed. Added to DStress as http://dstress.kuehne.cn/run/b/bug_template_622_A.d http://dstress.kuehne.cn/run/b/bug_template_622_B.d http://dstress.kuehne.cn/run/b/bug_template_622_C.d Thomas |
July 18, 2006 [Issue 241] Template function ICE | ||||
---|---|---|---|---|
| ||||
Posted in reply to d-bugmail | http://d.puremagic.com/issues/show_bug.cgi?id=241 jpelcis@gmail.com changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED Resolution| |FIXED ------- Comment #1 from jpelcis@gmail.com 2006-07-18 16:39 ------- Fixed DMD 0.163. -- |
Copyright © 1999-2021 by the D Language Foundation