<div><span class="" style="white-space:pre">Consider this example:</span></div><div><span class="" style="white-space:pre"><br></span></div><div><span class="" style="white-space:pre">  </span>struct Array(Type_)<br></div><div>
<span class="" style="white-space:pre">       </span>{</div><div><span class="" style="white-space:pre">  </span>public:</div><div><span class="" style="white-space:pre">            </span>this(Type_ array_[]...)</div><div><span class="" style="white-space:pre">            </span>{</div>
<div><span class="" style="white-space:pre">                    </span>_array = array_;</div><div><span class="" style="white-space:pre">           </span>}</div><div><span class="" style="white-space:pre">  </span></div><div><span class="" style="white-space:pre">           </span>this(this)</div>
<div><span class="" style="white-space:pre">            </span>{</div><div><span class="" style="white-space:pre">                  </span>_array = _array.dup;</div><div><span class="" style="white-space:pre">               </span>}</div><div><span class="" style="white-space:pre">  </span></div>
<div><span class="" style="white-space:pre">            </span>ref Array!Type_ opAssign(in Array!Type_ array_)</div><div><span class="" style="white-space:pre">            </span>{</div><div><span class="" style="white-space:pre">                  </span>_array = array_._array.dup;</div>
<div><span class="" style="white-space:pre">                    </span>return this;</div><div><span class="" style="white-space:pre">               </span>}</div><div><span class="" style="white-space:pre">          </span></div><div><span class="" style="white-space:pre">   </span>private:</div>
<div><span class="" style="white-space:pre">            </span>Type_[] _array;</div><div><span class="" style="white-space:pre">    </span>}</div><div><span class="" style="white-space:pre">  </span></div><div><span class="" style="white-space:pre">   </span>unittest</div>
<div><span class="" style="white-space:pre">    </span>{</div><div><span class="" style="white-space:pre">          </span>Array!int one = Array!int(1, 2, 3, 4, 5);</div><div><span class="" style="white-space:pre">          </span>immutable Array!int two = one<span style="white-space:pre">; //Error: conversion error from Array!(int) to immutable(Array!(int))</span></div>
<div><span class="" style="white-space:pre">    </span>}</div><div><span class="" style="white-space:pre">  </span></div><div>I enforce value-type semantics by duplicating the arrays on copy, so it should behave like a value type with no indirections (implicitly convert to immutable).<br>
</div><div>What do I need to do for this to work?</div><div><br></div>-- <br>Bye,<br>Gor Gyolchanyan.<br>