Bug 586 – Cannot index tuple with non-type elements
Status
RESOLVED
Resolution
WORKSFORME
Severity
normal
Priority
P2
Component
dmd
Product
D
Version
D1 (retired)
Platform
x86
OS
All
Creation time
2006-11-23T05:38:00Z
Last change time
2014-02-15T13:21:00Z
Keywords
rejects-valid
Assigned to
bugzilla
Creator
kirklin.mcdonald
Comments
Comment #0 by kirklin.mcdonald — 2006-11-23T05:38:28Z
Take the following code:
template Tu(T ...) {
alias T[1] Tu; // Line 2
}
void foo() { }
void main() {
alias Tu!(real, int) T; // Works, no problem.
alias Tu!(4, int) U; // Results in error.
alias Tu!(foo, int) V; // Results in error.
alias Tu!("a", int) W; // Results in error.
}
The error in all three cases is:
test.d(2): tuple T is used as a type
test.d(X): template instance test.Tu!(<whatever>, int) error instantiating
Any tuple containing elements which are not types cannot be indexed. This limits certain kinds of advanced template code.
Bug 533 is a consequence of this bug. Bug 582 is essentially the same bug, but refers to slicing tuples rather than indexing them.
This is even true for the perhaps simpler version, with a pure expression tuple:
int F;
template A(T...)
{
alias T[0] B; // Fails here
}
alias A!(F) C;
aliases.d(5): tuple T is used as a type
aliases.d(8): template instance aliases.A!(F) error instantiating