Thread overview
[Issue 241] New: Template function ICE
Jul 06, 2006
d-bugmail
Jul 06, 2006
Oskar Linde
Jul 06, 2006
Oskar Linde
Jul 07, 2006
Thomas Kuehne
Jul 18, 2006
d-bugmail
July 06, 2006
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
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
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
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
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.


--