Variadic Struct Parameter
Steven Schveighoffer
schveiguy at gmail.com
Tue Jan 12 20:45:43 UTC 2021
On 1/12/21 2:49 PM, ryuukk_ wrote:
> On Tuesday, 12 January 2021 at 18:44:53 UTC, Jonathan Levi wrote:
>> On Tuesday, 12 January 2021 at 17:46:14 UTC, Q. Schroll wrote:
>>> It's obvious why arrays work, it's the primary use case. I have no
>>> idea why classes are allowed. That classes are allowed, but structs
>>> are not, makes no sense to me.
>>
>> I like the variadic feature for classes, but I wish it worked for
>> structs as well, given that structs are value types on the stack
>> anyway, the same assembly could have either signature (assuming
>> matching argument/struct ordering).
>>
>> But why does this compile?
>>
>> ```
>> struct S {/*...*/}
>>
>> void fun(S s...) {/*...*/}
>> ```
>> If structs do not work as variadic parameters, why does `fun` still
>> compile?
>
>
> you can do this:
>
> ```
> import std.stdio;
> import core.internal.moving;
> import core.memory;
>
> void main()
> {
> auto a = Data(1);
> auto b = Data(2);
> auto c = Data(3);
>
> hello(a, b, c);
> }
>
> void hello(Data...)(Data args)
this is a template parameter named 'Data' that supersedes the
module-level type named 'Data'. Not the same thing.
-Steve
More information about the Digitalmars-d-learn
mailing list