Logical location of template instantiations

Lodovico Giaretta via Digitalmars-d digitalmars-d at puremagic.com
Mon Jun 27 09:25:27 PDT 2016


import std.conv, core.memory;

struct S
{
	int x;
	private this(int val)
	{
		x = val;
	}
}

void main()
{
	auto ptr = cast(S*)GC.malloc(S.sizeof);
	auto s = ptr.emplace(3);
}

This code does not work, as  the call `ptr.emplace(3)` creates a 
new concrete implementation of emplace with parameters `S` and 
`int`, which logically belongs to module std.conv, and so has no 
access to the private constructor.

But, logically speaking, as I'm able to construct objects of S, I 
should also be able to emplace them (which is the same thing, 
logically) while inside my module. What I mean is that in this 
situation it would be better if the call `ptr.emplace(3)` created 
a new concrete implementation of emplace inside the module that 
called it, to have the correct access permissions.

This is not the first time I run into this limitation (not only 
with functions, but also with structs), so I wonder: wouldn't it 
be worth a way to get this behaviour?

Thank you for your time.

Lodovico Giaretta


More information about the Digitalmars-d mailing list