Yet another const problem...
Steven Schveighoffer
schveiguy at yahoo.com
Tue May 22 11:21:17 PDT 2012
On Sun, 20 May 2012 20:07:04 -0400, Mehrdad <wfunction at hotmail.com> wrote:
> struct Foo
> {
> @property bool empty() const { return p == null; }
> @property auto front() inout { return p; }
> void popFront() { p--; }
>
>
> // So far so good? okay, let's define save()..
>
> auto save() inout { return typeof(this)(this.tupleof); }
>
>
> // Now let's implement opApply() using the above ^^
>
> int opApply(void delegate(size_t, typeof(p)) dg) const
> {
> size_t i = 0;
> int r = 0;
>
> // So far so good...
> for (auto me = this.save(); !r && !me.empty; me.popFront())
> {
> // Whoops, won't work -- 'me' is const! :(
> r = dg(me);
> }
>
> return r;
> }
> }
>
>
>
> How do you fix this without duplicating your code?
This is yet another cry for tail-const.
It's very obvious we need a clean solution for tail-const before the const
story is finished.
The answer for now? Don't make opApply const.
-Steve
More information about the Digitalmars-d
mailing list