digitalmars.D.learn - Template arg deduction
- Kevin Bailey (27/27) Jul 07 2021 I'm trying to use some fairly simple template argument deduction,
- =?UTF-8?Q?Ali_=c3=87ehreli?= (9/11) Jul 07 2021 There are other ways of achieving the same thing the simplest of which
- Paul Backus (2/11) Jul 07 2021 https://issues.dlang.org/show_bug.cgi?id=22111
- Tejas (24/51) Jul 07 2021 The following works:
- vit (16/43) Jul 07 2021 This work:
I'm trying to use some fairly simple template argument deduction, but maybe I'm not getting the syntax correct. C++ doesn't event blink at something like this, but D is giving me: temptest.d(18): Error: template temptest.func cannot deduce function from argument types !()(bar), candidates are: temptest.d(10): func(T)(foo!T.bar f) I guess D can't crack open a type like that? ``` template foo(T) { class bar { T t; } } void func(T)( // 10 foo!(T).bar f) { } int main() { foo!int.bar fi; func(fi); // 18 } ```
Jul 07 2021
On 7/7/21 12:14 PM, Kevin Bailey wrote:fairly simple template argument deductionIt's not the simplest but it is still complicated. :)I guess D can't crack open a type like that?There are other ways of achieving the same thing the simplest of which is probably the following: void func(B)(B f) { } Apparently, there are additional constraints on B, which can be expressed in D with some flexibility, pragmatism, and optimism. Ali
Jul 07 2021
On Wednesday, 7 July 2021 at 19:14:52 UTC, Kevin Bailey wrote:I'm trying to use some fairly simple template argument deduction, but maybe I'm not getting the syntax correct. C++ doesn't event blink at something like this, but D is giving me: temptest.d(18): Error: template temptest.func cannot deduce function from argument types !()(bar), candidates are: temptest.d(10): func(T)(foo!T.bar f) I guess D can't crack open a type like that?https://issues.dlang.org/show_bug.cgi?id=22111
Jul 07 2021
On Wednesday, 7 July 2021 at 19:14:52 UTC, Kevin Bailey wrote:I'm trying to use some fairly simple template argument deduction, but maybe I'm not getting the syntax correct. C++ doesn't event blink at something like this, but D is giving me: temptest.d(18): Error: template temptest.func cannot deduce function from argument types !()(bar), candidates are: temptest.d(10): func(T)(foo!T.bar f) I guess D can't crack open a type like that? ``` template foo(T) { class bar { T t; } } void func(T)( // 10 foo!(T).bar f) { } int main() { foo!int.bar fi; func(fi); // 18 } ```The following works: ```d import std.stdio; template foo(T) { class bar { T t; } } void func(T) ( // 10 T f) // No need to repeat foo!(int).bar :) { } int main() { foo!(int).bar fi;//brackets added, now syntax is correct func(fi); // 18. int couldn't get deduced here return 0; } ```
Jul 07 2021
On Wednesday, 7 July 2021 at 19:14:52 UTC, Kevin Bailey wrote:I'm trying to use some fairly simple template argument deduction, but maybe I'm not getting the syntax correct. C++ doesn't event blink at something like this, but D is giving me: temptest.d(18): Error: template temptest.func cannot deduce function from argument types !()(bar), candidates are: temptest.d(10): func(T)(foo!T.bar f) I guess D can't crack open a type like that? ``` template foo(T) { class bar { T t; } } void func(T)( // 10 foo!(T).bar f) { } int main() { foo!int.bar fi; func(fi); // 18 } ```This work: ```d template foo(T){ class bar{ T t; } } void func(alias F : foo!T, T)(F.bar f){ } void main(){ foo!int.bar fi; func(fi); } ```
Jul 07 2021