Thread overview |
---|
January 07, 2021 Argument deduction for alias templates | ||||
---|---|---|---|---|
| ||||
While trying out eponymous alias templates, I noticed they don't feature argument deducitions at all, even though the compiler knows what types are given, as can be told from the exceptions it's giving. Additonally, eponymous alias templates seem to only function when at least 1 argument is given, even if default values are used, which is slightly disappointing as this is not the case for eponymous function templates.
Random example from the top of my head:
> alias Vec(Kind = float, int size = 1) = Kind[size];
> alias Vec2(int size = 1, Kind = float) = Kind[size];
>
> void foo(Kind = float, int size = 1)(Kind[size] a) {
> writeln(a);
> }
>
> // Works
> char[5] a = "apple";
> foo(a);
> Vec!string b = ["0.3"];
>
> // Does not work
> Vec!float d = [0.1, 0.2];
> // mismatched array lengths, 1 and 2
> Vec2!1 c = ["apple"];
> // cannot implicitly convert expression ["apple"] of type string[] to float[]
> Vec f = [0.4];
> // template app.main.Vec(Kind = float, int size = 1) is used as a type
|
January 07, 2021 Re: Argument deduction for alias templates | ||||
---|---|---|---|---|
| ||||
Posted in reply to Paul | To further expand on this, if I am to believe stackoverflow (which may sometimes be a mistake), it seems C++ is adding support for this (https://stackoverflow.com/a/41008415/12640952), if this is intentionally not part of D, has it been considered to be added, I didn't find it in the list of DIP's nor on the forum. |
January 07, 2021 Re: Argument deduction for alias templates | ||||
---|---|---|---|---|
| ||||
Posted in reply to Paul | On Thursday, 7 January 2021 at 16:18:53 UTC, Paul wrote:
> While trying out eponymous alias templates, I noticed they don't feature argument deducitions at all, even though the compiler knows what types are given, as can be told from the exceptions it's giving. Additonally, eponymous alias templates seem to only function when at least 1 argument is given, even if default values are used, which is slightly disappointing as this is not the case for eponymous function templates.
You're right that there is no deduction being done. Deduction only happens with function templates (and even then only in limited form). With other kinds of templates, you have to spell out the instantiation.
You're not exactly right about having to supply at least one argument. You can instantiate a template without any arguments: `Foo!()`. But you have to type out the "!()" part.
|
January 07, 2021 Re: Argument deduction for alias templates | ||||
---|---|---|---|---|
| ||||
Posted in reply to Paul | On Thursday, 7 January 2021 at 16:41:23 UTC, Paul wrote: > To further expand on this, if I am to believe stackoverflow (which may sometimes be a mistake), it seems C++ is adding support for this (https://stackoverflow.com/a/41008415/12640952), if this is intentionally not part of D, has it been considered to be added, I didn't find it in the list of DIP's nor on the forum. See: https://github.com/dlang/DIPs/blob/master/DIPs/other/DIP1023.md A recent discussion: https://forum.dlang.org/post/adaidrwkknzhehatukkt@forum.dlang.org |
January 07, 2021 Re: Argument deduction for alias templates | ||||
---|---|---|---|---|
| ||||
Posted in reply to jmh530 | On Thursday, 7 January 2021 at 17:48:12 UTC, jmh530 wrote:
> On Thursday, 7 January 2021 at 16:41:23 UTC, Paul wrote:
>> To further expand on this, if I am to believe stackoverflow (which may sometimes be a mistake), it seems C++ is adding support for this (https://stackoverflow.com/a/41008415/12640952), if this is intentionally not part of D, has it been considered to be added, I didn't find it in the list of DIP's nor on the forum.
>
> See:
> https://github.com/dlang/DIPs/blob/master/DIPs/other/DIP1023.md
>
> A recent discussion:
> https://forum.dlang.org/post/adaidrwkknzhehatukkt@forum.dlang.org
Oh my that's a big discussion, thank you, I seem to have missed the postponed DIP's, sorry!
|
Copyright © 1999-2021 by the D Language Foundation