template ctor overload Segmentation fault

RazvanN razvan.nitu1305 at gmail.com
Tue Dec 14 14:37:21 UTC 2021


On Tuesday, 14 December 2021 at 13:02:16 UTC, Tejas wrote:
> On Tuesday, 14 December 2021 at 12:04:36 UTC, RazvanN wrote:
>> [...]
>
> Then why did my modification work?
>
> ```d
> struct Foo(T){
>     this(Rhs, this This)(scope Rhs rhs){
>     }
>
>     this(scope Foo!(T)* rhs){ //replaced typeof(this) with 
> Foo!T and ref with pointer. Code still works if I retain 
> typeof(this)
>     }
> }
>
>
> struct Bar{
> 	Foo!int foo;
> }
>
> void main(){
> 	import std.stdio:writeln;
> 	
> 	Bar bar = Bar();
> 	auto BAR = new Bar();
> 	writeln(bar, "\t", BAR, "\t", *BAR);
> }
> ```
>
> Did my modifications ensure that this is not treated as a copy 
> constructor?

Yes, the copy constructor needs to be explicitly defined by 
passing a ref parameter. Since you are expecting an explicit 
pointer, the compiler does not see it as a copy constructor and 
therefore does not try to generate one for Bar.


More information about the Digitalmars-d-learn mailing list