Thread overview | ||||||
---|---|---|---|---|---|---|
|
November 24, 2016 Template specialization question | ||||
---|---|---|---|---|
| ||||
void foo(T)(T t){writeln("a");} void foo(T...)(T t){writeln("b");} foo(1); Compiles? If so, which prints out? I was surprised by the answer. I can't find docs for it. Is the behavior intended? -Steve |
November 24, 2016 Re: Template specialization question | ||||
---|---|---|---|---|
| ||||
Posted in reply to Steven Schveighoffer | On 11/24/2016 06:47 PM, Steven Schveighoffer wrote: > void foo(T)(T t){writeln("a");} > void foo(T...)(T t){writeln("b");} > > foo(1); > > Compiles? If so, which prints out? > > I was surprised by the answer. I can't find docs for it. Is the behavior > intended? Took me a bit to find it, but it is documented: "If both a template with a sequence parameter and a template without a sequence parameter exactly match a template instantiation, the template without a TemplateSequenceParameter is selected." https://dlang.org/spec/template.html#variadic_template_specialization |
November 24, 2016 Re: Template specialization question | ||||
---|---|---|---|---|
| ||||
Posted in reply to Steven Schveighoffer | On Thursday, 24 November 2016 at 17:47:04 UTC, Steven Schveighoffer wrote:
> void foo(T)(T t){writeln("a");}
> void foo(T...)(T t){writeln("b");}
>
> foo(1);
>
> Compiles? If so, which prints out?
>
> I was surprised by the answer. I can't find docs for it. Is the behavior intended?
>
> -Steve
That is expected.
The general rule is go for the narrowest match.
Since a matches a smaller set then b.
a is selected.
|
November 24, 2016 Re: Template specialization question | ||||
---|---|---|---|---|
| ||||
Posted in reply to ag0aep6g | On Thursday, 24 November 2016 at 17:59:55 UTC, ag0aep6g wrote:
>
> Took me a bit to find it, but it is documented:
>
> "If both a template with a sequence parameter and a template without a sequence parameter exactly match a template instantiation, the template without a TemplateSequenceParameter is selected."
>
> https://dlang.org/spec/template.html#variadic_template_specialization
Thanks. I did not find this! You learn something new about D every day
-Steve
|
Copyright © 1999-2021 by the D Language Foundation