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