Is it expected behaviour that this code compiles and prints:

this(this)
this(this)

?
[code]
import std.stdio;

static if (!is(typeof(writeln)))
        alias writefln writeln;

struct vec2f {
public:
        float x, y;
        
        this(this) {
                writeln("this(this)");
        }
}

void main()
{
        vec2f v1 = vec2f(0, 1);
        vec2f v2 = vec2f(2, 3);
        
        v2 = v1;
        
        vec2f v3 = v2;
}
[/code]

while this code

[code]
import std.stdio;

static if (!is(typeof(writeln)))
        alias writefln writeln;

struct vec2f {
public:
        float x, y;
        
        this(this) {
                writeln("this(this)");
        }
        
        
        ref vec2f opAssign(ref const vec2f v) {
                writeln("opAssign");
                
                this.x = v.x;
                this.y = v.y;
                
                return this;
        }
}

void main()
{
        vec2f v1 = vec2f(0, 1);
        vec2f v2 = vec2f(2, 3);
        
        v2 = v1;
        
        vec2f v3 = v2;
}
[/code]

prints:

opAssign
this(this)
?

And what should I use, this(this) or opAssign? I thougth that it is unimportant,
but that changed my mind: http://dpaste.dzfl.pl/36ce3688

Reply via email to