Why postblit cannot be disabled when copy ctor is defined

Fanda Vacek fanda.vacek at gmail.com
Thu Nov 7 17:28:44 UTC 2019


import std.stdio;

struct A
{
	int x;
	this(ref return scope A rhs)
	{
		writeln("copy ctor: ", x);
	}
	@disable this(this) {writeln("postblit: ", x); }
}

void main()
{
	A a;
	A b = a; // copy constructor gets called
}

I've got error: Error: struct `tst.A` is not copyable because it 
is annotated with `@disable`

but it should not be used according to 
https://dlang.org/spec/struct.html#struct-postblit

WARNING: The postblit is considered legacy and is not recommended 
for new code. Code should use copy constructors defined in the 
previous section. For backward compatibility reasons, a struct 
that defines both a copy constructor and a postblit will only use 
the postblit for implicit copying.


More information about the Digitalmars-d mailing list