[Issue 241] New: Template function ICE

Oskar Linde oskar.lindeREM at OVEgmail.com
Thu Jul 6 09:14:24 PDT 2006


Oskar Linde wrote:
> d-bugmail at 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 at digitalmars.com
>>         ReportedBy: oskar.linde at 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



More information about the Digitalmars-d-bugs mailing list