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.
