Thread overview | ||||||||
---|---|---|---|---|---|---|---|---|
|
March 04, 2011 Iterating a typle tuple of templates | ||||
---|---|---|---|---|
| ||||
I am allowed to create a type tuple of function templates, but then it seems I am not allowed to use a static foreach on that type tuple: import std.typetuple; int foo(T)(T x) { return 0; } void main() { alias TypeTuple!(foo, foo) t2; static assert(t2[0](0) == 0); // OK static assert(t2[1](0) == 0); // OK foreach (t; t2) {} // Error } Is this expected, a bug in my code, a known bug in DMD, a new DMD bug, a limitation meant to be removed, etc? Bye, bearophile |
March 04, 2011 Re: Iterating a typle tuple of templates | ||||
---|---|---|---|---|
| ||||
Posted in reply to bearophile | On 2011-03-04 04:37, bearophile wrote: > I am allowed to create a type tuple of function templates, but then it seems I am not allowed to use a static foreach on that type tuple: > > > import std.typetuple; > > int foo(T)(T x) { > return 0; > } > > void main() { > alias TypeTuple!(foo, foo) t2; > static assert(t2[0](0) == 0); // OK > static assert(t2[1](0) == 0); // OK > foreach (t; t2) {} // Error > } > > > Is this expected, a bug in my code, a known bug in DMD, a new DMD bug, a limitation meant to be removed, etc? > > Bye, > bearophile Maybe you can try something like typeof(t2) in the foreach. -- /Jacob Carlborg |
March 04, 2011 Re: Iterating a typle tuple of templates | ||||
---|---|---|---|---|
| ||||
Posted in reply to Jacob Carlborg | Jacob Carlborg:
> Maybe you can try something like typeof(t2) in the foreach.
If you mean code like this:
import std.typetuple;
int foo(T)(T x) {
return x;
}
void main() {
alias TypeTuple!(foo, foo) t2;
foreach (i, t; typeof(t2)) {
pragma(msg, t);
assert(t2[i](i) == i); // OK
//assert(t(i) == i); // Not OK
}
}
It seems "t" is not useful...
Is all this Bugzilla-worthy?
Thank you, bye,
bearophile
|
March 04, 2011 Re: Iterating a typle tuple of templates | ||||
---|---|---|---|---|
| ||||
Posted in reply to bearophile | bearophile Wrote: > It seems "t" is not useful... Yep, foreach over tuples is kinda messed up. Same with reference tuple foreach: http://d.puremagic.com/issues/show_bug.cgi?id=2411 Direct access doesn't work but accessing via [i] does. |
March 04, 2011 Re: Iterating a typle tuple of templates | ||||
---|---|---|---|---|
| ||||
Posted in reply to bearophile | On 2011-03-04 13:19, bearophile wrote: > Jacob Carlborg: > >> Maybe you can try something like typeof(t2) in the foreach. > > If you mean code like this: > > import std.typetuple; > > int foo(T)(T x) { > return x; > } > > void main() { > alias TypeTuple!(foo, foo) t2; > foreach (i, t; typeof(t2)) { > pragma(msg, t); > assert(t2[i](i) == i); // OK > //assert(t(i) == i); // Not OK > } > } > > It seems "t" is not useful... Yeah, that's really annoying. > Is all this Bugzilla-worthy? > > Thank you, bye, > bearophile -- /Jacob Carlborg |
March 04, 2011 Re: Iterating a typle tuple of templates | ||||
---|---|---|---|---|
| ||||
Posted in reply to bearophile | bearophile <bearophileHUGS@lycos.com> wrote: > Jacob Carlborg: > >> Maybe you can try something like typeof(t2) in the foreach. > > If you mean code like this: > > import std.typetuple; > > int foo(T)(T x) { > return x; > } > > void main() { > alias TypeTuple!(foo, foo) t2; > foreach (i, t; typeof(t2)) { > pragma(msg, t); > assert(t2[i](i) == i); // OK > //assert(t(i) == i); // Not OK > } > } > > It seems "t" is not useful... > > Is all this Bugzilla-worthy? Yes. -- Simen |
Copyright © 1999-2021 by the D Language Foundation