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>
 Timon Gehr <timon.gehr gmx.ch> 