digitalmars.D.learn - Array literal template parameter?
- "Maxime Chevalier" <maximechevalierb gmail.com> Nov 20 2012
- Timon Gehr <timon.gehr gmx.ch> Nov 20 2012
- "bearophile" <bearophileHUGS lycos.com> Nov 20 2012
- Jacob Carlborg <doob me.com> Nov 20 2012
I need to pass an array literal as a template parameter. The
reference on this website seems to imply this is possible, but
doesn't illustrate it. The obvious way doesn't seem to work:
mixin template MyTemplate(int[] arr) {}
Error: arithmetic/string type expected for value-parameter, not
int[]
Is there no way to do this without using a mixin and CTFE? I
don't think I can use tuple types because I need to initialize a
struct member using the array literal parameter.
Nov 20 2012
On 11/21/2012 12:22 AM, Maxime Chevalier wrote:I need to pass an array literal as a template parameter. The reference on this website seems to imply this is possible, but doesn't illustrate it. The obvious way doesn't seem to work: mixin template MyTemplate(int[] arr) {} Error: arithmetic/string type expected for value-parameter, not int[] Is there no way to do this without using a mixin and CTFE? I don't think I can use tuple types because I need to initialize a struct member using the array literal parameter.
I guess it should work, and this is a compiler bug. You can work around the limitation by using a template alias parameter.
Nov 20 2012
Maxime Chevalier:I need to pass an array literal as a template parameter. The reference on this website seems to imply this is possible, but doesn't illustrate it. The obvious way doesn't seem to work:
It's a known compiler bug, already in Bugzilla. In the meantime this is a workaround: template Foo(Args...) if (Args.length == 1) { pragma(msg, Args[0]); enum Foo = Args; } void main() { enum double[] a = [10, 20, 30]; auto x = Foo!a; } Bye, bearophile
Nov 20 2012
On 2012-11-21 00:22, Maxime Chevalier wrote:I need to pass an array literal as a template parameter. The reference on this website seems to imply this is possible, but doesn't illustrate it. The obvious way doesn't seem to work: mixin template MyTemplate(int[] arr) {} Error: arithmetic/string type expected for value-parameter, not int[] Is there no way to do this without using a mixin and CTFE? I don't think I can use tuple types because I need to initialize a struct member using the array literal parameter.
It seems an "alias" parameter is working: mixin template MyTemplate(alias arr) {} You might want to add some kind of template constraint on that. -- /Jacob Carlborg
Nov 20 2012









Timon Gehr <timon.gehr gmx.ch> 