Another question about move()
Stanislav Blinov
stanislav.blinov at gmail.com
Tue Jan 28 13:41:40 PST 2014
The documentation for std.algorithm.move() says:
* If hasAliasing!T is true, then the representation of source is
bitwise copied into target and then source = T.init is evaluated.
* Otherwise, target = source is evaluated.
However, current implementation does not in fact check for
aliasing. Instead, it only checks if T is a struct and has a
user-defined destructor or copy constructor. Only in this case it
really "obliterates" the source. For references, nullifying is
deliberately commented out. It also doesn't handle unions or
static arrays.
So, here's a question: why is that condition for hasAliasing is
in requirements? Can move() violate immutability? (e.g.,
following the hasAliasing requirement, wiping out immutable T
member would be legal, but wiping out immutable(T)* would be not).
Would the complete implementation of move() (accounting for
references, unions and static arrays) be allowed to wipe out any
const/immutable members of a moved-from entity?
More information about the Digitalmars-d
mailing list