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