digitalmars.D.bugs - [Issue 19348] New: Struct casts should be better documented.
- d-bugmail puremagic.com (36/36) Nov 02 2018 https://issues.dlang.org/show_bug.cgi?id=19348
https://issues.dlang.org/show_bug.cgi?id=19348 Issue ID: 19348 Summary: Struct casts should be better documented. Product: D Version: D2 Hardware: All OS: All Status: NEW Severity: enhancement Priority: P1 Component: dlang.org Assignee: nobody puremagic.com Reporter: stanislav.blinov gmail.com struct S { int i; } struct X { byte[4] b; } union U { S s; } void main() { U u; auto s1 = cast(S)u; auto s2 = cast(X)s1; //auto s3 = S(u); // cannot implicitly convert... //auto s4 = X(s1); // cannot implicitly convert... } Documentation on such casts is lacking. https://dlang.org/spec/expression.html#cast_expressions says: 8. Casting a value v to a struct S, when value is not a struct of the same type, is equivalent to: S(v) ...which is obviously not the case, as evidenced by uncommenting the `s3/s4` lines in the snipped above. Perhaps it should state something like: 8. Casting a value v to a struct S, when v is not a struct of the same type, creates a rvalue of type S, with representation copied from v; no postblits/copy constructors are called; v.sizeof must be equal to S.sizeof. 9. Casting a value v to a struct S, when v is also of type S, is equivalent to making a copy of v. Such a cast will generate an error if appropriate postblit/copy constructor is disabled for S. --
Nov 02 2018