digitalmars.D.bugs - [Issue 2454] New: tupleof(member) is incorrectly evaluated inside foreach over members-tuple
- d-bugmail puremagic.com (31/31) Nov 14 2008 http://d.puremagic.com/issues/show_bug.cgi?id=2454
- d-bugmail puremagic.com (11/11) Nov 14 2008 http://d.puremagic.com/issues/show_bug.cgi?id=2454
- d-bugmail puremagic.com (13/13) Nov 14 2008 http://d.puremagic.com/issues/show_bug.cgi?id=2454
- d-bugmail puremagic.com (39/39) Nov 14 2008 http://d.puremagic.com/issues/show_bug.cgi?id=2454
- d-bugmail puremagic.com (8/8) Nov 14 2008 http://d.puremagic.com/issues/show_bug.cgi?id=2454
- d-bugmail puremagic.com (3/4) Nov 14 2008 --
- d-bugmail puremagic.com (12/12) Jul 28 2010 http://d.puremagic.com/issues/show_bug.cgi?id=2454
http://d.puremagic.com/issues/show_bug.cgi?id=2454 Summary: tupleof(member) is incorrectly evaluated inside foreach over members-tuple Product: D Version: 2.020 Platform: PC OS/Version: Windows Status: NEW Severity: major Priority: P2 Component: DMD AssignedTo: bugzilla digitalmars.com ReportedBy: 2korden gmail.com struct B { float i; double j; int k; void test() { foreach (m; this.tupleof) { writefln(typeof(m).stringof); } } } void main() { B b; b.test(); } --
Nov 14 2008
http://d.puremagic.com/issues/show_bug.cgi?id=2454 shro8822 vandals.uidaho.edu changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |shro8822 vandals.uidaho.edu If a struct has a member that is a struct, I would expect that this would work. As for non struct members, the logical thing to do would be to make that work anyway to avoid corner cases. Or are you saying the result of the tupleof is not what it should be? --
Nov 14 2008
http://d.puremagic.com/issues/show_bug.cgi?id=2454 My bad, I forgot attaching the expected and actual result. Here they are: Expected output: float double int Actual output: float float float The tuple is ok, but foreach body "instantiated" incorrectly. --
Nov 14 2008
http://d.puremagic.com/issues/show_bug.cgi?id=2454 2korden gmail.com changed: What |Removed |Added ---------------------------------------------------------------------------- Summary|tupleof(member) is |typeof(object) is |incorrectly evaluated inside|incorrectly evaluated |foreach over members-tuple | I believe this is relevant: import std.stdio; void foo(T)(T t) { assert(is(typeof(t) == T)); writeln(T.stringof); writefln(typeof(t).stringof); } struct A { int i; void test() { foreach (m; this.tupleof) { foo(m); // line 17 } } } void main() { foo(new A()); } Expected output: A* A* Actual output: A* int Looks like result of typeof(t) is evaluated just once at compile time and then reused at every template instantiation. Commenting line 17 hides the issue. --
Nov 14 2008
http://d.puremagic.com/issues/show_bug.cgi?id=2454 What version? version: 1026 // what codepad.org uses float double int --
Nov 14 2008
http://d.puremagic.com/issues/show_bug.cgi?id=2454Version: 2.020--
Nov 14 2008
http://d.puremagic.com/issues/show_bug.cgi?id=2454 Don <clugdbug yahoo.com.au> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED CC| |clugdbug yahoo.com.au Resolution| |FIXED Fixed DMD2.023 (failed in 2.022). -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Jul 28 2010