Passing Appender by value

monarch_dodra monarchdodra at gmail.com
Sat Jun 22 09:56:31 PDT 2013


On Saturday, 22 June 2013 at 16:31:16 UTC, Namespace wrote:
> On Saturday, 22 June 2013 at 16:08:01 UTC, Andrej Mitrovic 
> wrote:
>> On 6/22/13, monarch_dodra <monarchdodra at gmail.com> wrote:
>>> I think you can work around the problem using "appender":
>>> auto buffer = appender!(int[])();
>>
>> Yes, because it has a default argument which it passes to the 
>> Appender
>> constructor. If only we had default constructors for structs 
>> in D.. or
>> a general solution to this issue. I remember maybe a year ago 
>> or so
>> I've ran into the same issue with hashes, and now it almost 
>> bit me
>> hard again (luckily this was caught immediately in a failing
>> unittest).
>
> What was the main reason for Walter to disable default CTors 
> for structs?

So that *default* construction can be evaluated statically, which 
then means .init can exist, which allows all of D's postblit 
mechanics, as well as move semantics.

It also means that declaring statics in a function is possible 
and doesn't require any special run-time code for first 
initialization.

I think the problem is that since in C++ "no-arg => default", 
they removed constructors that took no arguments, so as to avoid 
any confusion, or maybe they just didn't realize that someone 
might want to runtime construct something, but have no arguments 
to pass to the constructor.

IMO, there was a *little* bit of lack of hindsight on that one, 
but the choice was clearly superior to C++'s CC scheme on return 
by value...


More information about the Digitalmars-d-learn mailing list