https://issues.dlang.org/show_bug.cgi?id=17415
Issue ID: 17415
Summary: std.conv.emplace does not forward arguments correctly
Product: D
Version: D2
Hardware: x86_64
OS: All
Status: NEW
Severity: major
Priority: P1
Component: phobos
Assignee: [email protected]
Reporter: [email protected]
import std.conv : emplace;
struct S
{
@disable this(this);
}
class C
{
this(S) {}
}
void[__traits(classInstanceSize, C)] holder = 0;
emplace!C(S.init);
I'd expect that to compile, and move the initializer correctly. But it does not
compile (static assert), because emplace() copies arguments around, instead of
using something like std.functional.forward. However, the fix is not trivial,
some of the Phobos code actually depends on this, whether intentionally or
accidentally, I cannot tell.
--