digitalmars.D.learn - emplace doesn't forward aeguments
- vitamin (20/20) Jan 28 2021 Is there reason why std.conv.emplace doesn't forward arguments to
Is there reason why std.conv.emplace doesn't forward arguments to
__ctor?
this doesn't work:
import std.conv : emplace;
import std.functional : forward;
struct Bar{
disable this(const ref typeof(this) rhs)pure nothrow safe
nogc;
}
class Foo{
Bar bar;
this(Bar bar){
this.bar = forward!bar;
}
}
void main(){
void[__traits(classInstanceSize, Foo)] tmp = void;
emplace!Foo(cast(Foo)tmp.ptr, Bar.init); //error
}
Jan 28 2021
On Thursday, 28 January 2021 at 21:15:49 UTC, vitamin wrote:Is there reason why std.conv.emplace doesn't forward arguments to __ctor?Yeah, a bug in the emplace() version for classes, some missing `forward!args` in there (it works when emplacing a struct with identical ctor). E.g. https://github.com/dlang/druntime/blob/e2e304e1709b0b30ab65471a98023131f0e7620c/src/core/ ifetime.d#L124-L128 if you want to fix it (std.conv.emplace is now an alias for core.lifetime.emplace in Phobos master).
Jan 28 2021
On Thursday, 28 January 2021 at 23:18:21 UTC, kinke wrote:On Thursday, 28 January 2021 at 21:15:49 UTC, vitamin wrote:thanks;Is there reason why std.conv.emplace doesn't forward arguments to __ctor?Yeah, a bug in the emplace() version for classes, some missing `forward!args` in there (it works when emplacing a struct with identical ctor). E.g. https://github.com/dlang/druntime/blob/e2e304e1709b0b30ab65471a98023131f0e7620c/src/core/ ifetime.d#L124-L128 if you want to fix it (std.conv.emplace is now an alias for core.lifetime.emplace in Phobos master).
Jan 30 2021
On Saturday, 30 January 2021 at 17:29:15 UTC, vitamin wrote:On Thursday, 28 January 2021 at 23:18:21 UTC, kinke wrote:It's already fixed: https://github.com/dlang/druntime/pull/3352On Thursday, 28 January 2021 at 21:15:49 UTC, vitamin wrote:thanks;Is there reason why std.conv.emplace doesn't forward arguments to __ctor?Yeah, a bug in the emplace() version for classes, some missing `forward!args` in there (it works when emplacing a struct with identical ctor). E.g. https://github.com/dlang/druntime/blob/e2e304e1709b0b30ab65471a98023131f0e7620c/src/core/ ifetime.d#L124-L128 if you want to fix it (std.conv.emplace is now an alias for core.lifetime.emplace in Phobos master).
Feb 01 2021








kinke <noone nowhere.com>