On 06/22/2012 12:25 PM, Namespace wrote:
As far as i know "int" is not immutable or const by default. So, why work this code:[code] import std.stdio; class Bar { } class Foo { private: int _id; Bar _b; public: this(int id, Bar b) { this._id = id; this._b = b; } // const_behaviour.d(18): Error: cannot implicitly convert expression (this._b) of type const(Bar) to const_behaviour.Bar const(Bar) GetB() const pure nothrow { /// <- must be const(Bar) instead of Bar return this._b; } int GetId() const pure nothrow { /// <- no const(int) is neccessary. Why?! return this._id; } } void main() { Bar b = new Bar(); Foo f = new Foo(42, b); } [/code]
The same reason, because const(int) implicitly converts to int. If the data is copied, the qualifiers can be changed in any way that is desired. As string, int has no mutable indirections.
