[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