On 06/22/2012 11:21 AM, Namespace wrote:
Based to the current const discussions (once again) I wanted to appease
my curiosity and want to ask why the following code works as described
in the comments:

[code]

import std.stdio;

class Bar { }

class Foo {
private:
     string _text;

     Bar _b;

public:
     this(string text, Bar b) {
         this._text = text;
         this._b = b;
     }

     // const_behaviour.d(18): Error: cannot implicitly convert
expression (this._b) of type const(Bar) to const_behaviour.Bar
     Bar GetB() const pure nothrow { /// <- must be const(Bar) instead
of Bar
         return this._b;
     }

     string GetText() const pure nothrow { /// <- no const(string) is
neccessary. Why?
         return this._text;
     }
}

void main() {
     Bar b = new Bar();

     Foo f = new Foo("foobar", b);
}

[/code]

string is immutable(char)[] and const(immutable(char)[]) implicitly
converts to immutable(char)[]. Or put differently, a string doesn't
have to be const-qualified because it cannot be changed anyway.

Reply via email to