www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - emplace doesn't forward aeguments

reply vitamin <vit vit.vit> writes:
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
parent reply kinke <noone nowhere.com> writes:
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
parent reply vitamin <vit vit.vit> writes:
On Thursday, 28 January 2021 at 23:18:21 UTC, kinke wrote:
 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).
thanks;
Jan 30 2021
parent kinke <noone nowhere.com> writes:
On Saturday, 30 January 2021 at 17:29:15 UTC, vitamin wrote:
 On Thursday, 28 January 2021 at 23:18:21 UTC, kinke wrote:
 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).
thanks;
It's already fixed: https://github.com/dlang/druntime/pull/3352
Feb 01 2021