move(): Give compiler an opportunity to optimize

Fix #75.
This commit is contained in:
2019-02-01 06:33:41 +01:00
parent c1535e8752
commit 7af5c30820
2 changed files with 13 additions and 6 deletions

View File

@ -5,7 +5,7 @@
/**
* Algorithms that modify its arguments.
*
* Copyright: Eugene Wissner 2017-2018.
* Copyright: Eugene Wissner 2017-2019.
* License: $(LINK2 https://www.mozilla.org/en-US/MPL/2.0/,
* Mozilla Public License, v. 2.0).
* Authors: $(LINK2 mailto:info@caraus.de, Eugene Wissner)
@ -223,9 +223,16 @@ void move(T)(ref T source, ref T target)
/// ditto
T move(T)(ref T source) @trusted
{
T target = void;
moveEmplace(source, target);
return target;
static if (hasElaborateCopyConstructor!T || hasElaborateDestructor!T)
{
T target = void;
moveEmplace(source, target);
return target;
}
else
{
return source;
}
}
///