digitalmars.D.learn - Array literal template parameter?
- Maxime Chevalier (9/9) Nov 20 2012 I need to pass an array literal as a template parameter. The
- Timon Gehr (3/11) Nov 20 2012 I guess it should work, and this is a compiler bug. You can work around
- bearophile (13/16) Nov 20 2012 It's a known compiler bug, already in Bugzilla.
- Jacob Carlborg (6/14) Nov 20 2012 It seems an "alias" parameter is working:
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> 