digitalmars.D.learn - Variadic template problems..?
- simendsjo <simen.endsjo pandavre.com> Jun 25 2011
- simendsjo <simen.endsjo pandavre.com> Jun 25 2011
I'm trying to create an array of arrays in a templated struct, but I'm
having some problems.
Given the struct below, I want to construct an "S.Array[3]" array.
My first template solution, T, also doesn't compile.. Why?
struct S(int C, int R, E) {
alias E[R][C] Array;
}
/+
// This gives me an syntax error, but I have no idea why
// "no identifier for declarator A[0]"
template T(A...) {
alias A[0].Array[A.length] T;
}
+/
// This works though..
template U(T, A...) {
alias T.Array[A.length+1 /+include+/] U;
}
unittest {
alias S!(1,1,float) S1;
alias U!(S1, S1) Arr; // I want float[1][1][2]
static assert(Arr.length == 2); // ok
writeln(typeid(Arr[0])); // float[1][1][2][0] ... shouldn't this be
float[1][1][2]?
writeln(typeid(typeof(Arr[0]))); // float[1][1] ... What happens here?
writeln(typeid(S1.Array)); // float[1][1]
}
Jun 25 2011
On 25.06.2011 18:08, simendsjo wrote:I'm trying to create an array of arrays in a templated struct, but I'm having some problems. Given the struct below, I want to construct an "S.Array[3]" array. My first template solution, T, also doesn't compile.. Why? struct S(int C, int R, E) { alias E[R][C] Array; } /+ // This gives me an syntax error, but I have no idea why // "no identifier for declarator A[0]" template T(A...) { alias A[0].Array[A.length] T; } +/ // This works though.. template U(T, A...) { alias T.Array[A.length+1 /+include+/] U; } unittest { alias S!(1,1,float) S1; alias U!(S1, S1) Arr; // I want float[1][1][2] static assert(Arr.length == 2); // ok writeln(typeid(Arr[0])); // float[1][1][2][0] ... shouldn't this be float[1][1][2]? writeln(typeid(typeof(Arr[0]))); // float[1][1] ... What happens here? writeln(typeid(S1.Array)); // float[1][1] }
I think the error in T might be a bug. The following works: template T2(A...) { alias A[0] First; alias First.Array[A.length] T; } writeln(typeid(Arr2.T)); // Now this actually prints float[1][1][2] as I wanted!
Jun 25 2011








simendsjo <simen.endsjo pandavre.com>