www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 20367] New: Postblit cannot be disabled when copy ctor is

https://issues.dlang.org/show_bug.cgi?id=20367

          Issue ID: 20367
           Summary: Postblit cannot be disabled when copy ctor is defined
           Product: D
           Version: D2
          Hardware: x86_64
                OS: Linux
            Status: NEW
          Severity: normal
          Priority: P1
         Component: dmd
          Assignee: nobody puremagic.com
          Reporter: fanda.vacek volny.cz

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.

--
Nov 07 2019