digitalmars.D.learn - Template specialization question
- Steven Schveighoffer (7/7) Nov 24 2016 void foo(T)(T t){writeln("a");}
- ag0aep6g (6/12) Nov 24 2016 Took me a bit to find it, but it is documented:
- Steven Schveighoffer (4/10) Nov 24 2016 Thanks. I did not find this! You learn something new about D
- Stefan Koch (6/13) Nov 24 2016 That is expected.
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
Nov 24 2016
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
Nov 24 2016
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_specializationThanks. I did not find this! You learn something new about D every day -Steve
Nov 24 2016
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? -SteveThat is expected. The general rule is go for the narrowest match. Since a matches a smaller set then b. a is selected.
Nov 24 2016