"Bill Baxter" <[EMAIL PROTECTED]> wrote in message news:[EMAIL PROTECTED] > On Tue, Oct 21, 2008 at 8:29 AM, Walter Bright > <[EMAIL PROTECTED]> wrote: >> >> http://www.digitalmars.com/d/1.0/changelog.html >> http://ftp.digitalmars.com/dmd.1.036.zip >> >> The 2.0 version splits phobos into druntime and phobos libraries (thanks >> to >> Sean Kelly). This will enable both Tango and Phobos to share a common >> core >> library. >> >> http://www.digitalmars.com/d/2.0/changelog.html >> http://ftp.digitalmars.com/dmd.2.020.zip >> >> There are a lot of structural changes that go along with this, so expect >> some rough patches with this release. It may take a followup release to >> file >> them down. There's also some renaming of imports and function names, as a >> compromise with Tango names. > > Wao! Missed this at first: > > class Foo > { > ref int getref() { > return m_int; > } > private: > int m_int = 23; > } > > void main() { > auto foo = new Foo; > > writefln(foo.getref); > foo.getref() = 7; > writefln(foo.getref); > } > //Outputs: > //23 > //7 > > It works! This is maybe even bigger news than cure for TangoPhobia! > > But I think maybe more documentation is needed in the Ref returns > section regarding how this affects opIndex. > > class Foo > { > this() { > m_arr.length = 10; > foreach(i, ref a; m_arr) { a=i;} > } > int[] array() { > return m_arr; > } > ref int opIndex(size_t idx) { > return m_arr[idx]; > } > > private: > int[] m_arr; > } > > void main() { > auto foo = new Foo; > foo[3] = -99; > //hello.d(44): Error: operator [] assignment overload with opIndex(i, > value) illegal, use opIndexAssign(value, i) > //hello.d(44): function hello.Foo.opIndex (uint idx) does not match > parameter types (int,int) > //hello.d(44): Error: expected 1 arguments, not 2 > } > > Apparently using opIndex with ref return is not allowed as a way to > set an index. > This works though: > > *(&foo[3]) = -99; > > Is there a good reason why it shouldn't be possible to use opAssign as > a replacement for opIndexAssign?
I think it should be a bug. I believe Andrei fully intended to use it this way. -Steve
