The following code gives compile-time error, "cannot evaluate gen() at compile time." Removing the "i" from the foreach fixes this. template Tuple(T...) { alias T val; } alias Tuple!(int) Tup; string gen() { foreach (i, type; Tup.val) { } return null; } string text = gen();
BCS wrote: > d-bugmail@puremagic.com wrote: >> http://d.puremagic.com/issues/show_bug.cgi?id=1464 >> >> Summary: "static" foreach breaks CTFE >> Product: D >> Version: 2.003 >> Platform: PC >> OS/Version: Windows >> Status: NEW >> Keywords: rejects-valid >> Severity: normal >> Priority: P2 >> Component: DMD >> AssignedTo: bugzilla@digitalmars.com >> ReportedBy: reiner.pope@gmail.com >> >> >> The following code gives compile-time error, "cannot evaluate gen() at >> compile >> time." Removing the "i" from the foreach fixes this. >> >> template Tuple(T...) >> { >> alias T val; >> } >> >> alias Tuple!(int) Tup; >> >> string gen() >> { >> foreach (i, type; Tup.val) >> { >> } >> return null; >> } >> >> string text = gen(); >> >> > > > That compiles at all? in the 1.x versions you can't have an alias of a > tuple in a template other than if the tuple name is the same as the name > of the template (It's a known bug, not a language restriction) It's aliasing the template instantiation, not the tuple. It should compile in 1.x as well as 2.x.
Fixed dmd 1.021 and 2.004
AltStyle によって変換されたページ (->オリジナル) / アドレス: モード: デフォルト 音声ブラウザ ルビ付き 配色反転 文字拡大 モバイル