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>