On Sun, Jan 11, 2009 at 12:15 PM, Tim M <a...@b.com> wrote: > On Sun, 11 Jan 2009 16:10:39 +1300, Bill Baxter <wbax...@gmail.com> wrote: > >> On Sun, Jan 11, 2009 at 12:04 PM, Tim M <a...@b.com> wrote: >>> >>> On Sun, 11 Jan 2009 15:59:26 +1300, Tim M <a...@b.com> wrote: >>>> >>>> Why does it still work for some objects? >>> >>> >>> This works: >>> >>> >>> module test; >>> >>> class A >>> { >>> this() >>> { >>> // >>> } >>> } >>> >>> class B >>> { >>> this() >>> { >>> // >>> } >>> int opApply (int delegate (inout B) dg) >>> { >>> return 1; >>> } >>> } >>> >>> void main() >>> { >>> A a; >>> B b; >>> foreach(a; b) >>> { >>> // >>> } >>> } >> >> Interesting. But there the inner 'a' is actually a B. So it >> compiles, but there's no way it's using the outer 'a' as the counter >> variable. >> >> --bb > > Sorry for my typo but change that line to: > int opApply (int delegate (inout A) dg) > > and it still compiles.
'Still compiles" or "then it will compile"? Anyway, I'm curious if it's using the outer A or not. Can you add a line or two to actually modify 'a' in the loop? --bb