Thread overview
Argument deduction for alias templates
Jan 07, 2021
Paul
Jan 07, 2021
Paul
Jan 07, 2021
jmh530
Jan 07, 2021
Paul
Jan 07, 2021
ag0aep6g
January 07, 2021
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
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
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
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
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!