In addition to my letter I wrote some test code following the message. I found out that I can use copy constructor signature: this(immutable(this)), to get a mutable copy of immutable struct. But this is not working with this(const(this)). My thoughts were that if I would define some method parameter as const so it will accept both mutable and immutable arguments. Is there some exceptional situation that it's not true for copy constructors or is it a bug or is it my misunderstanding of this question?

//-------------------
import std.stdio;

struct A
{
        this(string some) immutable
        {  _some = some; }
        
        //this(immutable(A) a)
        //{   _some = a._some; }
        
        this(immutable(this)) {}  //This is working with immutable
        
        //this(const(this)) {}  //But this is not working with immutable
        
        void printSome() { writeln(_some); }
        
        private string _some;
}

class B
{  this(A a)
{  _a = a; }
 private A _a;
 void printA() { _a.printSome(); }
}

immutable(A) globalA = immutable(A)("Global");

void main()
{
        //B b = new B( A(globalA) );
        B b = new B( globalA ); //immutable globalA copying into mutable
        b.printA();
}
//--------------

Also available at: http://dpaste.dzfl.pl/3c89185e

Reply via email to