[DIP] In-place struct initialization

Cauterite via Digitalmars-d digitalmars-d at puremagic.com
Sat Jul 30 15:20:49 PDT 2016


On Saturday, 30 July 2016 at 22:05:29 UTC, cym13 wrote:
> On Saturday, 30 July 2016 at 21:45:31 UTC, Cauterite wrote:
>> On Saturday, 30 July 2016 at 21:42:42 UTC, cym13 wrote:
>>> ...
>>
>> Here's something you might enjoy in the meantime:
>> https://github.com/Cauterite/dlang-pod-literals/blob/master/podliterals.d
>
> Thanks, I'm aware of this work but some points just aren't good 
> enough IMHO. We can do better than that. First of all the 
> syntax is too far appart from traditional field assignment 
> which is always done using ':' . I understand why it is so but 
> still it makes one more thing to remember. Calling lambdas all 
> the time isn't free while the change I propose is static. Those 
> lambdas aren't optimized away by DMD and while that might 
> change I just don't feel like trusting it. And more importantly 
> it doesn't work with common structs, you have to pass it to 
> your template first and then it isn't the struct anymore. There 
> are just too many ways for this to get wrong in my opinion.
>
> Note that I find the idea ingenious and interesting, I just 
> think we can do better than that.

It does work with common structs:

	struct Xyzº {
		int X;
		wstring Y;
		Object Z;
	};
	auto Thing = pod!(Xyzº,
		Y => `asdf`w,
		X => 3,
		Z => null,
	);

	assert(is(typeof(Thing) == Xyzº));

But anyway, you don't need to convince me that having a native 
language feature would be superior to this template nonsense :P
It's just a workaround for the moment (albeit a bloody powerful 
workaround!)

Although I do like being able to both define and instanciate a 
structure in the same expression (especially with unions). Maybe 
that could be a future extension to your DIP.


More information about the Digitalmars-d mailing list